RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Hỏi cách cài đặt timer0 chính xác

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • Botroword
    Nhập môn đệ tử
    • Mar 2016
    • 2

    #1

    Hỏi cách cài đặt timer0 chính xác

    Em mới làm quen với PIC và CCS, em viết thử 1 đoạn chương trình nhỏ với timer0 và cho mô phỏng trong proteus thì thấy kết quả không như mong muốn.

    Ở đây em tạo chế độ bật tắt chân A4 sau 0,5s nhưng khi mô phỏng thì thấy thời gian này không chính xác, bị kéo dài hơn.

    Không biết em làm sai chỗ nào, rất mong được mọi người chỉ giúp.
    Code:
    #include <16F1938.h>
    #use delay(crystal=32000000)     
    
    int8      t_check;                  
    int16      tcount;                   
    
    #INT_TIMER0
    //Fosc=32.000.000
    //Fcy=Foso/4=8.000.000
    //TCy=1/(Fcy/8)=1us
    void  TIMER0_isr(void) 
    {
       set_timer0(205);//(255-205)*1=50us overflow   
       tcount++;
       IF ( tcount >= 10000)//500ms
       {
          tcount = 0;   
          output_toggle(PIN_A4);      
       }      
       t_check=get_timer0();   //206
    }
    
    void main()
    {  
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);      //256,0 us overflow   
       enable_interrupts(INT_TIMER0);
       enable_interrupts(GLOBAL);
       while(TRUE)
       {      
             //TODO: User Code
       }
    }
    Attached Files
  • buikhacbinh1996
    Nhập môn đệ tử
    • Jan 2016
    • 5

    #2
    // 20 mhz clock, no prescaler, set timer 0

    // to overflow in 35us



    set_timer0(81); // 256-(.000035/(4/20000000))

    theo mình thấy thì trong help ccs như thế này khác với bạn

    Comment

    • Botroword
      Nhập môn đệ tử
      • Mar 2016
      • 2

      #3
      Công thức của ccs cũng giống cách tính của em thôi, em diễn giải ra nhìn cho dễ đọc.
      Fosc=2.000.000
      Fcy=Fosc/4=20Mhz/4=5Mhz
      Tcy=1/Fcy=1/5Mhz=0.2us
      35us cần 175Tcy
      Timeset=256-175=81
      Last edited by Botroword; 04-04-2016, 12:45 PM.

      Comment

      Working...