Mình đang làm quen với C trong vi điều khiển( dùng Keil C). Mình có thử một đoạn code dùng timer2 trong 89C52, tạo ngắt 1ms. Cứ mỗi 1000ms thì cho nháy đèn led 1 lần. Debug bằng keil C hoặc proteus đều Ok cả, nhưng nạp vào mạch thì lại không chạy( mạch ok đã được test bàng "hello world").
Mình paste code ở đây, bạn nào rảnh thì xem hộ. Lập trình ngắt có cần chú ý gì không?Xin chỉ giáo.
#include<Reg52.h>
sbit led_pin=P1^0;
unsigned int counter=0;
void Timer2(void)
{
T2CON = 0x04; // Load Timer 2 control register
TH2 = 0xFC; // Load T2 high byte
RCAP2H = 0xFC; // Load T2 reload capt. reg. high byte
TL2 = 0x2B; // Load T2 low byte
RCAP2L = 0x2B; // Load T2 reload capt. reg. low byte
ET2 = 1;
TR2 = 1;
EA = 1; // Globally enable interrupts
}
void main(void)
{
Timer2();
while(1);
}
void ISR_1000ms(void) interrupt 5
{
TF2 = 0;
if (counter==1000)
{
counter=0;
led_pin=~led_pin;
}
else
counter++;
}
Mình paste code ở đây, bạn nào rảnh thì xem hộ. Lập trình ngắt có cần chú ý gì không?Xin chỉ giáo.
#include<Reg52.h>
sbit led_pin=P1^0;
unsigned int counter=0;
void Timer2(void)
{
T2CON = 0x04; // Load Timer 2 control register
TH2 = 0xFC; // Load T2 high byte
RCAP2H = 0xFC; // Load T2 reload capt. reg. high byte
TL2 = 0x2B; // Load T2 low byte
RCAP2L = 0x2B; // Load T2 reload capt. reg. low byte
ET2 = 1;
TR2 = 1;
EA = 1; // Globally enable interrupts
}
void main(void)
{
Timer2();
while(1);
}
void ISR_1000ms(void) interrupt 5
{
TF2 = 0;
if (counter==1000)
{
counter=0;
led_pin=~led_pin;
}
else
counter++;
}
Comment