Thông báo

Collapse
No announcement yet.

[Help] Timer0 của 18F4431 chạy chậm

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [Help] Timer0 của 18F4431 chạy chậm

    Chào mọi người .... mình đang gặp vấn đề sử dụng timer0 của 18F4431 thì timer chạy rất chậm ... cả trên mô phỏng lẫn thực tế ... mạch thật mình sử dụng thạch anh 20M + tụ 15p

    Code:
    #include <18F4431.h>
    
    
    #device adc=16
    
    #FUSES NOWDT                    //No Watch Dog Timer
    #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
    #FUSES HS                          //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
    #FUSES NOBROWNOUT          //No brownout reset
    #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    
    
    #use delay(clock=20000000)
    
    #define LCD_RS_PIN      PIN_B7                                    ////
    #define LCD_RW_PIN      PIN_B6   
    #define LCD_ENABLE_PIN  PIN_B5                                    ////
    
    #define LCD_DATA4       PIN_B4                                    ////
    #define LCD_DATA5       PIN_B3                                    ////
    #define LCD_DATA6       PIN_B2                                    ////
    #define LCD_DATA7       PIN_B1    
    
    #include <lcd.c>
    
    
    
    int8 count=0;
    int8 dem=0;
    #INT_TIMER0
    void ngat()
     { 
      count++;                                           
    
     }
    
    
    void main()
    {
    
       enable_interrupts(int_timer0);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
       enable_interrupts(global);
       set_timer0(6);//  0.4ms
       
       lcd_init();
       delay_ms(100);
       lcd_gotoxy(1,1);
       lcd_putc("Timer 0");
    
       
    
       
     while(TRUE)
      {
          if(count==50)                 //20ms
          {
             dem++;
             lcd_gotoxy(1,2);
             printf(lcd_putc,"%d",dem);
             count=0;
          }
    
         
       }
    
    }


    Mình sử dụng protues 7.10 ... Rất mong mọi người giúp đỡ ....
    Attached Files

  • #2
    Chậm là chậm thế nào

    Comment


    • #3
      Mình so sánh chương trình trên với chương trình

      Code:
      while(TRUE)
        {
               delay_ms(20);
               dem++;
               lcd_gotoxy(1,2);
               printf(lcd_putc,"%d",dem);
         }

      Trong chương trình sử dụng TImer thì vòng lặp 20ms nhưng phải chờ mấy s , vòng while mới thực hiện một lần ... mình đã test trên mạch thật ... cũng như trên mô phỏng đều bị ....
      Thì thấy chậm hơn ... cả 2 đều delay 20 ms mà ???

      Comment


      • #4
        2 cái không xuất phát cùng lúc thì làm sao phát hiện nó chậm hay nhanh ?

        Code:
        int x;
        while(true)
        {
             set_timer0(0);
             delay_us(400);
             x=get_timer0();
             lcd_gotoxy(1,2);
             print....(.....,x);
        }
        Trong thời gian trễ 400us thì timer 0 đếm được tầm 250. x nhận giá trị trả về là 250. Kiểm tra kết quả hiện thị x trên lcd xem sao nhé.

        Mà quên. Timer0 của 18F4431 là 16 bit cơ mà. Chả trách chậm

        Comment


        • #5
          he he ...! đọc lại datasheet về timer0 đi
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • #6
            Thanks duong_act ! mình làm được rồi !!! Timer0 của 18F4431 có 2 chế độ 8bit và 16bit

            Comment


            • #7
              muốn nó là 8 bit thì T016bit=1;
              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

              Comment

              Về tác giả

              Collapse

              KhoaiLuoc Tìm hiểu thêm về KhoaiLuoc

              Bài viết mới nhất

              Collapse

              Đang tải...
              X