![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 6 túi
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
: |
Tại sao mình phải set_timer1(15536); tới 02 lần luôn vậy bạn?
Còn nữa ,nếu mình muốn dừng ngắt thì phải dùng khai báo: disable_interrupt(global); phải không?nếu đúng thì mình phải đặt khai báo đó ở chổ nào? |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 2 túi
|
![]() Trích:
1. Vì sao phải set_timer1(15536); tới 02 lần ? set_timer1(15536); trong hàm void main(void) là để tính thời gian bắt đầu đếm của Timer0 . Còn set_timer1(15536); trong hàm void interrupt_timer0() thì sau khi tính giá trị xong thì nó sẽ gán giá trị của set_timer1(15536); vào hàm này. 2. Khai báo disable_interrupt(global); được hiểu là cấm ngắt . Còn đặt ở đâu thì bạn tham khỏa trong đoạn Code sau: Code:
#include <16F877A.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) #byte PORTB = 0x06 int16 count; int8 a; //Chuong trinh ngat TMR0 #int_timer0 void interrupt_timer0() { set_timer0(6); ++count; if(count == 2000) // 2000*500us = 500000us = 1s { count=0; rotate_left(&a,1); } } //Chuong trinh chinh void main(void) { set_tris_b(0); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); // so 2 la o cho T_dinhthi=2*(256-6)*1us = 500 us enable_interrupts(global); set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us a = 0x01; disable_interrupts(global); while(true) { PORTB = a; } } |
|
![]() |
![]() |
![]() |
|
|