全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

单片机串口通信程序(帮忙检查错误)

[复制链接]
1231 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
[font=宋体各位大侠有空帮我看看程序,我自己编的,检查N遍了,找不出错误,但是用proteus仿真时数码管不显示,当我按下发送开关时可以看到两个单片机的串口电平有变化,但数码管直接显示F,过段时间就消失然后什么也不显示。我程序的意思是,单片机A发送数据给单片机B,B接收到了用数码管显示出来。程序通过了Keil C编译。程序如下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit D1=P1^0;//定义发送标志
sbit D2=P1^1;//接收的应答信号标志
void delay()
{
uint x,y;
for(x=110;x>0;x--)
for(y=1000;y>0;y--);
}
/*******发送程序*******/
void send()
{
uchar i,sum;
do{
SBUF=0xaa;//发送准备信号
while(!TI);
TI=0;
while(!RI);
RI=0;
D2=1;//应答标志,用LED亮表示B应答
}while((SBUF^0xbb)!=0);//判断B是否准备好
do{
for(i=0;i<16;i++)//发送数据表
{
SBUF=table[i];
sum+=table[i];//计算校验和
while(!TI);TI=0;
}
SBUF=sum;//发送校验和
while(!TI);TI=0;
while(!RI);RI=0;
}while((SBUF^0x00)!=0);//判断B接收的数据是否有误,有误重发
}
/***********接收程序**************/
void reveice()
{
uchar i,sum=0;
uchar shuju[16];
do{
while(!RI);//接收A的准备信号
RI=0;
SBUF=0xbb;//发送应答信号
while(!TI);
TI=0;
}while((SBUF^0xaa)!=0);//A是否发送准备信号
while(!RI);RI=0;
for(i=0;i<16;i++)//接收A的数据
{
shuju[i]=SBUF;
sum+=shuju[i];//计算接收数据的校验和
}
while(!RI);RI=0;//接收A的校验和
if((SBUF^sum)!=0)//判断校验和是否一致
{
SBUF=0xff;//校验和不一致发送0xff
while(!TI);TI=0;
}
else
{
SBUF=0x00;//校验和一致发送0
while(!TI);TI=0;
for(i=0;i<16;i++)//接收到的数据给P1口
{
P1=shuju[i];
delay();
}
}
}
void main()
{
D1=1;
D2=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
if(D1==0) send();
}
]

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表