PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hỏi cách cài đặt timer0 chính xác (http://www.picvietnam.com/forum/showthread.php?t=34813)

Botroword 31-03-2016 04:57 PM

Hỏi cách cài đặt timer0 chính xác
 
2 Attachment(s)
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
  }
}


buikhacbinh1996 02-04-2016 11:14 AM

// 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

Botroword 04-04-2016 12:25 PM

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


Múi giờ GMT. Hiện tại là 09:04 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam