سلام
من یه برنامه ی ساده نوشتم ، در این برنامه وقفه ها به لبه ی پاین رونده حساس هستن ، وقتی که وقفه اتفاق می افته برنامه ی مربوط به lcd که داخل تابع int0 نوشته شده کار نمی کنه ، درحالیکه برنامه ی صفر و یک شدن پورت کار می کنه. ورژن کدویژن من 2.05.0 هست. برنامه توی پروتیوس کار می کنه ولی توی عمل فقط پورت چشمک می زنه و صفحه ی lcd به کل پاک میشه! من فایل های مربوط به کدویژن و شبیه سازی رو گذاشتم. کسی می دونه قضیه از چه قراره؟
اینم کد برای بررسی سریعتر :
کد:
#include <mega8.h>
#include <stdio.h>
#include <alcd.h>
#include <delay.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
lcd_init(16);
PORTD.4=1;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("INT0 isr");
delay_ms(1000);
PORTD.4=0;
}
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
}
void main(void)
{
char Enter=13;
char sms[160];
char B;
char k=0;
int j=0;
int i=0;
for (k=0;k<250;k++){
sms[k]=0;
};
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x10;
GICR|=0xC0;
MCUCR=0x0A;
GIFR=0xC0;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x26;
// RS - PORTB Bit 5
// RD - PORTB Bit 6
// EN - PORTB Bit 4
// D4 - PORTB Bit 3
// D5 - PORTB Bit 2
// D6 - PORTB Bit 1
// D7 - PORTB Bit 0
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
printf("ATE0%c",Enter);
lcd_putsf("Get sms...");
delay_ms(1000);
//lcd_clear();
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
}
}