当前位置:首页 >> 信息与通信 >>

双机通讯参考资料


关于双单片机串口通讯的问题。 要求如下: 1,如果下位机的 P1.0 口输入低电平,就发出 0x01,上位机在自己的 P1.0 口输出高电平; 2,如果下位机的 P1.1 口输入低电平,就发出 0x03,上位机在自己的 P1.1 口输出高电平; 3,只有下位机两个口都变成高电平,才发送 0x07,上位机在 P1.0 和 P1.1 口都输出低电平。 悬赏分:10 - 解决时间:2010-11-19 09:51 //----------------------------------------------------------最佳答案: 根据要求,绘制 PROTEUS 仿真电路图如下:

图片连接: http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/d9581a5108d990171238c244.html#IMG=d9581a510 图中的上位机,是完成串行接收、并根据收到的数据,输出高低电平。使用的程序如下: //================================================ #include <reg51.h> #define XTAL 11059200 // CPU 晶振频率

#define baudrate 9600 // 通信波特率 #define uchar unsigned char #define uint unsigned int sbit K1 = P1^0; sbit K2 = P1^1; // 定义端口

void init(void) { SCON = 0x50; // 设定串行口工作方式 PCON &= 0x00; // 波特率不倍增 TMOD = 0x20; // 定时器 1 工作于 8 位自动重载模式, 用于产生波特率 TH1 = (unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); TL1 = (unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // T1 赋初值 TR1 = 1; // 启动定时器 1 IE = 0x00; // 禁止任何中断 // EA = 1; // 中断总允许 } //----------------------------------------------------------void main(void) { init(); while(1) { while(RI == 0); RI = 0; if (SBUF == 0x01) K1 = 1; if (SBUF == 0x03) K2 = 1; if (SBUF == 0x07) { K1 = 0; K2 = 0; } } } //================================================ 图中的下位机,要完成输入的检测,并发送不同的串行数据。使用的程序如下: //================================================ #include <reg51.h> #define #define #define #define XTAL 11059200 // CPU 晶振频率 baudrate 9600 // 通信波特率 uchar unsigned char uint unsigned int // 定义端口

sbit K1 = P1^0; sbit K2 = P1^1;

//----------------------------------------------------------void init(void) { SCON = 0x50; // 设定串行口工作方式 PCON &= 0x00; // 波特率不倍增 TMOD = 0x20; // 定时器 1 工作于 8 位自动重载模式, 用于产生波特率 TH1 = (unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); TL1 = (unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // T1 赋初值 TR1 = 1; // 启动定时器 1 IE = 0x00; // 禁止任何中断 // EA = 1; // 中断总允许 } //----------------------------------------------------------void main(void) { bit T_1 = 0, T_2 = 0, T_3 = 0; init(); //-------------------------------------------------while(1) { if ((K1 == 0) && (T_1 == 0)) { T_1 = 1; T_3 = 0; SBUF = 0x01; while(TI == 0); TI = 0; } //------------------------------------if ((K2 == 0) && (T_2 == 0)) { T_2 = 1; T_3 = 0; SBUF = 0x03; while(TI == 0); TI = 0; } //------------------------------------if ((K1 == 1) && (K2 == 1) && (T_3 == 0)) { T_1 = 0; T_2 = 0; T_3 = 1; SBUF = 0x07; while(TI == 0); TI = 0; } } } //================================================

程序运行的画面,已经在插图中显示,符合楼主要求。 原题网址:http://zhidao.baidu.com/question/198788419.html?fr=im100008 提问者对于答案的评价:谢谢 太有帮助了!

双机(51 单片机)串行通信最基本的方法 2010-04-24 19:35 有网友求助双机串行通信的方法,做而论道以前曾经发表过这方面的博文,但是 当时没有配发电路图,不太好理解和仿制。 做而论道过去一直使用硬件的仿真器,在最近,把 PROTEUS 软件逐渐的熟悉起 来了,用这个“纸上谈兵”的东西,也有一定的好处,就是便于和没有硬件条件 的网友进行交流。 下面是一个最基本、最简单的串口通信电路,图中的两个单片机,使用同一个程 序,双机的硬件配置也完全相同。

图片链接: http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/719a2589b2501 aaca5c272ed.html 在程序控制下,本方拨码开关的信息,可以在对方的 LED 上显示。

编制软件时,使用了汇编语言,针对按键和串行通信,都采用了中断方式,这样 就可以取得最快的反应速度。 在实际的硬件实验中,双方都显得十分灵敏。 两个单片机,使用同一个程序,源代码如下: ;---------------------------------------ORG 0000H SJMP START ORG 0003H LJMP INT0_INT ORG 0023H LJMP UART_INT ;---------------------------------------START: MOV SP, #60H MOV SCON,#50H ;方式1,8-n-1 MOV TMOD,#20H MOV TH1, #0FDH ;波特率设置 MOV TL1, #0FDH ; 9600@11.0592MHz SETB TR1 SETB IT0 ;P3.2 下降沿触发中断 SETB EX0 SETB ES ;开放中断 SETB EA SJMP $ ;---------------------------------------INT0_INT: MOV P2, #0FFH MOV A, P2 ;读出的拨码开关信息 ; MOV P0, A ;调试的时候,可在本方显示,以证明中断正常 ; JB TI, $ MOV SBUF,A ;向串口发送 RETI ;---------------------------------------UART_INT: JB TI, _FA_ MOV A, SBUF ;读出串口收到的信息 MOV P0, A ;送到 P0 口进行显示 CLR RI RETI ;-------------------_FA_: CLR TI

RETI ;---------------------------------------END ;---------------------------------------做成了本实验,只是说明电路、软件基本上都可以正常工作。如果真正的用到实 际工作中,传输信息,还需要编制通信协议。 比如说想要传输四个数据字节, 那么在前面, 应该先发送一些字节, 来呼叫对方, 待对方正确回答了, 再向对方传送有效的数据, 最后再向对方传送一些校验信息, 等到收到对方的确认信息之后,一次通信,才算结束。



相关文章:
基于Proteus的89C52双机通信仿真
基于Proteus的89C52双机通信仿真_信息与通信_工程科技_专业资料。基于Proteus的89...2015国考申论押密试卷答案 2015国考面试通关宝典 78份文档 不小心又胖了 ...
《接口技术》课程设计任务书
《接口技术》课程设计任务书 - 《接口技术》课程设计任务书 一、 课程设计参考课题 ●工程设计类参考课题 1、 用 8255 芯片实现双机并行通信 要求:对 8255 进行...
Nginx+keepalive主从双机热备配置
Nginx+keepalive主从双机热备配置_计算机软件及应用_IT/计算机_专业资料。Nginx+...MASTER 与 BACKUP 必须使用相同的密码才能正常通信 } virtual_ipaddress { #...
双机直连网线做法
双机直连方法 3页 免费 四芯水晶头做法及普通网线... 5页 免费 路基土石方工程...于是上网查阅了大量资料, 加上好几台机实验验证,终于发现了事实真相,那就是,...
更多相关标签: