سلام.
بچه ها من یه برنامه با winavr واسه وقفه های خارجی نوشتم. (int0 and int1)
اول برنامه رو ببینید:
اینم شماتیکش:
[img]http://www.*****upload.com/images/20196710319658593001.gif[/img]
int0 رو بصورت falling و int1 هم بصورت rising تعریف کردم.
وقتیکه مدار شروع به کار میکنه، led که واسه وقفه int1 گذاشتم، چند ثانیه روشن میمونه و بعدش خاموش میشه! چرا اینطوریه؟ درسته؟!
int0 که بصورت falling هست، وقتیکه کلید را پایین فشار میدهم و نگه میدارم، تا زمانیکه کلید پایینه، leD مربوط به اون روشن میمونه و با رها کردن کلید خاموش میشه!
int1 که به صورت rising هست، وقتیکه کلید رو پایین نگه میدارم led روشن میشه ولی بعد زا یه مدت خاموش میشه! در حالیکه کلید هنوز پایینه! اشکال کار از کجاست؟! :angry:
ممنونم...
بچه ها من یه برنامه با winavr واسه وقفه های خارجی نوشتم. (int0 and int1)
اول برنامه رو ببینید:
کد:
#include <avr/io.h>//iom32.h #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/delay.h> #include "Global/global.h" ISR(INT0_vect) { PORTC |= (1<<PINC1); _delay_ms(500); PORTC &= ~(1<<PINC1);//clear bit pc1 } ISR(INT1_vect) { PORTC |= (1<<PINC0); _delay_ms(1000); PORTC &= ~(1<<PINC0);//clear bit pc0 } void main() { DDRC = 0xff; PORTC = 0; GICR &= ~(1<<INT0); //disable external interrup (int0) GICR &= ~(1<<INT1); //disable external interrup (int1) MCUCR &= (1<<ISC01)& ~(1<<ISC00); //falling edge of int0 MCUCR |= (1<<ISC11)|(1<<ISC10); //rising edge of int1 //MCUCR &= (1<<ISC11)& ~(1<<ISC10); //rising edge of int1 GICR |= (1<<INT0); //enable int0 GICR |= (1<<INT1); //enable int1 sei(); // Enable interrupt. for(;;) { } }
اینم شماتیکش:
[img]http://www.*****upload.com/images/20196710319658593001.gif[/img]
int0 رو بصورت falling و int1 هم بصورت rising تعریف کردم.
وقتیکه مدار شروع به کار میکنه، led که واسه وقفه int1 گذاشتم، چند ثانیه روشن میمونه و بعدش خاموش میشه! چرا اینطوریه؟ درسته؟!
int0 که بصورت falling هست، وقتیکه کلید را پایین فشار میدهم و نگه میدارم، تا زمانیکه کلید پایینه، leD مربوط به اون روشن میمونه و با رها کردن کلید خاموش میشه!
int1 که به صورت rising هست، وقتیکه کلید رو پایین نگه میدارم led روشن میشه ولی بعد زا یه مدت خاموش میشه! در حالیکه کلید هنوز پایینه! اشکال کار از کجاست؟! :angry:
ممنونم...
دیدگاه