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

双机通讯参考资料


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


相关文章:
双机通讯
单片机双机通讯 5页 免费 双机通讯参考资料 6页 2财富值 串行双机通讯 3页 5财富值 CAN总线双机通讯 5页 2财富值 双机通讯实验 3页 1财富值 双机并行通讯程序...
双机通信技术研究
双机通信技术研究_信息与通信_工程科技_专业资料。错误!未指定书签。 单片机的双机...双工通信,他们的通信原理通信方式 为: 单工通信:是指消息只能单方向传输的...
双机通讯实验报告
双机通讯实验报告_电子/电路_工程科技_专业资料。单片机实验报告 (自动化 15 级...实验目的 1.掌握单片机串行口工作方式; 2.掌握双机通讯的接口电路设计及程序设计...
双机通信及PCB设计
双机通信及PCB设计_电子/电路_工程科技_专业资料。 一、 实验目的掌握串口通信工作原理及程序开发方法,熟悉单片机电路的 PCB 设计过程。 二、 实验原理实验 6 的电...
双机通信
双机通信_信息与通信_工程科技_专业资料。双机通信系统的设计一、课程设计的目的...10 五、参考文献 [1] 李全利.单片机原理与接口技术.高等教育出版社 [2] ...
齐肖方-利用Socket实现双机通讯
齐肖方-利用Socket实现双机通讯_计算机硬件及网络_IT/计算机_专业资料。题目:利用 Socket 实现双机通讯 姓名:齐肖方 学号:361309010204 河南理工大学 计算机科学与技术...
实验六——双机通信及PCB设计
百度文库 专业资料 工程科技 信息与通信上传文档支持以下设备:扫二维码下载 ...中国石油大学(北京)单片机原理及应用,双机通信及PCB设计!中国石油大学(北京)单片机...
实验6 双机通信及PCB设计
实验6 双机通信及PCB设计_电子/电路_工程科技_专业资料。单片机原理及应用——基于Proteus和Keil C(第3版)实验报告 单片机原理及应用实验报告姓名 班级 计算机 18-...
实验报告--双机通信及PCB设计
实验报告--双机通信及PCB设计_信息与通信_工程科技_专业资料。学生实验报告 学 院: 课程名称: 专业班级: 姓学名: 号: 学生实验报告 学生姓名 实验项目 ■必修...
实验6.双机通信及PCB设计
实验6.双机通信及 PCB 设计【实验目的】 掌握串行口通信工作原理,熟悉单片机电路...【实验步骤】 (1) 提前阅读与实验 6 相关的阅读材料; (2) 参考图 A.72~...
更多相关标签: