甲机:#include
void main() //主函数
{
unsigned char i;
unsigned char send[]={0x01,0x03,0x05,0x07}; //定义要发送的数据,为了简化显示,发送数据在0~9之间
TMOD=0x20; //定时器T1工作于方式2
TL1=0xf4; //波特率为2400bps
TH1=0xf4;
SCON=0x40; //定义串行口工作于方式1
TR1=1;
for(i=0;i<4;i++)
{
SBUF=send[i]; //发送第i个数据
while(TI==0); //查询等待发送是否完成
TI=0; //发送完成,TI由软件清0
}
while(1);
}
乙机:#include
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f,0x77};
//定义0~9显示字型码
unsigned char send[]={0x01,0x03,0x05,0x07}
//unsigned char buffer[]={0x00,0x00,0x00,0x00}; //定义接收数据缓冲区
void disp(void); //显示函数声明
void main() //主函数
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2
TL1=0xf4; //波特率定义
TH1=0xf4;
TR1=1;
SCON=0x40; //定义串行口工作于方式1
for(i=0;i<4;i++)
{
REN=1; //接收允许
while(RI==0); //查询等待接收标志为1,表示接收到数据
buffer[i]=SBUF; //接收数据
RI=0; //RI由软件清0
}
for(;;)disp(); //显示接收数据
}
//函数名:disp
//函数功能:在4个LED上显示buffer中的4个数
//入口参数:无
//出口参数:无
void disp()
{
unsigned char w,i,j;
w=0xfd; //位码赋初值
for(i=0;i<4;i++)
{
P1=~(tab[buffer[i]]); //送显示字型段码,buffer[i]作为数组分量的下标
P2=~w; //送位码
for(j=0;j<100;j++); //显示延时
w<<=1; //w左移一位
}
}
软件PrOteus仿真没有正确1,3,5,7,还出现段码不显示,我认为甲机发送程序,乙机发送程序是正确的,但是显示部分一直没有找到问题,请赐教?谢谢哦哦!
没有正确1,3,5,7,还出现段码不显示。
先用直接查看双击通信数据,好像是数据传递过程中出了问题。