本帖最后由 shiba1986 于 2013-5-27 14:59 编辑
上位机每一次发一个01给单片机,单片机就给上位机发一次数据(当前显示值),但是每发一次数据时候 数码管就会闪烁一次
用的波特率是2400 数码管每1s刷新一次显示值
用的AT89C55WD单片机 12M晶振
void transmit(void)
{
int n,k;
if(RI)
{
RI=0;
transmit_temp=SBUF;
}
if(transmit_temp==0x01)//判断是不是地址
{
transmit_receive_flag=1;//开启发送
transmit_temp=0x00;
}
if(transmit_temp==0xff)
{
transmit_receive_flag=0;//关闭发送
transmit_temp=0x00;
}
//if(transmit_flag==1)
if(transmit_receive_flag==1)
{
//if(transmit_receive_flag==1)
//if(transmit_temp==0x01)
{
//EA=0;
ES=0;//发送时取消中断
transmit_receive=1;//485处于接收状态把单片机数据发到ab线上
for(n=0;n<4;n++)
{
SBUF=0xFF;
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
}//0xFF 0xFF 0xFF 0xFF
for(k=0;k<3;k++)
{
if(k==1)
{
SBUF=k;
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
for(n=0;n<4;n++)
{
if(n<2)
{
SBUF=0x00;
}
else
{
SBUF=transmit_data[n-2]; //先传浓度
}
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
}
}//31 00 00 HUM1 HUM2
else if(k==2)
{
SBUF=k;
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
for(n=0;n<4;n++)
{
if(n<2)
{
SBUF=0x00;
}
else
{
SBUF=transmit_data[n]; //后传电压
//pdata+=1;
}
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
}
}
else
{
SBUF=k;
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
for(n=0;n<4;n++)
{
SBUF=0x00;
while(!TI);//发送完T1会被置1
TI=0;//选择不进中断一直发
}
}
}
}
transmit_receive_flag=0;
//transmit_flag=0;
//EA=1;
//ES=1;//重新打开中断
}
transmit_receive=0;//485处于接收状态
}
|