سلام دوستان .
چطوری میشه چند کاراکتر از پورت سریال (با وقفه) دریافت کرد ؟ و با یک کد ثابت مثلا "123456" مقایسه اش کرد ؟
این کد رو خودم نوشتم :
ولی مشکل اساسی داره :
اولا مثلا اگه قرار باشه در صورتی که رشته ارسالی عدد 1234 باشد یک پین میکرو یک شود و رشته ارسالی به هر دلیل عدد 123 شود عدد 123 در متغییر k ذخیره میشود و اگر مجددا رشته 1234 ارسال شود متغییر k ابتدا مقدار 1231 و سپس مقدار 234 را میگیرد . و این روند همچنان ادامه پیدا میکند و در صورتی که کد 1234 ارسال شود قادر به تشخیص نخواهد بود . (در ضمن رشته های ارسالی با فواصل کوتاه ارسال میشوند)
لطفا کمک کنید .
خلاصه:
به کدی نیاز دارم که در صورت دریافت کد 1234 یک پین 1 و در صورت دریافت کد 123456 همان پین 0 شود .
ممنون.
چطوری میشه چند کاراکتر از پورت سریال (با وقفه) دریافت کرد ؟ و با یک کد ثابت مثلا "123456" مقایسه اش کرد ؟
این کد رو خودم نوشتم :
کد:
interrupt [USART_RXC] void usart_rx_isr(void)
{
s=UDR;
UDR=s;
k[m]=s;
m++;
if(m==4){
v=atoi(k);
for(m=0;m<4;m++){
time_out=0;
}
for(m=0;m<5;m++){
k[m]=NULL;
}
m=0;
}
}
ولی مشکل اساسی داره :
اولا مثلا اگه قرار باشه در صورتی که رشته ارسالی عدد 1234 باشد یک پین میکرو یک شود و رشته ارسالی به هر دلیل عدد 123 شود عدد 123 در متغییر k ذخیره میشود و اگر مجددا رشته 1234 ارسال شود متغییر k ابتدا مقدار 1231 و سپس مقدار 234 را میگیرد . و این روند همچنان ادامه پیدا میکند و در صورتی که کد 1234 ارسال شود قادر به تشخیص نخواهد بود . (در ضمن رشته های ارسالی با فواصل کوتاه ارسال میشوند)
لطفا کمک کنید .
خلاصه:
به کدی نیاز دارم که در صورت دریافت کد 1234 یک پین 1 و در صورت دریافت کد 123456 همان پین 0 شود .
ممنون.







و بقیه داده ها رو مستقیم میگیرم یعنی واسه همون if(!start_flag) یه else میذارم و تو else بقیه دیتا رو می گیرم و عملیات مد نظر رو انجام میدم بعد که کارم با بقیه دیتا تموم شد تو همون else این فلق رو ریست می کنم تا برنامه مجددا منتظر start بعدی باشه.
دیدگاه