pf=(pf+buf&0x01+buf&0x02+buf&0x04+buf&0x08+buf&0x10+buf&0x20+buf&0x40+buf&0x80);
//求解校验和
putbyte(pf); //发送校验和
} while(SBUF!=0);
}
/**********************************************************************************
函数名称:接收校验函数
说明:
**********************************************************************************/
void check_receive()
{
while(1)
{
pf=0x00; //校验和清零
// vo_num4=SBUF;
// pf=pf+(vo_num4&0x01+vo_num4&0x02+vo_num4&0x04+vo_num4&0x08+vo_num4&0x10+vo_num4&0x20+vo_num4&0x40+vo_num4&0x80);
vo_num2[m]=SBUF;
pf=pf+( vo_num2[m]&0x01+vo_num2[m]&0x02+ vo_num2[m]&0x04+ vo_num2[m]&0x08+ vo_num2[m]&0x10+ vo_num2[m]&0x20+ vo_num2[m]&0x40+vo_num2[m]&0x80);
//求解校验和
if((SBUF^pf)==0x00) //判断求出的校验和与接收到的校验和是否相等
{
putbyte(0x00);
m++;
break;
}
else
{
putbyte(0xff); //如果不相等。则发送ff
}
}//while(1)
}
/**********************************************************************************
函数名称:主函数
说明:
**********************************************************************************/
void disp(void)
{
lcd_init(0);
refrash_charactor();
lcd_clear();
str_1="频率: Hz";
str_2="失真度:0. ";
lcd_display(1,1,str_1);
lcd_display(1,2,str_2);
}
main()
{
unsigned char temp;
serial_init (); //在使用串口模式1 前要初始
disp();
while(1)
{
// putbyte(0xeb) ;
// putbyte(0x90) ;
// putbyte(0xaa) ;
// m=0;
// check_receive();
if(vo_num2[0]==0xeb&&vo_num2[1]==0x90&&vo_num2[2]==0xaa)
{ vo_num1=vo_num2[3]*256+vo_num2[4];//频率
vo_num3=(vo_num2[5]*256+vo_num2[6])*10; //失真度
refrash_charactor(vo_num1,vo_num3);
lcd_display(4,1,freq);
lcd_display(6,2,dist);
m=0;
}
}//while(1)
}
上一页 [1] [2]
本文关键字:单片机 通信 程序 51单片机,单片机-工控设备 - 51单片机