单片机双机通信实验报告
实验七_双机通信实验
实验七、双机通信实验 一、实验目的掌握单片机串行口的工作原理及编程。
二、实验内容用两台单片机进行双机通讯,主控制器识别到按键按下,控制从机显示0-9字符。
三、实验接线图四、实验程序1、程序流程图如图7-1所示。
主机识别到键按下,向从机发送数据块长度、0-9数据及校验和。
从机接收到数据后,显示数据并向主机发应答码00H ,主机根据应答信号,显示通信状态代码。
2、波特率计算选fosc=11.0592MHz, 波特率=2400bps ,通信为方式1,(SMOD)为1,(TMOD)=0x20;( PCON) =0x80; 由波特率计算公式算得 (TH1)≈e8H 。
图7-1 实验接线图[](TH1)-25612T1T1322osc SMOD⨯=⨯=f 溢出率溢出率,波特率3、源程序 1)主机源程序// 识别到按键按下,发送0-9数据给从机,并显示通信状态码 #include<reg51.h> #include<intrins.h>#define uint unsigned int #define uchar unsigned charsbit K=P3^2; //定义按键K ,用于控制U2void SEND(uchar s_data)//发送一个字节数据 {SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据 {while(RI==0); RI=0; return(SBUF);}void D_1S(void) {uint N=500,i;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar dis)//显示dis 中字形码对应的字符 { P0=dis; D_1S(); P0=~0x00;}void MAIN(void){ uchar data SUM,LEN;// SUM,校验和;LEN ,数据块长度; uchar i,ans; //ans 接收的应答数据图7-2 主机程序流程图 图7-3 从机程序流程图SP=0x5f; P0=~0x00; //数码块消隐TMOD=0x20; //T1:8位自动重装定时器TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1;//F=11.0592MHz,BPS=2400SCON=0x40; //10位,禁止接收//-------扫描按键-------key0:K=1; if(K!=0) goto key0;//-------发送数据块和校验和-------S_0:SUM=0x00; LEN=10; SEND(LEN);for(i=0;i<LEN;i++){SEND(i); SUM+=i; }SEND(SUM);//-------接收从机发来的响应数据-------REN=1; ans=RCV(); REN=0;if(ans==0x00) //发送正常,显示“0”{ DIS(~0x3f); goto key0;}else //发送异常,显示“1”,并重新发送数据{ DIS(~0x06); goto S_0;}}2)从机源程序// 接收数据0-9,并用数码块显示,之后接收正常向主机发00H,否则发送01H#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar data LS0[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};void SEND(uchar s_data)//发送一个字节数据{SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据{while(RI==0); RI=0; return(SBUF);}void D_1S(void){uint i,N=500;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar LEN,uchar r_data[11])//显示0-9{uchar data i;for(i=0;i<LEN;i++) {P0=LS0[r_data[i]]; D_1S(); P0=~0x00;}}void MAIN(void){ uchar data SUM,LEN; //SUM,校验和;LEN,数据块长度;ID,从站地址uchar data i,r_data[10],RSUM;//r_data接收的数据,RSUM接收的校验和SP=0x5f; P0=~0x00; TMOD=0x20;TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1; SCON=0x40;R_D:REN=1;SUM=0x00;LEN=RCV();for(i=0;i<LEN;i++){r_data[i]=RCV(); SUM+=r_data[i];}RSUM=RCV();if(RSUM==SUM){DIS(10,r_data);SEND(0x00);goto R_D;}else {SEND(0x01);goto R_D;}}五、实验步骤1、按图7-1接线;2、用keil软件编辑、编译源程序,生成两个hex文件。
单片机双机通信课程设计报告
目录1.题目设计要求 (4)2.系统的组成及工作原理 (4)2.1系统组成 (4)2.1工作原理 (4)2.3双机通讯的方案选择 (5)3.器件的功能及作用 (6)3.1硬件设计 (6)3.2电气设置 (8)3.3DB-9连接器 (8)4.系统硬件设计 (10)5.软件设计 (11)6.系统仿真调试 (18)7.设计体会和收获 (18)8.參考资料 (19)1.题目设计要求:甲乙两机串口双向通信设计要求:利用51单片机,RS232芯片,LED灯,数码管进行双机通信设计。
甲机可按键控制乙机的LED显示;乙机可按键控制甲机的数码管显示。
完成以下设计环节:1)使用Altium Desinger开发工具,设计电路原理图。
2)使用Uvision2开发平台,采用C语言或汇编语言设计软件程序。
3)使用PROTEUS仿真软件,设计仿真原理图并运行软件程序,完成系统仿真。
2.系统的组成及工作原理2.1系统组成图2.1 总体框图2.2工作原理双机通信系统通过甲乙单片机的串行口来实现数据的收发。
甲单片机通过开关电路来启动发送程序,甲机当开关按下时向乙机发送一个数据,乙机上蜂咛器发出声音提示有数据发送过来,乙机通过接收中断来接收和开关判断是否接收甲机发送过来的数据,并通过编写好的数据代码在8个发光二极管上显示主机发送过来的数据。
乙单片机通过开关电路来启动发送程序,乙机给甲机发送一数据,甲机上蜂咛器发出声音提示有数据发送过来,甲机通过接收中断来接收和开关判断是否接收乙机发送过来的数据,并通过编写好的数据代码在8个发光二极管上显示乙机发送过来的数据。
2.3 双机通讯的方案选择设计方案:该系统采用主从共两片AT89C52单片机来实现上位机对下位机的控制,由于是近距离的双机通信,我们采用单片机直接交叉连接的方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端RXD接收。
需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特率。
双机通信实验报告.doc
双机通信实验报告。
单片机实验报告(自动化15级)实验名称:串行通信实验1.实验1的目的。
掌握单片机串口的工作模式;2.掌握双机通信的接口电路设计和程序设计。
2.实验设备1。
个人电脑;2.单片机最小系统教学实验模块:3.数码管显示模块三、实验内容1。
两套单片机测试装置(两个实验组)共同完成了实验。
我们U1是机器A,U2是机器B。
机器A将学生的学号后的8位数字发送到机器B。
机器B接收到这8位数字,并将其显示在8位数字的电子管上。
该电路如图1所示。
串行通信模式要求为模式1,波特率为2400位/秒,不是双倍,单片机外部晶振频率为11.0592米。
图1双机通信原理附加要求示意图:机器b收到后,该机器(机器b)的学生编号的最后8位数字被送回机器a,并显示在数码管上。
2.单片机与PC机之间的通信单片机向PC机发送数据。
单片机将本机的学生号(学生本人)反复发送到PC机,发送波特率为1200,采用模式1,单片机外部晶振频率为11.0592米四、实验原理4.1串行通信模式在串行通信中,有两种基本通信模式:异步通信。
异步串行通信规定了字符数据的传输格式,即每个数据以相同的帧格式传输。
每个帧信息由起始位、数据位、奇偶校验位和停止位组成。
本实验主要研究异步通信的实现方法。
在异步通信中,每个字符使用一个起始位和一个停止位作为字符开始和结束的符号,因此占用时间。
因此,为了提高传输数据块时的通信速度,这些标记通常被去除,并采用同步通信。
同步通信不像异步通信那样依赖起始位在每个字符数据的开头发送和接收同步。
相反,同步字符用于在每个数据块传输开始时同步发送方和接收方。
根据通信方式,数据传输线可分为三种类型:单工模式、半双工模式、全双工模式。
(1)单工模式在单工模式中,通信线路的一端连接到发射机,另一端连接到接收机,这形成单向连接,并且仅允许数据在固定方向上传输。
(2)半双工模式在半双工模式下,系统中的每个通信设备由一个发射机和一个接收机组成,它们通过收发器开关连接到通信线路,如图33所示-1.实验1的目的。
双机通讯实验报告
单片机实验报告(自动化15级)实验名称:串行通讯实验一、实验目得1。
掌握单片机串行口工作方式;2。
掌握双机通讯得接口电路设计及程序设计。
二、实验设备1、PC机;2.单片机最小系统教学实验模块;3、数码管显示模块三、实验内容1.双机通信由两套单片机试验装置(两个实验小组)共同完成该实验。
我们U1为甲机,U2为乙机。
甲机发送本机(学生本人)学号后8位给乙机,乙机接收该8位数据,并显示在8位数码管上.电路如图1所示。
要求串行通信方式为方式1,波特率为2400bit/s,不加倍,单片机外部晶振频率为11、0592M。
图1 双机通信原理示意图附加要求:乙机接收完毕后,将本机(乙机)得学号后8位发送回甲机,甲机显示在数码管上。
2、单片机与PC机通信单片机向PC机发送数据。
单片机向PC机重复发送本机(学生本人)学号,发送波特率为1200,采用方式1,单片机外部晶振频率为11、0592M。
四、实验原理4.1串行通讯得方式在串行通讯中,有两种基本得通讯方式:异步通讯,同步通讯.异步串行通讯规定了字符数据得传送格式,既每个数据以相同得帧格式发送.每个帧信息由起始位、数据位、奇偶校验位与停止位组成。
本实验主要学习异步通讯得实现方法。
在异步通讯中,每一个字符要用起始位与停止位作为字符开始与结束得标志,以至占用了时间。
所以在数据块传送时,为了提高通讯速度,常去掉这些标志,而采用同步通讯.同步通讯不像异步通讯那样,靠起始位在每个字符数据开始时发送与接受同步.而就是通过同步字符在每个数据块传送开始时使收/发双方同步.按照通讯方式,又可将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
(1)单工方式在单工方式下,通讯线得一端联接发送器,另一端联接接收器,它们形成单向联接,只允许数据按照一个固定得方向传送。
(2)半双工方式在半双工方式下,系统中得每个通讯设备都由一个发送器与一个接收器组成,通过收发开关接到通讯线路上,如图33—1所示。
双机串行通讯设计实验报告
系别
计算机系
班级
B140502
学号
B14050226
姓名
韩亚辉
课程名称
单片机原理及组成
实验日期
2016/5/28
实验名称
双机串行通讯设计
成绩
实验目的:1.用全双共数据传送法实现两机互相通信。
2.完成双机通信的设计制作及仿真。
实验条件:计算机,Keil uVision4,ISIS 7 Professional,实验箱
(1)数据缓冲器(SBUF)
(2)串行控制寄存器(PCON)
(3)输入移位寄存器
(4)波特率发生器
(5)电源控制寄存器PCON
(6)波特率计算
三.实验电路图:
四.实验程序代码:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define duan P1
#define dis P2
void main()
{
uchar key_in=0xff; //I/O口作输入时,检测外设状态,允许输出高电平
TMOD=0x20;//设置为定时器1方式2
TH1=0xfd;//装初值,波特率设为9600
TL1=0Xfd;
EA=1;//开总中断
一.实验要求:
1)能本机显示按键的数值。
2)能向对方机发送按键的数。
3)能接收对方机发送的数并显示。
4)发送数及按键用中断实现。
5)用串行口的全双工方式通信。
二、实验原理:
(1)单片机串行接口通信功能
计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。
双机通信实验实验报告
实验七双机通信实验一、实验目的:1.掌握单片机串口通信程序的设计。
2.了接RS232接口通信的特点。
3.双机通信:分别把接收到的对方通过逻辑开关输入的信息在本地数码管上显示,如下图甲机的逻辑开关数据为81H,乙机通过串口接收该数据并数码关管显示,而甲机显示乙机发送的数据88H。
二、PROTEUS电路设计:三、实验仪器和设备PC机、PROTEUS软件或W-A-51综合开发学习板四、源程序设计:1.程序(甲、乙机用相同的程序)ORG 0000HAJMP MAINORG 0030HMAIN:MOV TMOD,#20H ;定时器工作方式2MOV TH1,#0FDH ;设置波特率MOV TL1,#0FDHMOV PCON,#00H ;波特率不乘2SETB TR1MOV SCON,#50H ;串行口工作方式1并启动接收JX:MOV A,P1MOV SBUF,AW1:JNB TI,W1CLR TIW2:JNB RI,W2CLR RIMOV A,SBUFMOV P0,ALJMP JXEND六、总结、心得这是的实验中我遇到了很多的难题,也发现了自己很多的不足。
刚开始的时候在循环比较的时候老是出错,对变量的寻址方式不熟悉,不会使用指针变量使程序简化。
后来经过老师的提醒跟自己的摸索,终于把程序写正确了。
所以是这么简单的一个程序,但是我还是要花很长的一断时间才可以把它完成,这说明了我对知识的掌握运用还是很不熟练,虽然读程序的时候可以读懂,但是到自己写的时候就感觉无从下手。
单片机双机通信实验报告
单片机双机通信实验报告
实验目的:
1. 了解单片机之间的串口通信原理;
2. 掌握单片机之间的双机通信方法;
3. 实现单片机之间的数据互相传输。
实验器材:
1. 单片机开发板(两块);
2. USB转串口模块(两个);
3. 杜邦线若干;
4. 电脑。
实验步骤:
首先,将单片机开发板和USB转串口模块进行连接,具体的连接方法如下:
1. 将USB转串口模块的TXD引脚连接到单片机开发板的RXD引脚上;
2. 将USB转串口模块的RXD引脚连接到单片机开发板的TXD引脚上;
3. 将USB转串口模块的GND引脚连接到单片机开发板的GND引脚上;
4. 将USB转串口模块的VCC引脚连接到单片机开发板的VCC引脚上。
接下来的步骤如下:
1. 打开两台电脑上的串口调试助手软件,并分别将波特率设置为相同的数值(例如9600);
2. 在一台电脑上,发送数据给另一台电脑。
具体的操作是在串口调试助手软件上输入要发送的数据,然后点击发送按钮;
3. 在另一台电脑上,接收来自第一台电脑发送的数据。
具体的操作是在串口调试助手软件上点击接收按钮,然后可以看到接收到的数据。
实验结果:
通过实验可以看到,单片机之间成功地实现了数据的双向传输。
一台单片机发送的数据可以被另一台单片机接收到。
实验总结:
本实验通过串口通信的方式实现了单片机之间的双机通信。
通过这种方式,可以方便地实现单片机之间的数据互相传输,可以用于各种应用场景,如传感器与控制器之间的数据传输等。
同时要注意,串口通信的波特率要设置一致,否则数据将无法正确接收。
基于单片机的双机通信实训报告
一.设计方案根据题目分析可知硬件电分为主机模块和从机模块。
主机模块中包含单片机子模块、lcd1602显示子模块和矩阵键盘模块,从机模块则包括单片机子模块、LED显示模块。
在主模块中由AT89C51单片机担任主机,LCD1602担任显示设备和由4位独立按键做矩阵键盘。
在整个系统中有一个从机模块,有一片AT89C51单片机担任从机模块的控制模块,串口采用单工及异步通信方式。
整个硬件结构原下图所示。
主机从机二.硬件分析(1)控制模块控制模块采用AT89C51作为主控芯片,11.0592MHZ的晶振频率作为时钟震荡电路。
基本电路图如下所示。
仿真图由于在protues里面,单片机内部默认自带晶振,所以不需要再连接振荡电路。
控制模块原理图(2)显示模块采用LCD1602作为显示模块,LCD1602用来显示当前从机LED的状态。
仿真图如下所示:仿真图在画原理图时,由于没有LCD1602的封装。
所以,本人直接用16跟引脚的排针代替。
然后在给相应的引脚表上网络位口。
但是再画PCB,必须控制好原件之间的距离,以免导致制版时,元件位置冲突。
原理图如下所示:原理图(3)矩阵键盘模块矩阵键盘用来给单片机输入一个电平值,然后再通过主机CPU发送给从机,最后从机CPU接收,并通过LED显示出结果。
当按键按下,相当于给主机CPU 送入一个低电平,主机再把这个电平值发送给从机。
因为LED是采用共阳连接的方式,所以可以点亮LED。
矩阵键盘仿真图,以及原理图如下所示:仿真图原理图(4)LED显示模块LED显示模块,主要用来显示主机送给从机的电平值是高电平还是低电平,同时也可以用来检测,整个通信系统是否能够正常工作。
为了整个电路简化,以及效果更明显,所以决定采用共阳连接的方式。
LED显示模块的仿真图,以及原理图如下所示:仿真图原理图三.软件分析根据题目分析可知硬件电分为主机模块和从机模块。
AT89C51单片机担任主机模块和从机模块的控制模块,串口采用单工及异步通信方式。
单片机双机串行实验报告
单片机双机串行实验报告实验目的:通过单片机实现双机串行通信功能,掌握串行通信的原理、方法和程序设计技巧。
实验原理:双机串行通信是指通过串行口将两台单片机连接起来,实现数据的传输和互动。
常用的串行通信方式有同步串行通信和异步串行通信。
异步串行通信是指通过发送和接收数据时的起始位、停止位和校验位进行数据的传输。
而同步串行通信是指通过外部时钟信号进行数据的同步传输。
实验器材:1.两台单片机开发板(MCU7516)2.两个串口线3.两台计算机实验步骤:1.将两台单片机开发板连接起来,通过串口线连接它们的串行口。
2.在两台计算机上分别打开串口调试助手软件,将波特率设置为相同的数值(例如9600)。
3.在编程软件中,编写两个程序分别用于发送数据和接收数据。
4.在发送数据的程序中,首先要设置串口的波特率、数据位、停止位和校验位,并将数据存储在缓冲区中。
然后利用串口发送数据的指令将数据发送出去。
5.在接收数据的程序中,同样要设置串口的参数。
然后使用串口接收数据的指令将接收到的数据存储在缓冲区中,并将其打印出来。
实验结果与分析:经过实验,我们成功地实现了单片机之间的双机串行通信。
发送数据的单片机将数据发送出去后,接收数据的单片机能够正确地接收到数据,并将其打印出来。
实验中需要注意的是,串口的波特率、数据位、停止位和校验位必须设置为相同的数值。
否则,发送数据的单片机和接收数据的单片机无法正常进行通信。
同时,在实验之前,需要了解单片机开发板支持的串口通信相关的指令和函数。
实验总结:通过本次实验,我们深入了解了单片机之间的双机串行通信原理和方法。
掌握了串口的设置和使用方法,以及相关的指令和函数。
在实验中,我们学会了如何通过串行口实现数据的传输和互动,为今后的单片机应用和开发打下了基础。
同时,我们还发现,双机串行通信在实际应用中有着广泛的用途。
例如,可以通过串行通信实现两台计算机之间的数据传输,或者实现单片机与计算机之间的数据收发。
单片机双机之间的串行通讯设计报告
单片机双机之间的串行通讯设计报告摘要:本文介绍了一种基于单片机的双机之间的串行通讯设计。
该设计使用两个单片机,通过串行通信协议进行数据传输。
通讯过程中,两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
同时,本文还介绍了串行口工作方式 0 的应用,以及如何使用移位寄存器进行串行口扩展。
通过该设计,可以实现两台单片机之间的高速数据传输,并且具有良好的稳定性和可靠性。
关键词:单片机,串行通讯,中断方式,移位寄存器,串行口扩展一、引言串行通讯是计算机系统中常用的一种数据传输方式,它可以实现不同设备之间的数据传输。
在单片机应用中,串行通讯也是一种常见的数据传输方式。
本文介绍了一种基于单片机的双机之间的串行通讯设计,该设计使用两个单片机通过串行通信协议进行数据传输。
本文还介绍了串行口工作方式 0 的应用,以及如何使用移位寄存器进行串行口扩展。
通过该设计,可以实现两台单片机之间的高速数据传输,并且具有良好的稳定性和可靠性。
二、设计原理该串行通讯设计使用两个单片机,分别为发送单片机和接收单片机。
发送单片机将数据通过串行口发送到接收单片机,接收单片机再将接收到的数据进行处理。
两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
在串行通讯中,数据是通过串行口进行传输的。
串行口工作方式0 是一种常见的串行口工作方式,它使用移位寄存器进行数据接收和发送。
在移位寄存器中,数据被移位到寄存器中进行传输,从而实现了数据的串行传输。
三、设计实现1. 硬件设计在该设计中,发送单片机和接收单片机分别使用一个串行口进行数据传输。
发送单片机将数据通过串行口发送到接收单片机,接收单片机再将接收到的数据进行处理。
两台单片机之间通过数据线连接,并使用中断方式进行数据接收和发送。
硬件设计主要包括两个单片机、串行口、数据线和中断控制器。
其中,两个单片机分别拥有自己的串行口,并且都能够接收和发送数据。
数据线将两台单片机连接在一起,中断控制器用于处理数据的接收和发送。
STC89C52双机通信实验
单片机课程实验报告实验名称:双机通信实验实验学时专业电子信息技术与仪器班级姓名学号指导教师日期实验成绩一、实验目的UART 串行通信接口技术应用二、实验原理图三、实验程序/*妨碍本次实验成果的最大障碍是键盘扫描部分,由于未使用P×口直接赋值形式,而是用H1=0 H2=0的形式为及时关闭H1;导致键盘扫描只能扫描K、K2、K3,解决办法:在条件允许的情况下避免使用H1、H2的检测方式或者以后使用时直接复制,而非自己敲写*/#include <reg52.h>/**/#define uint unsigned int#define uchar unsigned char/*f0为单片机晶振*/#define N 46080 /*N=50000*f0/12,定时50ms*/#define M 20 /* 定时M*0.05s */sbit W1=P0^0;sbit H1=P3^6;sbit H2=P3^7;sbit LED=P2^0;uchar key=0;uchar rxd;uchar code duanxuan[]={0x3f,/*显示0*/0x06,/*显示1*/0x5b,/*显示2*/0x4f,/*显示3*/0x66,/*显示4*/0x6d,/*显示5*/0x7d,/*显示6*/};sfr P1M1=0x91;//和后面的main函数中的sfr P1M0=0x92;//P1M1 P1M0合在一起增加亮度void delay_ms(uint x) //*延时子函数程序{uint i,j;for(i=x;i>0;i--)for(j=250;j>0;j--); //*该层循环延时约1ms*/}/************数码管显示函数ok******************/void displays(uchar key_num2){W1=0;P1=duanxuan[key_num2];}/****************************************************/void send(uchar key_num1){SBUF=key_num1; //sbuf接收串口中的数据,串口发送数据while(!TI);//串口中的数据发送完毕后TI自动由0变为1TI=0; //置零,打开发送中断允许,为下一次发送做准备}/************矩阵键盘扫描,同时可进行数码管各位的+-***********/ void keyscan()//如何确定时间设定时数码管显示的数字是否会自动+1 { /*当两行H1、H2重新赋值时存在冲突,解决办法为:H1=1时H2=0,H2=1时H1=0*/ uchar temp;/***扫描第一行**/H1=0;H2=1;//扫描第一行temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态/***判断哪个键摁下***/if(temp!=0xff)//判断是否有键摁下{delay_ms(10);//延时H1=0;H2=1;//扫描第一行//重新读取temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态if(temp!=0xff)//消抖{switch(temp)//判断哪个键摁下{case 0x7f:key=3;break;case 0xbf:key=2;break;case 0xdf:key=1;break;} //键1 2 3 分别摁下while(temp!=0xff)//按键释放才会跳出循环{H1=0;H2=1;//扫描第一行//重新读取temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态}}} /***扫描第二行**/H2=0;H1=1;//扫描第二行temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态/***判断哪个键摁下***/if(temp!=0xff)//判断是否有键摁下{delay_ms(10);//延时H2=0;H1=1;//扫描第二行//重新读取temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态if(temp!=0xff)//消抖{switch(temp)//判断哪个键摁下{case 0x7f:key=6;break;case 0xbf:key=5;break;case 0xdf:key=4;break;} //键4 5 6 分别摁下while(temp!=0xff)//按键释放才会跳出循环{H2=0;H1=1;//扫描第二行//重新读取temp=P0;temp=temp|0x1f;//读取L1、L2、L3的状态}}}send(key);}/****************************************************/void main(){P1M1=0X00;P1M0=0XFF;EA=1;/*对寄存器进行操作,产生的9600bps,故不打开ET1*/ TMOD=0X20;TH1=0xfd;TL1=0xfd;TR1=1;/*SCON控制寄存器设置*/ES=1;SM0=0; //工作方式SM1=1; //SM0 SM1 10步异位收发器REN=1; //串行接收数据允许位while(1) /*等中断满足的条件*/{keyscan();}}/*在中断1中的while(!TI)中起作用*/ //识别码看时序图void S_serial()interrupt 4 //串口接收数据{ES=0;RI=0;rxd=SBUF;//串口接收一个字节的数据displays(rxd);//ES=1;} 四、调试过程与结果分析1、暂称双机分别为甲乙,甲单片机无按键摁下时,数码管显示0;有按键摁下,将按键编号发送到乙单片机,并由乙显示,但甲单片机数码管不显示按下的数值。
双机通信实验报告
一、实验目的1. 掌握双机通信的基本原理和实现方法。
2. 熟悉串行通信的硬件接口和软件编程。
3. 通过实验,加深对单片机串行通信的理解和应用。
二、实验原理双机通信是指两台计算机或单片机之间的数据交换。
串行通信是双机通信中常用的一种通信方式,它将数据一位一位地按顺序传送,适合于远距离通信。
本实验采用单片机串行通信,通过串行口实现数据传输。
三、实验设备1. 两套单片机实验装置(如AT89S51单片机最小系统)2. 串行通信线(如RS-232线)3. 串口调试工具(如串口助手)4. 连接线和电源四、实验内容1. 硬件连接将两套单片机实验装置通过串行通信线连接起来,确保连接线正确无误。
2. 软件编程(1)单片机编程编写单片机程序,实现数据的发送和接收。
程序主要包括以下部分:- 初始化串行口:设置波特率、数据位、停止位和校验位等。
- 发送数据:将数据写入发送缓冲区,启动发送。
- 接收数据:检测接收缓冲区是否有数据,读取数据。
(2)PC端编程编写PC端程序,实现数据的发送和接收。
程序主要包括以下部分:- 串口配置:设置串口号、波特率、数据位、停止位和校验位等。
- 发送数据:将数据写入串口缓冲区,启动发送。
- 接收数据:从串口缓冲区读取数据,显示或处理。
3. 调试与测试(1)单片机端调试- 使用串口调试工具,发送数据到单片机。
- 检查单片机接收到的数据是否正确。
(2)PC端调试- 使用串口调试工具,发送数据到PC。
- 检查PC接收到的数据是否正确。
五、实验结果与分析1. 硬件连接硬件连接正确,两套单片机实验装置通过串行通信线连接。
2. 软件编程(1)单片机程序```c// 单片机程序示例(AT89S51)#include <reg51.h>#define BAUDRATE 9600sbit TXD = P3^1; // 发送引脚sbit RXD = P3^0; // 接收引脚void Serial_Init() {TMOD = 0x20; // 定时器1工作在模式2TH1 = 0xFD; // 设置波特率TL1 = 0xFD;TR1 = 1; // 启动定时器1SCON = 0x50; // 设置串行口工作在模式1 }void main() {Serial_Init();while (1) {// 发送数据TXD = 1; // 发送起始位while (!TXD); // 等待发送完成// 发送数据字节for (char i = 0; i < 8; i++) {TXD = 1; // 发送数据位while (!TXD);TXD = 0; // 发送停止位while (!TXD);}// 接收数据RXD = 1; // 接收起始位while (!RXD); // 等待接收完成// 接收数据字节for (char i = 0; i < 8; i++) {RXD = 1; // 接收数据位while (!RXD);RXD = 0; // 接收停止位while (!RXD);}}}```(2)PC端程序```c// PC端程序示例(C#)using System;using System.IO.Ports;class Program {static void Main() {SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);serialPort.Open();while (true) {// 发送数据serialPort.WriteLine("Hello, world!");// 接收数据string receivedData = serialPort.ReadLine();Console.WriteLine("Received: " + receivedData);}serialPort.Close();}}```3. 调试与测试通过串口调试工具,发送数据到单片机和PC,检查接收到的数据是否正确。
单片机双机之间的串行通信设计
单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理1.串行通信:串行通信是将数据一个个位发送或接收的方式。
数据通过一个线路逐位发送或接收,可以减少通信所需的线路数目。
2. UART串口通信:UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的简称,是一种最常用的串口通信方式,通常用于单片机与计算机、单片机与单片机之间的通信。
3.串口模块:串口模块是负责将数据转变为串行传输的硬件模块,包括发送端和接收端。
通过设置波特率、数据位、校验位和停止位等参数,可以实现数据的可靠传输。
4.单片机串口通信:单片机内部集成了UART串口通信接口,只需要通过相应的寄存器配置,可以实现串口通信功能。
5.双机串行通信:双机串行通信是通过串口将两台单片机进行连接,一台单片机作为发送端,负责将数据发送出去;另一台单片机作为接收端,负责接收并处理发送的数据。
三、实验器材与软件1.实验器材:两台单片机、USB转TTL模块、杜邦线若干。
2. 实验软件:Keil C51集成开发环境。
四、实验内容与步骤1.配置发送端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的TXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写发送端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口发送中断。
(4)循环发送指定的数据。
2.配置接收端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的RXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写接收端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
51单片机 双机通信
实验三双机通信实验一、实验目的a)UART 串行通信接口技术应用二、实验实现的功能a)甲机向乙机发送按键的键值,同时将乙机发送的键值在数码管上显示并且LED相应的闪烁b)乙机接收甲机发送的键值并在数码管上显示,同时也能向甲机发送键值三、系统硬件设计甲机和乙机的连接一样,将甲机的RXD和乙机的TXD连接,甲机的TXD和乙机的RXD连接,再将两个单片机的GND连接四、系统软件设计甲机发送程序:#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 50ucharcodevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0 X5E,0X79,0X71};//0--F的共阴极字段码表uchar codetab[]={0XFD,0X3F,0XFA,0X3F,0XF7,0X1F,0XEF,0X2F,0XDF,0X37,0XBF,0X3B,0X7F,0X3F}; //花型显示uchar ptr=0;sbit P36=P3^6;sbit P37=P3^7;void delay(uint x) //延时函数{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{P0=0XF7;P1=codevalue[n];delay(N/2);}uchar scan_key()//按键扫描{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}P36=1;P37=0;}}void shun() //顺时针转{int a,b,i;a=0x01;b=0x04;for(i=0;i<8;i++){P2=~a;a<<=1;delay(5N);}P2=0XFF;for(i=0;i<4;i++){P3&=(~b);b<<=1;delay(5N);}P3=0X3f;}void ni() //逆时针转{int a,b,i;a=0x80;b=0x20;for(i=0;i<4;i++){P3&=(~b);b>>=1;delay(5N);}P3=0X3F;for(i=0;i<8;i++){P2=~a;a>>=1;delay(5N);}P2=0XFF;}void shan() //绿黄红依次点亮{P2=0XB6;P3=0X37;delay(10N);P2=0X6D;P3=0X2F;delay(10N);P2=0XDB;P3=0X1B;delay(10N);P2=0XFF;P3=0X3F;delay(10N);}void hua(){int t;for(t=0;t<7;t++){P2=tab[t*2];P3=tab[t*2+1];delay(20N);}}void sent()//串口发送{SBUF=ptr;while(!TI);TI=0;}void receive() //串口接收并在led上显示{while(!RI);RI=0;switch(SBUF){case 1: display(SBUF);shun();break;case 2: display(SBUF);ni();break;case 3: display(SBUF);shan();break;case 4: display(SBUF);hua();break;case 5: display(SBUF);P2=0x00;P3=0x03;break;case 6: display(SBUF);P2=0xff;P3=0xff;break;}}void main(void){P1M0=0XFF;P1M1=0X00;TMOD=0X20; //T1工作模式2TH1=0XF4; //波特率2400TL1=0XF4;SCON=0XD0; //串口模式3,允许接收PCON=0X00; //波特率不倍增TR1=1;while(1){scan_key();sent();receive();}}乙机接收程序:#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 10uchar codevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71};//0--F的共阴极字段码表uchar Num_Buffer[]={0,0,0,0};//缓冲区初始化uchar keyvalue=0,ptr=0;void delay(uint x) //延时函数{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{Num_Buffer[3]=n/1000;Num_Buffer[2]=n/100%10;Num_Buffer[1]=n/10%10;Num_Buffer[0]=n%10;P0=0XFE;P1=codevalue[Num_Buffer[3]];delay(N/2);P0=0XFD;P1=codevalue[Num_Buffer[2]];delay(N/2);P0=0XFB;P1=codevalue[Num_Buffer[1]];delay(N/2);P0=0XF7;P1=codevalue[Num_Buffer[0]];delay(N/2);}uchar scan_key() //按键扫描函数{uchar a=0x40,i,m;for(i=0;i<2;i++){P3=~a;delay(N);m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}a=a<<1;}}void sent()//串口发送{SBUF=ptr;while(!TI);TI=0;}void receive()//串口接收{while(!RI){display(keyvalue);}RI=0;keyvalue=SBUF;}void main(void){P1M0=0XFF;P1M1=0X00;TMOD=0X20; //T1工作模式2TH1=0XF4; //波特率2400TL1=0XF4;SCON=0XD0; //串口模式3,允许接收PCON=0X00; //波特率不倍增TR1=1;while(1){scan_key(); //获取键值sent();receive();}}五、实验过程中遇到的问题及解决方法问题1:和实验一一样,按键扫描时对P3口赋值会影响LED的显示解决:将按键扫描程序改为uchar scan_key()//按键扫描{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){m=P0;switch(m&0xe0){case 0xc0: ptr=i*3+1;return ptr;break;case 0xa0: ptr=i*3+2;return ptr;break;case 0x60: ptr=i*3+3;return ptr;break;}P36=1;P37=0;}}问题2:甲机在接收到5后12个LED全亮,然后无论乙机发送什么,甲机都是12个LED 全亮,不会改变状态解决:反复调试检查发现P3口的最低两位为发送与接收端口,在最开始的程序中接收5的程序为case 5: display(SBUF);P2=0x00;P3=0x00;break;,此时P3的最低两位清零,使发送和接收位都无效,所以在以后无论乙机发送什么甲机都无法接收,将其改为case 5:display(SBUF);P2=0x00;P3=0x03;break;后正常问题3:怎样让乙机在开始的时候显示0,解决:开始时写的程序为void receive()//串口接收{while(!RI) ;RI=0;keyvalue=SBUF;display(keyvalue);}这时运行后上电后数码管不显示,分析得出开始时SBUF为空,所以不显示,应当把显示函数放在while后面显示即程序改为void receive()//串口接收{while(!RI){display(keyvalue);}RI=0;keyvalue=SBUF;}指导老师签字:日期:。
单片机双机通信实验报告
单片机双机通信实验报告《单片机双机通信实验报告》摘要:本实验通过使用两台单片机,利用串口通信实现双机之间的信息传输。
在实验过程中,先分别对两台单片机进行初始化设置,并分别确定了波特率和通信协议。
随后,通过串口线连接两台单片机,并编写发送和接收程序,实现了双机之间的信息传输。
实验结果表明,双机通信实验成功,信息传输准确可靠。
关键词:单片机、双机通信、串口通信、波特率、信息传输1.引言:单片机是一种集成电路,内包含了处理器、存储器和各种外设,广泛应用于嵌入式系统中。
双机通信是指两个单片机之间通过一定的通信方式实现信息的传递和交换。
利用双机通信,可以实现多个单片机之间的协同工作,提高系统的性能和可靠性。
本实验旨在通过串口通信方式,实现双机之间的信息传输。
2.实验原理:串口通信是一种常用的通信方式,将信息按照一定的协议格式转换成串行的数据,通过串口线传输。
串口通信需要设置波特率和通信协议。
波特率是指每秒钟传输的位数,通信协议是指发送和接收的数据格式和规则。
本实验使用两台单片机,每台单片机通过串口线连接。
其中一台单片机作为发送机,另一台单片机作为接收机。
发送机将要传输的信息按照通信协议和波特率发送出去,接收机按照相同的通信协议和波特率接收信息。
接收机接收到信息后,进行处理。
3.实验步骤:(1)初始化设置:分别对发送机和接收机进行初始化设置,包括引脚的设置和串口通信设置。
设置引脚为串口通信模式,并确定波特率和通信协议。
(2)连接单片机:将两台单片机通过串口线连接,发送机的发送引脚连接到接收机的接收引脚,接收机的接收引脚连接到发送机的发送引脚。
(3)编写发送程序:在发送机上编写发送程序,将要发送的信息按照通信协议和波特率发送出去。
(4)编写接收程序:在接收机上编写接收程序,按照相同的通信协议和波特率接收信息,并进行处理。
(5)测试实验:将发送机和接收机分别接入电源,观察实验现象。
4.实验结果:通过实验测试,发送机成功将信息发送给接收机,并在接收机上进行了处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机与信息工程学院综合性实验报告
专业:物联网年级/班级: 2015—2016学年第一学期
课程名称单片机原理及应用指导教师
学号姓名
实验地点实验时间2015.11.14
项目名称单片机双机通信实验类型综合性
一、实验目的
1.学习双机通信的基本使用方法。
2.学习双机通信程序的编程方法。
二、实验仪器或设备
CPU挂箱、AT89S51CPU模块
三、总体设计(设计原理、设计方案及流程等)
1.设计原理:
串行口工作方式1为波特率可变的8位UART方式。
主要用于单片机系统之间或单片机与PC之间的数据通信。
方式1通信时,一帧数据由10位组成:1个起始位、8个数据位和1个停止位。
这种方式常通过发送数据块的累加和实现数据校验。
2.设计方案:
设有甲、乙两个AT89S51单片机应用系统,现需要将甲单片机外RAM 4000H~43FFH 单元的内容传送到乙单片机,并将数据存放到乙单片机从8000H开始的单元,电路图如下图所示。
如传送正确,图中发光二极管灭,否则发光二极管亮。
3.流程:
使用查询方式进行通信,通信过程分为两步:第一步为握手,第二步为传输数据。
如果甲单片机收到乙单片机的应答为“A”,则重复上述发送过程,直到数据发送完成,并且置p1.3为1;否则,置P1.2为1,图中发光二极管亮,并退出。
四、实验步骤(包括主要步骤、代码分析等)
五、结果分析与总结结果图:
①结果分析
程序作用为甲乙两台机器进行连接通讯,如果通讯成功则亮灯提示(Led1),在通讯成功以后开始发送数据,如果发送成功则乙机器会发送一个确认信息,在比对确认乙收到的是正确信息以后亮灯提示(Led3)。
②总结
本次实验为双机通信实验,在本次实验中,我们使用给定的代码进行操作,但是在实验中却发现很多问题。
比如在设备连接好以后发现无法传输数据,我们发现错误发生在给定的代码上,两台计算机所使用的频率不同,导致无法传输数据。
在程序没有编写错误的时候,我们不会去找程序的错误,而是反复的查看和检测连接方面的问题,这反映了我们对错误应变能力太差,一味的去相信书中的程序,有时候正确的程序在不合适的设备上使用就会出现错误。
这次实验增强了我们的探索能力,不一味的依赖答案,而是自己寻求解决思路,在以后的学习中起到了特别大的帮助。
特别是在修改程序的时候,需要我们认真了解程序才可以进行修改,只有我们了解每一句代码的含义,我们才能正确的把程序改成自己需要的功能。
在本次的修改中,我们添加了传输完数据以后用Led灯来提示的功能。
我们发现,在程序中发送数据以后会有一个回复信息来确认是否发送成功和信息校对,我们利用此语句来判断,如果判定成功那么语句就
不跳转到ERR,那么我们就在语句中添加一条让Led3灯亮的操作。
本次实验教会了我们很多内容,特别是在遇到问题时如何去处理,如何正确的找到问题所在,这才是实验课的核心意义。
在理论课时,我们只能学习基础知识,但是永远不会知道会出现什么错误。
在实验课上,我们可以实验代码,修改代码,这样才能让我们得以全面地发展。
教师签名:
2015年11月14日。