51单片机c语言串行双机通信的问题。请直接给我程序,要有注释说明。

用两个89c51单片机实现双机通讯来做一个时钟,A机用来产生数据,B机用来显示。只需要给我收发程序就行啦、其他的显示、时钟进位的就不需要了。具体思路是A机产生a、b、c的... 用两个89c51单片机实现双机通讯来做一个时钟,A机用来产生数据,B机用来显示。只需要给我收发程序就行啦、其他的显示、时钟进位的就不需要了。具体思路是A机产生a、b、c的具体值,然后把abc传给B机显示数据。怎么做到?求大神帮帮忙。
请注意,这里的a,b,c是会变化的,因为A机在产生秒信号,a的值就会变,当a到59时,b就会变。这样子的,也就是说两机是要不断进行查询的,做到可以a,b,c的值改变时B机显示的数据可以及时改变。
展开
 我来答
做而论道
高能答主

2013-12-07 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
先设计出来电路,然后再谈编程的问题。
更多追问追答
追问
不需要你给我完整的程序,我只需要通讯那一块的程序。端口什么的随便你用。我要的是A机发送a,b,c给B机,B机拿来用。a,b,c是有具体值的,比如说24:56:14,那么对应的a就是24,b就是56,c就是14。
追答
多字节的数据传送,需要制订协议。
//--------------------------------
send(uchar x) //甲机发送
{
SBUF = x; while(!TI); TI = 0;
}
//--------------------------------
main() //甲机主函数
{
init();
wile(1) {
if(sec) {
sec = 0;
send('$');
send(a / 10 + '0'); send(a % 10 + '0');
send(b / 10 + '0'); send(b % 10 + '0');
send(c / 10 + '0'); send(c % 10 + '0');
}
}
}
//============================================
main() //乙机主函数
{
init();
wile(1) {
display();
}
}
//--------------------------------
recv_abc() //乙机接收
{
if (RI) {
RI = 0;
d = SBUF;
if (d == '$') re_i = 0;
r_buf[re_i] = d;
re_i++;
if (re_i == 7) {
re_i = 0;
a = (r_buf[1] - '0') * 10 + (r_buf[2] - '0');
b = (r_buf[3] - '0') * 10 + (r_buf[4] - '0');
c = (r_buf[5] - '0') * 10 + (r_buf[6] - '0');
}
}
}
//--------------------------------
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GUEL86
2013-12-07 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2728万
展开全部

仿真实例 供参考,试试。

更多追问追答
追问
打不开。版本问题。我不用全套,只要给我通讯程序就行。
追答
压缩文件会打不开。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wogannidayea
2013-12-06
知道答主
回答量:44
采纳率:0%
帮助的人:10.4万
展开全部
做一个定时查询,多少MS发送一次,或者就发送一个数据串,让后在接收数据的单片机里面进行分解数据。
更多追问追答
追问
请直接给我程序,发送数据为a,b,c.接收数据为a,b,c就行、你光给我文字我也是一头雾水。
追答
我的意思是可以在发送端对数据进行处理,让它成为一个数据串,比如12:34:23可以把它设置成123423这个字符串,然后发送出去,然后在接收端进行处理,我这边没有现成的通讯程序,懒得在网上找了,自己找。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式