پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود
من خیلی بسکام کار نمیکنم ولی فکر کنم این شکل برنامه نوشتن خیلی اشتباهه
من خیلی بسکام کار نمیکنم ولی فکر کنم این شکل برنامه نوشتن خیلی اشتباهه
// External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40;
interrupt [EXT_INT0] void ext_int0_isr(void) { if(sign==1) { if(pinA.1==1) { PORTD.0=1 PORTD.1=1 PORTD.2=1 } if(pinA.2==1) { PORTD.0=0 PORTD.1=0 PORTD.2=0 } sign=0; } if(sign==0) { if(pinA.1==1) { PORTD.2=0 } if(pinA.2==1) { PORTD.2=0 } sign=1; } }
#include <mega16.h> void main(void) { PORTA=0x00; DDRA=0xF8; PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFF; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40; while (1) { interrupt [EXT_INT0] void ext_int0_isr(void) { if(sign==1) { if(pinA.1==1) { PORTD.0=1 PORTD.1=1 PORTD.2=1 } if(pinA.2==1) { PORTD.0=0 PORTD.1=0 PORTD.2=1 } sign=0; } if(sign==0) { if(pinA.1==1) { PORTD.2=0 } if(pinA.2==1) { PORTD.2=0 } sign=1; } } } }
#ASM (CLI) وآخرش #ASM (SEI) اولش وقفه رو غیر فعال بعد فعال میکنه . همچنین در اول اینتراپت یه تاخیر 100 میلی ثانیه بذار DELAY_MS(100) آخرشم یه تاخیر 2 3 ثانیه ای بذار
// External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40;
دیدگاه