Đây là phần code của mình. Mình dùng ccs c.
Ham truyen cua Master
Code:
void transmit_1(int adress,int type,int type1,int16 data)
{
char s[9],s1[5],s2[3];
int i,dodaichuoi;
itoa(adress,10,s2);s[0]=s2[0];//adress la dia chi slave
itoa(type,10,s2);s[1]=s2[0];
itoa(type1,10,s2);s[2]=s2[0];
if (type==0)
{
s[3]='@';
s[4]=null;
}
if (type==1)
{
itoa(data,10,s1);
dodaichuoi=strlen(s1);
for(i=0;i<dodaichuoi;i++)
s[i+3]=s1[i];
s[dodaichuoi+3]='@';
s[dodaichuoi+4]=null;
}
printf("%s",s);
delay_ms(20);
if ((type==0)&((type1==1)||(type1==0)))
output_low(pin_c0);
}
Còn đây là phần xử lý nhận giá trị cua Slave
Code:
#INT_RDA
RECEIVER()
{
char kt;
int i,j,dodaichuoi;
char s[9];
char s1[5];
int16 tg;
j=0;
kt=fgetc(PC);
s[i]=kt;
if (s[i]=='@')
{
s[i]=null;
dodaichuoi=strlen(s);
lcd_display_str(0,0,s);//hien thi chuoi nhan dc
lcd_display_int8(0,10,dodaichuoi);// hien thi do dai
if (s[0]=='2')
receiver_2(s);
for (j=0;j<9;j++)
s[j]=null;
i=0;
}
else i=i+1;
}
Đây là hàm xử lý chuỗi nhận được tai Slave
Code:
void receiver_2(char s[])
{
char s1[5];
int i,j;
int16 tg;
strlen(s);
for (i==0;i<(strlen(s)-3);i++)
s1[i]=s[i+3];
tg=atol(s1);
if (s[1]=='0')
{
if (s[2]=='0')
{
output_high(pin_c0);
delay_ms(5);
transmit_2(1,1,status0,khoiluong0);//tra ve Master
}
if (s[2]=='1')
{
output_high(pin_c0);
delay_ms(5);
transmit_2(1,0,0,adc0);// tra ve Master
}
if (s[2]=='2')
{
ver=1;
}
if (s[2]=='3')
{
ver=0;
}
}
if (s[1]=='1')
{
if (s[2]=='0')
{
rnominal0=tg;
write_rom_16bit(0,rnominal0);
}
if (s[2]=='1')
{
rempty0=tg;
write_rom_16bit(4,rempty0);
}
if (s[2]=='2')
{
rtoleran0=tg;
write_rom_16bit(8,rtoleran0);
}
if (s[2]=='3')
{
rpausetime0=tg;
write_rom_16bit(12,rpausetime0);
}
if (s[2]=='4')
{
rk0=tg;
write_rom_16bit(32,rk0);
}
if (s[2]=='5')
{
zero0=tg;
write_rom_16bit(36,zero0);
}
if (s[2]=='6')
{
rtr1=tg;
write_rom_16bit(44,rtr1);
}
if (s[2]=='7')
{
rtr2=tg;
write_rom_16bit(48,rtr2);
}
if (s[2]=='8')
{
rtr3=tg;
write_rom_16bit(52,rtr3);
}
if (s[2]=='9')
{
rtr4=tg;
write_rom_16bit(56,rtr4);
}
}
}
Đây là hàm truyền của Slave
Code:
void transmit_2(int adress,int type,int type1,int16 data)
{
char s[8],s1[5],s2[2];
int i,dodaichuoi;
itoa(adress,10,s2);s[0]=s2[0];
itoa(type,10,s2);s[1]=s2[0];
itoa(type1,10,s2);s[2]=s2[0];
itoa(data,10,s1);
dodaichuoi=strlen(s1);
for(i=0;i<dodaichuoi;i++)
s[i+3]=s1[i];
s[dodaichuoi+3]='@';
s[dodaichuoi+4]=null;
printf("%s",s);
delay_ms(50);
output_low(pin_c0);
}