12-10-2010, 06:58 PM | #16 | |
Đệ tử 4 túi
|
Trích:
Code:
setup_TIMER2(mode, period, postscale); set_TIMER2(value);//xác định giá trị đầu(8bit) cho timer2 get_TIMER2(); //trả về trị số nguyên 8 bit T2_DISABLE T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 period :số nguyên tu 0-255 postcale:số nguyên 0-16 |
|
16-05-2011, 11:39 PM | #17 | |
Đệ tử 1 túi
Tham gia ngày: Apr 2010
Bài gửi: 16
: |
Trích:
(65535 - 3035)*1us*8 = 500000us |
|
25-02-2012, 06:30 AM | #18 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 5
: |
Mình cũng nghĩ như bạn alycuong là cái set_timer1(3035). Thế thì mỗi lần ngắt Timer nó sẽ đếm được 0.5s do đó cần 2 lần ngắt timer để đếm được 1s. Nhưng ko hiểu sao mình mô phỏng thấy 1s gì mà nhanh khiếp. Mọi người xem hộ mình cái code nhé:
#include <16F877A.h> #include <def_877A.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) int16 count; //bien dem /*Khoi tao port*/ void PortInit() { TRISD = 0x00; //PORTD la cong xuat PORTD = 0xFF; //Keo chan PORTD len tro khang cao } /*Khoi tao Timer1*/ void Timer1Init() { set_timer1(3035); setup_timer_1(RTCC_INTERNAL|RTCC_DIV_8); //Chon tan so Timer1 la Internal va chia tan 8 enable_interrupts(int_timer1); //Cho phep ngat tran Timer1 enable_interrupts(global); //Cho phep ngat toan cuc count = 0; } //Chuong trinh ngat TMR0 #int_timer1 void interrupt_timer1() { set_timer1(3035); ++count; if(count == 2) // { count=0; PORTD^=0xFF; //Dao tat ca bit portD } } //Chuong trinh chinh void main(void) { PortInit(); //khoi tao port Timer1Init(); //khoi tao timer1 while(1) { interrupt_timer1(); } } |
26-02-2012, 11:25 AM | #19 |
Nhập môn đệ tử
Tham gia ngày: Feb 2012
Bài gửi: 3
: |
Tính toán là 1 phần thôi, xong chạy cũng chẳng được chuẩn 1s đâu. Mình toàn áng chừng rồi lấy OSILO trong Proteus ra đo cho chuẩn =))
|
15-08-2012, 02:40 PM | #20 |
Đệ tử 1 túi
Tham gia ngày: Oct 2009
Bài gửi: 12
: |
Timer1 PIC8F
Có ai giúp em cái này với. Em dùng ngắt timer1 để thử tạo 1 xung trên chân bất kì của PIC8F26K22 để kiểm tra độ chính xác nhưng ko rõ lỗi ở đâu nữa.
Thạch anh:16MHz Code của em đây ah Code:
#bit Pulse=getenv("SFR:PORTB").0 #INT_TIMER1 void Timer1_Isr(void) { set_timer1(65410);//Tràn sau 125 chu kỳ timer Pulse ^=1;//Đảo trạng thái chân PORTB.0 } void main(void) { setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(65410); enable_interrupts(INT_TIMER1); enable_interrupts(global); while(true); } Có ai chỉ ra chỗ thiếu sót giúp em với. Thank |
04-07-2016, 12:33 PM | #21 |
Nhập môn đệ tử
Tham gia ngày: Apr 2016
Bài gửi: 1
: |
em có code xuất tần số mà không hiểu đoạn này anh nào pro giúp mình với
//=========================== #int_ext void dem_xung() { so_xung++; } #INT_TIMER1 void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1 { set_timer1(3036); //(65536-3036).1us.8=50 000us count_t1++; //tran sau 500 000us=0.5us if(count_t1==2) // 2*500 000=1s { tan_so = so_xung; so_xung = 0; count_t1 = 0; } } //===================== chương trình #include <16f877a.h> #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #use fast_io(d) #use fast_io(e) #byte portd=0x08 #bit rs=0x09.0 #bit rw=0x09.1 #bit e=0x09.2 #bit rb0=0x06.0 int16 so_xung,tan_so,count_t1; int16 tramnghin,chucnghin,nghin,tram,chuc,dv; int16 u[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9}; #int_ext void dem_xung() { so_xung++; } #INT_TIMER1 void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1 { set_timer1(3036); //(65536-3036).1us.8=50 000us count_t1++; //tran sau 500 000us=0.5us if(count_t1==2) // 2*500 000=1s { tan_so = so_xung; so_xung = 0; count_t1 = 0; } } void ghi_ir() { e=1;rs=0;rw=0;e=0; delay_ms(3); } void ghi_dr() { e=1;rs=1;rw=0;e=0; delay_ms(3); } void main() { { set_tris_d(0); set_tris_e(0b000); enable_interrupts(global); enable_interrupts(int_ext); ext_int_edge (H_to_L); enable_interrupts(INT_TIMER1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(3036); portd=0x01; ghi_ir(); portd=0x0c; ghi_ir(); portd=0x38;// 2 dong ghi_ir(); PORTD=0X80; GHI_IR(); PORTD="T"; GHI_DR(); PORTD="a"; GHI_DR(); PORTD="n"; GHI_DR(); PORTD=" "; GHI_DR(); PORTD="S"; GHI_DR(); PORTD="o"; GHI_DR(); PORTD=":"; GHI_DR(); } while(1) { tramnghin=tan_so/100000; chucnghin=(tan_so/10000)%10; nghin=(tan_so/1000)%10; tram=(tan_so/100)%10; chuc=(tan_so/10)%10; dv=tan_so%10; portd=0x87; ghi_ir(); portd=u[tramnghin]; ghi_dr(); portd=u[chucnghin]; ghi_dr(); portd=u[nghin]; ghi_dr(); portd=u[tram]; ghi_dr(); portd=u[chuc]; ghi_dr(); portd=u[dv]; ghi_dr(); portd="H"; ghi_dr(); portd="z"; ghi_dr(); } } |
|
|