双机通讯实验报告
时间:2021-10-01 来源:博通范文网 本文已影响 人
单片机实验报告 化 (自动化 1 5级)
实验名称:串行通讯实验
一、实验目得
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 4.1
串行通讯得方式
在串行通讯中,有两种基本得通讯方式:异步通讯,同步通讯.
异步串行通讯规定了字符数据得传送格式,既每个数据以相同得帧格式发送.每个帧信息由起始位、数据位、奇偶校验位与停止位组成。本实验主要学习异步通讯得实现方法。
在异步通讯中,每一个字符要用起始位与停止位作为字符开始与结束得标志,以至占用了时间。所以在数据块传送时,为了提高通讯速度,常去掉这些标志,而采用同步通讯.同步
通讯不像异步通讯那样,靠起始位在每个字符数据开始时发送与接受同步.而就是通过同步字符在每个数据块传送开始时使收/发双方同步.
按照通讯方式,又可将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
(1)单工方式 在单工方式下,通讯线得一端联接发送器,另一端联接接收器,它们形成单向联接,只允许数据按照一个固定得方向传送。
(2)半双工方式 在半双工方式下,系统中得每个通讯设备都由一个发送器与一个接收器组成,通过收发开关接到通讯线路上,如图33—1所示。在这种方式中,数据能从A站送到B站,也能从B站传送到A站,但就是不能同时在二个方向上传送,即每次只能一个站发送,另一个站接收.
图2 半双工通讯方式 图33-1中得收发开关并不就是实际得物理开关,而就是由软件控制得电子开关,由通讯线两端得半双工通讯协议进行功能切换。
(3)全双工(Full—duplex)方式 虽然半双工方式比单工方式灵活,但它得效率依然较低.从发送方式切换到接收方式所需得时间一般大约为数毫秒,这么长得时间延迟在对时间较敏感得交互式应用(例如远程检测监视控制系统)中就是无法容忍得.重复线路切换所引起得延迟积累,正就是半双工通信协议效率不高得主要原因。
半双工得这种缺点就是可以避免得,而且方法很简单,即采用信道划分技术。在图33—2得全双工连接中,不就是交替发送与接收,而就是可同时发送与接收。全双工通讯系统得每一端都包含发送器与接收器,数据可同时在两个方向上传送.
图3 全双工通讯方式 4.2 单片机串行口工作方式 在静态数码管显示实验中,我们熟悉了单片机串口工作方式0;单片机串口还具有有3种工作方式。如下表所示:
这3种工作方式,均用于串行异步通讯。在异步串行通讯得一个字节得传送中,必须包括了起始位(0)与停止位(1)。除此之外,方式1具有8位(1个字节)得数据位(低位在先),方式2、3则除这8位之外,还具有一个可编程得第9位,这个第9位编程通常被编程为奇偶校验位.我们将在下一个实验中用到它。
串口工作方式在特殊寄存器SCON中设置。
其中得SM0与SM1位确定了串口工作方式。要使通讯双方能够通讯成功,必须具有相同得串口工作模式;REN为允许接收位,本实验中因为双方都要进行接收,因此REN也都应设为1。TB8与RB8这里暂不涉及。利用以下语句来设置SCON: MOV SCON, #50H 4。
。3 波特率得设置 在异步串口通讯中,一个很重要得工作就就是进行串口波特率得设置。波特率就是指串口通讯中每秒传送得位数,单位为BPS,它反映了串行口通讯得速度;同时,通讯双方得速度必须一致,才能够顺利进行通讯。
在串口工作方式1、3中,传送波特率都就是可变得。单片机内部通过定时器T1来提供发送与接收缓存器得内部移位时钟。也就就是说,要确定串行通讯得波特率,必须对T1进行相
关设置。51单片机系统对此时T1得设置有以下固定得规定: (1)必须工作在定时器状态; (2)必须工作在“8位自动重载”工作模式; 这必须在特殊寄存器TMOD中进行设置.关于TMOD得详细内容,我们在实验十七已经讲过。可以利用以下语句来设置TMOD: MOV TMOD, #20H 除了对TMOD得设置外,还必须设置定时器T1得定时值,也就就是保存在TH1中得8位重载值。这直接影响到波特率得大小: 它通过以下公式进行计算:
其中得SMOD为特殊寄存器PCON得最高位。当它置1时,可以将波特率增大1倍。
在双机通讯中,只要双方得波特率一致就能够完成通讯了;但就是,在标准得异步通讯协议中,只有几种波特就是适用得。例如1200bps,2400bps,4800bps,9600bps……等等.而通过这个公式可以瞧出,并不就是所有得晶振频率都能够得到准确得上述波特率。比如采用12MHz晶振,代入公式进行运算,就无法得到4800bps得准确波特率(TH1必须为小数了)。在这种情况下,过去人们都使用软件补偿得方法,尽量得到准确得波特率;而现在,市场上有很多通讯专用得晶振,例如3、6864MHz、11、0592MHz……得晶振,都能够直接得到准确得波特率.因此在进行本实验时,必须使用通讯专用晶振(如果使用仿真器,则设置为使用仿真头得外接晶振,并将11、0592M得晶振插入仿真头. 当波特率已经确定,就可以反向推导出TH1得取自大小,例如,在本次实验中,我们要求波特率为4800bps,在晶振采用11、0592MHz得情况下,推出TH1=0F4H.五、实验步骤
1.参考图1并进行电路设计,画出电路图,并用导线正确连接两套装置得单片机最小系统实验模块,并连接最小系统模块与数码管显示模块。
2。照实验要求编写程序流程图,然后编写程序,对编写得程序进行仿真调试,直至通讯成功。
六、实验报告
1 1.在该实验中,单片机串行口工作在什么工作方式下?说明该工作方式得特点。
工作在工作方式 1。8 位数据通讯,波特率可变.
2.波特率就是什么?怎样设置单片机串口通讯得波特率?如果实验要求通讯波特率为4800bps ,怎样修改程序?
特率就是指串口通讯中每秒传送得位数,单位为 BPS,它反映了串行口通讯得速度。
单片机内部通过定时器T1来提供发送与接收缓存器得内部移位时钟。必须工作在定时器状态;必须工作在“8 位自动重载”工作模式。
3.详细说明本次实验采用得通讯协议.
码数位8在示显并,据数位8该收接机乙,机乙给位8后号学)人本生学(机本送发机甲ﻩ管上。乙机接收完毕后,将本机(乙机)得学号后8位发送回甲机,甲机显示在数码管上.4.给针对实验要求编写本机得程序流程图、程序清单并给予适当注释, 并说明合作单片机(合 合作同学).这里有两个程序,一个就是先接受,一个就是先发送。
# include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void); void send(void); void delay(unsigned int i); uchar xuehao[8]={6,6,6,6,6,6,6}; void main(void) {
;)(tiniﻩ send();
while(1); } void init(void)
{
TMOD=0x20;
TH1=0xfd;
;dfx0=1LTﻩ
ﻩ SCON=0x50;
PCON=0x00;
TR1=1; } void send(void) {
;i rahcuﻩ do
{
ﻩ delay(200);
SBUF=0xaa;
;0=IT;)0==IT(elihwﻩ
;0=IR;)0==IR(elihwﻩ }while(SBUF!=0xbb);
//-----———-—-——-—--————-—-———--—----?????
;)08(yaledﻩ for(i=0;i<=7;i++)
{ﻩ ﻩ SBUF=xuehao[i];
;0=IT;)0==IT(elihwﻩﻩ
;)5(yaledﻩ
}ﻩ ;9=FUBSﻩ
;)01(yaledﻩ} /////////////////////////////////////////////////////////// void delay(unsigned int i) {
unsigned char j;
)——i;0〉i;(rofﻩ )++j;521〈j;0=j(rofﻩ {;} } # include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void); void receive(void); void delay(unsigned int i); void display(uchar A,uchar B); void duanxuan(uchar c); uchar xuehao[8]={0}; void main(void) {
;)(tiniﻩ ;)(eviecerﻩ while(1)
{
ﻩ display(1,xuehao[0]);
;)3(yaledﻩ
P0=0x00;
;)]1[oaheux,2(yalpsidﻩ ;)3(yaledﻩﻩ ;00x0=0Pﻩﻩ
display(3,xuehao[2]);
;)3(yaledﻩ
P0=0x00;
ﻩ display(4,xuehao[3]);
delay(3);
ﻩ P0=0x00;
display(5,xuehao[4]);
ﻩ delay(3);
;00x0=0Pﻩ ﻩ display(6,xuehao[5]);
ﻩ delay(3);
P0=0x00;
display(7,xuehao[6]);
;)3(yaledﻩ
P0=0x00;
ﻩ ;)]7[oaheux,8(yalpsidﻩﻩ
;)3(yaledﻩ ﻩ P0=0x00;
}
//
} void init(void)
{
;00X0=1M0Pﻩ P0M0=0Xff;
P2M1=0x00;
P2M0=0xff;
TMOD=0x20;
;dfx0=1HTﻩ TL1=0xfd;
SCON=0x50;
PCON=0x00;
TR1=1; } void receive(void) {
uchar enpty;
;0=j rahcuﻩ odﻩ {
;0=IR;)0==IR(elihwﻩ} ;)aax0=!FUBS(elihwﻩ SBUF=0xbb;
while(TI==0);TI=0;
enpty=SBUF;// while(RI==0);RI=0;
//—--——-—-—--——-——---—---———---——??
delay(10);
for(j=0;j<=7;j++)
{ﻩ ;FUBS=]j[oaheuxﻩﻩ ;0=IR;)0==IR(elihwﻩﻩ } } ////////////////////////////////////////????////////////////////////////////////////////////// void display(uchar A,uchar B) { ,28x0,29x0,99x0,0bx0,4ax0,9fx0,0cx0{=]21[ofni edoc rahcuﻩ0xf8,0x80,0x90, //
0xff,
ﻩ
ﻩ
ﻩ 0 ﻩ—//;}fbxﻩ ;)A(nauxnaudﻩ
switch (B)
{ﻩﻩ:0 esacﻩ
;]0[ofni~=0Pﻩﻩ ﻩ
break;
:1 esacﻩ ﻩ
;]1[ofni~=0Pﻩﻩ
ﻩ
;kaerbﻩ
case 2:
ﻩ;]2[ofni~=0Pﻩ
break; ﻩ:3 esacﻩ ﻩ
ﻩ P0=~info[3];
ﻩﻩ break;
:4 esacﻩﻩ ﻩﻩ
P0=~info[4];
ﻩ
;kaerbﻩ ﻩﻩ case 5:
ﻩ
;]5[ofni~=0Pﻩ;kaerbﻩﻩ ﻩﻩ case 6:
ﻩﻩ P0=~info[6]; ;kaerbﻩﻩ
:7 esacﻩ
ﻩ P0=~info[7];
ﻩ;kaerbﻩ ﻩ
case 8:
ﻩﻩ
P0=~info[8];
ﻩ
;kaerbﻩ
:9 esacﻩ
ﻩ P0=~info[9];
ﻩ
break;
ﻩ
:01 esacﻩ
;]01[ofni~=0Pﻩ
;kaerbﻩﻩ:11 esacﻩ ﻩ
;]11[ofni~=0Pﻩﻩ
ﻩ
;kaerbﻩ
}ﻩ} void duanxuan(uchar c) {
)c( hctiwsﻩ {
ﻩ case 1:
;10x0=2Pﻩ ﻩ
break;
ﻩ case 2:
P2=0x02;
ﻩ break;
:3 esacﻩﻩ ﻩ
;40x0=2Pﻩ ﻩ
break;
ﻩ case 4:
;80x0=2Pﻩﻩ;kaerbﻩ
case 5:
ﻩ;01x0=2Pﻩ ﻩ
break;
:6 esacﻩﻩ ﻩﻩ P2=0x20;
;kaerbﻩﻩ ﻩ case 7:
ﻩ
P2=0x40;
ﻩ
break;
:8 esacﻩﻩ ﻩ
;08x0=2Pﻩ
;kaerbﻩﻩ
:tluafedﻩ ﻩ
break;
} } ///////////////////////////////////////////////////////////////////////////////////////////// void delay(unsigned int i)
{
unsigned char j;
)—-i;0〉i;(rofﻩ for(j=0;j〈125;j++)
};{ﻩ} 5 。实验心得。(必须) 、.。。。。。。.。..。。.。。..。..。。。
6. . 附能说明实验原理得实验照片。(必须)
觉得自己很狭隘!
融入了自己的思想,有感染力。
实验三 双机通信实验
一、实验目的
UART 串行通信接口技术应用
二、实验实现的功能
用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。
三、系统硬件设计
实验所需硬件:电脑一台;
开发板一块;
串口通信线一根; USB线一根;
四、系统软件设计
实验所需软件:编译软件:keil uvision3;
程序下载软件:STC_ISP_V480; 试验程序:
#include sbit W1=P0^0; sbit W2=P0^1; sbit W3=P0^2; sbit W4=P0^3; sbit D9=P3^2; sbit D10=P3^3; sbit D11=P3^4; sbit D12=P3^5; sbit DP=P1^7; code unsigned char table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; sfr P1M1=0x91; sfr P1M0=0x92; sbit H1=P3^6; sbit H2=P3^7; sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; unsigned char dat; unsigned char keynum; unsigned char keyscan(); void display(); void delay(void);
- 1 L1=1; L2=1; L3=1;
H1=0; if(L1==0)
return 1; else if(L2==0)
return 2; else if(L3==0)
return 3;
H1=1; H2=0; if(L1==0)
return 4; else if(L2==0)
return 5; else if(L3==0)
return 6; H2=1; return 0;
} unsigned char keyscan() { static unsigned int ct=0; static unsigned char lastkey=0; unsigned char key; key=getkey();
if(key==lastkey) {
ct++;
if(ct==900)
{
ct=0;
lastkey=0;
return key;
} } else {
- 3