سلام دوستان
من یه برنامه برای atmega16 نوشتم برای ارتباط با sim900 که حلقه اصلی Main منتظر میمونه تا یک پیام از SIM900 برسه و اون را پردازش کنه.
توی برنامه ام تایمر 16 بیتی 1 تنظیم کردم تا هر یک ثانیه یک بار وقفه ایجاد کنه و درون وقفه دستورات خوندن سیگنال و ساعت را ره SIM900 ارسال میکنم و برنامه به درستی عمل میکنه و لی بعد از چند دقیقه میبینم تایمر دیگه کار نمیکنه و برنامه از کار افتاده...
برای تست اجرای تایمر هر بار که تایمر اجرا میشه یک کاراکتر خاصی را درون LCD تغییر میدم که از روی متوقف شدن همون میبینم که تایمر از کار افتاده.
همچنین حلقه while(1) درون main هم دیگه دستورات را پردازش نمیکنه....
هرکاری میکنم نمیفهمم مشکلش از کجا میتونه باشه؟؟؟؟
دوستان کسی آمار Mega16 ها را نداره که چطور هستند؟ به نظر شما این هنگ کردن و کار نکردن از IC هم میتونه باشه؟
تابع وقفه:
دستوران درون وقفه از نوعی نیستند که برنامه را بلاک کنند و توابعی که درون تابع وقفه فراخوانی میشن تنها دستورات خواندن سیگنال و ساعت را با پورت سریال ارسال میکنند و منتظر دریافت پاسخ نمیمونند...
خوندن ساعت هر بیست ثانیه اتفاق می افته و خوندن سیگنال هر چهل ثانیه یک بار که همزمان هم ارسال نمیشن..
من یه برنامه برای atmega16 نوشتم برای ارتباط با sim900 که حلقه اصلی Main منتظر میمونه تا یک پیام از SIM900 برسه و اون را پردازش کنه.
توی برنامه ام تایمر 16 بیتی 1 تنظیم کردم تا هر یک ثانیه یک بار وقفه ایجاد کنه و درون وقفه دستورات خوندن سیگنال و ساعت را ره SIM900 ارسال میکنم و برنامه به درستی عمل میکنه و لی بعد از چند دقیقه میبینم تایمر دیگه کار نمیکنه و برنامه از کار افتاده...
برای تست اجرای تایمر هر بار که تایمر اجرا میشه یک کاراکتر خاصی را درون LCD تغییر میدم که از روی متوقف شدن همون میبینم که تایمر از کار افتاده.
همچنین حلقه while(1) درون main هم دیگه دستورات را پردازش نمیکنه....
هرکاری میکنم نمیفهمم مشکلش از کجا میتونه باشه؟؟؟؟
دوستان کسی آمار Mega16 ها را نداره که چطور هستند؟ به نظر شما این هنگ کردن و کار نکردن از IC هم میتونه باشه؟
تابع وقفه:
کد:
interrupt [TIM1_OVF] void timer1_ovf_isr(void) { static uchar timer = 1; static uchar rsIndex = 0; TCNT1H=0xD5; // - 10800 TCNT1L=0xCF; if(Timer1Enable == false) return; if(DelayForResetLCD > 0) { DelayForResetLCD --; if(DelayForResetLCD == 0) { WillBeResetLCD = 1; SIM_ReadAT(); }// WillBeResetLCD = 1; } else { timer++; lcd_gotoxy(12,0); lcd_putchar(RUNSTRING[rsIndex++]); if(rsIndex == 4) rsIndex = 0; if(timer % 20 == 0) { SIM_ReadClock(); } if(timer == 30) { SIM_ReadSignal(); } if(timer == 41) timer = 1; } }
خوندن ساعت هر بیست ثانیه اتفاق می افته و خوندن سیگنال هر چهل ثانیه یک بار که همزمان هم ارسال نمیشن..
دیدگاه