با سلام
من از ارتباط 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();
}
}
}
میدونم مستر نیاز به آدرس نداره ولی دیگه چیزی به ذهنم نرسید اینم آدرس دار کردم
لطفا راهنماییم کنید
لطفا راهنماییم کنید

دیدگاه