با سلام
من از ارتباط 9 بیتی تو نوشتن برنامم استفاده کردم ولی بیت نهم txb رو استفاده نکردم
وقتی master و 1 slave هست داده به درستی انتقال پیدا میکنه ولی وقتی sllave دوم میاد هیچ داده ای انتقال پیدا نمیکنه
برنامه slave2:
کد:
[left][right][left][left] while (1) { lcd_clear(); lcd_putsf("hello"); delay_ms(100); if(klid==0)relay=1; if(klid==1)relay=0; if (((status=UCSRA) & RX_COMPLETE)!=0){ a=getchar(); lcd_clear(); sprintf(display_buffer,"a:%2d",a); lcd_puts(display_buffer); delay_ms(100); if(a=12){ // status 1100 feedback=relay | klid; if(feedback==0){ a=45; // lamp to remote 001 0 1101 lcd_clear(); sprintf(display_buffer,"a:%2d",a); lcd_puts(display_buffer); delay_ms(100); putchar(a);} if(feedback==1){ a=61; // lamp to remote 001 1 1101 lcd_clear(); sprintf(display_buffer,"a:%2d",a); lcd_puts(display_buffer); delay_ms(100); putchar(a);} } if(a=4)relay=1; //0100 if(a=8)relay=0; //1000 } delay_ms(100); } } char getchar(void) { char status,data,a; while (1) { while (((status=UCSRA) & RX_COMPLETE)==0); data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0){ a=data & 0x01; if(a==address){ a=data & 0x0C; return data; } else main(); } } }
برنامه master:
کد:
while (1) { /* read the time from the RTC */ // rtc_get_time(&hour,&min,&sec); /* read the date from the RTC */ /* rtc_get_date(&week_day,&year,&month,&day); sprintf(display_buffer,"%2d:%02d:%02d",hour,min,sec); lcd_clear(); lcd_puts(display_buffer); sprintf(display_buffer,"%d/%02d/%02d",1373+year,month,day); lcd_gotoxy(0,1); lcd_puts(display_buffer); */ if(((status=UCSRA) & RX_COMPLETE)!=0){ x=getchar(); a= x & 0x80; // 1000 0000 if(a==128){ a= x & 0x0F; lcd_clear(); sprintf(display_buffer,"a:%2d",a); lcd_puts(display_buffer); delay_ms(100); putchar(a); } if(a==0){ a= x & 0x1F; // - - - ?(0/1)- -(statuse) - - (code lamp) a=a+128; lcd_clear(); sprintf(display_buffer,"a:%2d",a); lcd_puts(display_buffer); delay_ms(100); putchar(a); } } delay_ms(100); } } char getchar(void) { char status,data,a; while (1){ while (((status=UCSRA) & RX_COMPLETE)==0); data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0){ a= data & 0x20; if(a==address){ lcd_clear(); sprintf(display_buffer,"address:%2d",a); lcd_puts(display_buffer); delay_ms(100); a=data & 0x8F; //10001111 lcd_clear(); sprintf(display_buffer,"recieve:%2d",a); lcd_puts(display_buffer); delay_ms(100); return a; } else main(); } } }
میدونم مستر نیاز به آدرس نداره ولی دیگه چیزی به ذهنم نرسید اینم آدرس دار کردم
لطفا راهنماییم کنید
لطفا راهنماییم کنید
دیدگاه