Em mới học AVR đang làm ngắt ngoài đơn giản
dùng ngắt ngoài kích cạnh lên
nhấn INT1 tăng lên 1
nhấn INT0 giảm 1
hiển thì ra led 7 đoạn
nhưng lạ là khi chạy nhấn INT1 lần đầu thí nó tăng lên 1(có interrupt xảy ra) nhưng nhấn tiếp thì chẳng có gì nữa (không có interrupt)
em không biết bị sao mong các anh giúp em với
đây là code (em dùng codevision)
đây là mạch proteus
dùng ngắt ngoài kích cạnh lên
nhấn INT1 tăng lên 1
nhấn INT0 giảm 1
hiển thì ra led 7 đoạn
nhưng lạ là khi chạy nhấn INT1 lần đầu thí nó tăng lên 1(có interrupt xảy ra) nhưng nhấn tiếp thì chẳng có gì nữa (không có interrupt)
em không biết bị sao mong các anh giúp em với
đây là code (em dùng codevision)
PHP Code:
#include <mega16.h>
unsigned int n=0;
char DecimalTo7Segment(unsigned char n){
char data[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
if(n>9){
return -1;
}
return data[n];
}
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(n>0){
n--;
PORTB=DecimalTo7Segment(n);
}
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if(n<9){
n++;
PORTB=DecimalTo7Segment(n);
}
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTD=0x00;
DDRD=0x00;
GICR|=0xC0;
//kich canh len
MCUCR=(0x01<<ISC11)|(0x01<<ISC10)!(0x01<<ISC01)|(0x01<<ISC00);
#asm("sei")
while (1)
{
}
}
Comment