View Single Post
Old 09-06-2013, 05:31 PM   #13
vanchang1987
Đệ tử 1 túi
 
Tham gia ngày: Apr 2010
Bài gửi: 12
:
setup_timer_2 (mode, period, postscale)
// set cho bộ chia trước
mode :T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16

// set khoảng tràn cho timer2, khác các timer khác nghe.
// vd bạn set là period=5 thì sau 5+1(set cờ báo tràn) xung nhịp nó tràn
period : int 0-255

// set cho bộ chia sau
postscale :1-16

để tạo khoảng định thời 1S các bạn tham khảo code sau:
#include <16F877A.h>
#FUSES NOWDT //No Watch Dog Timer
#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 output PIN_A1

static int count=0;
void main()
{
setup_timer_2(T2_DIV_BY_16, 0x06, 10);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER2);

while(true);
}
#INT_TIMER2
void fulse_1s(){
setup_timer_2(T2_DIV_BY_16, 249, 16);
// timer2 tang len 1 sau 0.2*16=3.2us
// tran sau 3.2*(249+1)= 800us
// xay ra ngat sau 800*16= 12800us
count++;
if(count==78){ // 1000000/12800=78.125
output_toggle(output);
count=0;
}
}
Hình Kèm Theo
File Type: png fulse 1s.png (3.7 KB, 96 lần tải)
File Kèm Theo
File Type: rar 1s timer2 pic16f877a.rar (29.1 KB, 23 lần tải)
vanchang1987 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn