سلام
من یه برنامه ی ساده نوشتم ، در این برنامه وقفه ها به لبه ی پاین رونده حساس هستن ، وقتی که وقفه اتفاق می افته برنامه ی مربوط به LCD که داخل تابع INT0 نوشته شده کار نمی کنه ، درحالیکه برنامه ی صفر و یک شدن پورت کار می کنه. ورژن کدویژن من 2.05.0 هست. برنامه توی پروتیوس کار می کنه ولی توی عمل فقط پورت چشمک می زنه و صفحه ی LCD به کل پاک میشه! من فایل های مربوط به کدویژن و شبیه سازی رو گذاشتم. کسی می دونه قضیه از چه قراره؟
کد و شبیه سازی
اینم برنامه برای بررسی سریع :
من یه برنامه ی ساده نوشتم ، در این برنامه وقفه ها به لبه ی پاین رونده حساس هستن ، وقتی که وقفه اتفاق می افته برنامه ی مربوط به 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 } }
دیدگاه