دوستان، یه مشکلی دارم که احتمالاً به خاطر تجربه کم منه. میکروکنترلرم حتماً باید ریست بشه تا وقفه تایمرش کار کنه. یعنی وقتی پروگرامر رو درمیارم، و مدار رو روشن می کنم وقفه غیرفعاله. بقیه برنامه درست کار می کنه.
میکرو dsPIC30F59011، کامپایلر MikroC Pro، فرکانس 20MIPS، کلاً برنامه خاصی نیست، ولی مجبورم تو وقفه تایمر، یه پورت رو صفر و یک کنم و یکم محاسبه انجام بدم. راه اندازی تایمر یک:
تابع وقفه تایمر یک:
هان، POR به قدر 64ms فعاله. غیرفعالش هم که کردم درست نشد. دیگه اینکه، تغذیه سریع میاد بالا و MCLR با خازن 470n و مقاومت 1K ولتاژ دار شده. همینا دیگه. هر چی جُستم نتونستم درستش کنم. اولویت ها رو هم دست کاری کردم، نشد.
لازمه بگم، وقتایی که دستی ریستش می کنم همه چی ردیفه ها. ولی اوقاتی که خودش می خواد شروع به کار کنه وقفه ش کار نمی کنه.
خوب، حالا چی از قلم افتاده که وقفه غیر فعال میشه؟!
میکرو dsPIC30F59011، کامپایلر MikroC Pro، فرکانس 20MIPS، کلاً برنامه خاصی نیست، ولی مجبورم تو وقفه تایمر، یه پورت رو صفر و یک کنم و یکم محاسبه انجام بدم. راه اندازی تایمر یک:
کد:
//---- Timer1 init: ------- IPC0 = IPC0 | 0x5000; // Interrupt priority level = 5 T1IF_bit = 0; // Clear T1IF T1IE_bit = 1; // Enable Timer1 interrupts PR1 = 500 - 1; //20.0MHz / 500 = 40.0kHz T1CON = 0x8000; // Timer1 ON, internal clock Freq, prescaler 1:1
کد:
void Timer1Int() iv IVT_ADDR_T1INTERRUPT { T1IF_bit = 0; // Clear T1IF R_20kHz=!R_20kHz; // Invert 'R' // do a little calculation }
لازمه بگم، وقتایی که دستی ریستش می کنم همه چی ردیفه ها. ولی اوقاتی که خودش می خواد شروع به کار کنه وقفه ش کار نمی کنه.
خوب، حالا چی از قلم افتاده که وقفه غیر فعال میشه؟!
دیدگاه