سلام به همگی دوستان و اساتید عزیز
من یه برنامه چپگرد راست گرد نوشتم با اینتراپت.
خلاصه کار اینجوره که میخام یه درب برقی شیشه ای رو که یه چشم و 2تا میکرو سوییچ در دو طرف داره رو کنترل کنم.
چشم رو به صورت اینتراپت تعریف کردم چون میخام تا حضور شخص رو حس میکنه درب رو باز کنه .حالا میخاد درب بسته باشه یا در حال بسته شدن باشه .
2 تا پین دیگه هم پول اپ کردم برا میکرو سوییچ ها که تا تغییر وضعیت داد درب بسته بشه.ولی مشکل اینجایست که تا زیر برنامه وقفه اجرا میشه سریع از زیربرنامه میپره بیرون و زمان کافی برای باز شدن کامل درب وجود نداره.از delay هم که استفاده میکنم تو اینتراپت اصلا وضعیت خوب نیس.قاطی میکنه.در ضمن نمیخام کنترلی رو سرعت داشته باشم فعلا.اگرچه دوس دارم ولی زیاد حرفه ای نیستم. :( :cry:
اینم برنامه
#include <mega32.h>
#include <Delay.h>
void main () {
DDRB=0b00000011 ;
PORTB=0b11111100;
DDRD=0b00000000;
PORTD=0b1111111;
MCUCR=00000101;
GICR=11000000;
GIFR=00000000;
while (1) {
#asm ("sei"
if(PINB.6==0 || PINB.5==0){ //limit sw chap ya rast
PORTB.0=0; // khamosh shodan motor
PORTB.1=0;
delay_ms(100);
PORTB.0=0;
PORTB.1=1; // baste shodan darb
delay_ms(100);
delay_ms(100);
delay_ms(100);
delay_ms(100);
PORTB.0=0;
PORTB.1=0;
};
};
};
interrupt [ EXT_INT0 ] void int0 (){
PORTB.0=0; //khamosh shodan motor
PORTB.1=0;
delay_ms(50);
PORTB.0=1; //baz shodan (enable rast gard)
PORTB.1=0;
delay_ms(100);
};
دیدگاه