-
1 فایل پیوست
مشکل با int0 در کدویژن
سلام
من یه برنامه ی ساده نوشتم ، در این برنامه وقفه ها به لبه ی پاین رونده حساس هستن ، وقتی که وقفه اتفاق می افته برنامه ی مربوط به 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
}
}
-
سلام مجدد:
من برنامه شما رو تست گرفتم.توی پروتئوس منم درست کار کرد.فردا مدار رو عملی میبندم.تست میگیرم ببینم چی میشه.شما هم سخت افزار رو یه بررسی بکنید.من برنامه رو نگاه کردم..چیز خاصی نداره.بعیده که جواب نده!.خودمم به این مشکل خوردم.350 خط برنامه نوشته بودم.تو پروتئوس درست بود ولی تو عمل درست جواب نمیداد.اونم به خاطر ایزوله بودن پروتئوس بود که من با یک کردن یه پورت کارم درست شد.
احتمال میدم که مشکل شما هم اینطوری باشه.فردا تست میگیرم.نتیجه رو بهتون میگم.
-
سلام
ممنون از جوابتون این قسمتش رو که خوندم "با یک کردن یه پورت کارم درست شد" این نکته به ذهنم رسید که آیا باید pind.2 رو که همون int0 هست ورودی تعریف کنم یا نه؟ آخه توی بسکام لازم نیست ، حالا باید یه بارم توی کدویژن و عملی تست کنم. چون برنامه واقعا سادست ، هیچی نداره ولی مخ منو کار گرفته!
جواب رو اعلام می کنم.
-
آقا مشکل رفع شد!
من توی برنامه یه متغیر SMS تعریف کرده بودم که 160 تا درایه داشت ولی بعدا تا درایه ی 250 رو صفر کرده بودم! یعنی اصلا درایه های 160 به بعد وجود نداشتن.
همین. الان که عدد 250 رو به 160 تغییر دادم برنامه درست شده! ممنون جناب t.o.e
-
سلام: یا علی مدد.
ما که کاری نکردیم.ذهن خلاق خودتون بود که عیب برنامه رو پیدا کرد.
موفق و موید باشید.