单片机串行通信实验报告(实验要求、原理、仿真图及例程)

合集下载

单片机串行通信实验

单片机串行通信实验

实验四单片机串行通信实验一、实验目的1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。

2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。

3、学习串口通讯的中断方式的程序编写方法二、实验说明利用单片机串行口,实现两个实验台之间的串行通讯。

其中一个实验台作为发送方,另一侧为接收方。

发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。

三、实验仪器计算机伟福实验箱(lab2000P )四、实验内容与软件流程图1、8051的RXD、TXD接线柱在POD51/96仿真板上。

2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。

也可以将本机的TXD 接到RXD上,这样按下的键,就会在本机LED上显示出来。

3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。

可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。

可以用实验仪上的逻辑分析仪采样串口通信的波形4、软件流程图5、实验电路连接方式①双机串行通信方式。

TXD脚和RXD脚分别用于发送和接收数据。

②单机通信的情况下,只需将自己的TXD脚与RXD脚连接就可以,不用公地操作。

五、思考题1、接收到的数据加1显示出来;2、保存前一个接收到的数据,数据向前推动显示。

六、源程序修改原理及其仿真结果实验结果图源程序:加1显示:接收到的数据先前推送:七、心得体会通过这次实验,我掌握了单片机串行口工作方式的程序设计,及简易三线式通讯的方法。

了解了实现串行通讯的硬环境、数据格式的协议、数据交换的协议。

学习了串口通讯的中断方式的程序编写方法。

单片机串口通信实验报告

单片机串口通信实验报告

单片机串口通信实验报告Abstract本实验旨在通过单片机串口通信的方式,实现两个或多个单片机之间的数据传输与交互。

通过该实验,旨在加深对串口通信的理解,以及掌握单片机串口通信的配置与应用。

1. 实验背景在现代电子产品中,单片机广泛应用于各个领域。

而串口通信作为一种常见的单片机通信方式,被广泛使用。

通过串口通信,单片机可以与其他设备或单片机进行数据传输和通信。

2. 实验目的本实验的目的如下:- 了解串口通信的基本原理和工作方式;- 掌握单片机串口通信的配置方法;- 实现两个或多个单片机之间的数据传输与交互。

3. 实验原理3.1 串口通信的基本原理串口通信通过发送和接收两个引脚实现数据的传输。

典型的串口通信包含一个发送引脚(Tx)和一个接收引脚(Rx)。

发送端将数据通过发送引脚逐位发送,接收端通过接收引脚逐位接收。

3.2 单片机串口通信的配置在单片机中进行串口通信配置,需要设置波特率、数据位、停止位和校验位等参数。

波特率用于控制数据的传输速率,数据位决定发送和接收的数据位数,停止位用于标识数据的停止位,校验位用于检测数据传输的错误。

4. 实验步骤4.1 硬件准备(描述实验所需硬件的准备,例如单片机、串口模块等)4.2 软件配置(描述实验所需软件的配置,例如开发环境、编译器等)4.3 单片机串口通信程序编写(描述如何编写单片机串口通信程序,包括发送和接收数据的代码)4.4 程序下载与调试(描述如何下载程序到单片机,并进行调试)5. 实验结果与分析(描述实验的结果,并进行相应的分析和解释)6. 实验总结通过本实验,我深入了解了串口通信的基本原理和工作方式。

通过编写单片机串口通信程序,实现了两个单片机之间的数据传输与交互。

在实验过程中,我掌握了单片机串口通信的配置方法,并解决了一些可能出现的问题。

通过实验,我加深了对单片机串口通信的理解,并提升了自己的实践能力。

参考文献:(列出参考文献,不需要链接)致谢:(感谢相关人员或机构对实验的支持与帮助)附录:(附上相关的代码、电路图等附加信息)以上为单片机串口通信实验报告,通过该实验,我掌握了串口通信的基本原理和工作方式,以及单片机串口通信的配置与应用方法。

串行口通信实验 单片机实验报告

串行口通信实验 单片机实验报告

实验六串行口通信实验一、实验内容实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。

本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。

二、实验目的掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。

三、实验原理51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。

进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。

为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。

单片机串行接口有两个控制寄存器:SCON和PCON。

串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。

在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。

由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。

待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。

单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。

在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。

WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。

如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。

串行通讯实验报告

串行通讯实验报告

一、实验目的1. 理解串行通讯的基本原理及通信方式。

2. 掌握串行通讯的硬件设备和软件实现方法。

3. 学会使用串行通讯进行数据传输。

4. 通过实验,加深对单片机串行口工作原理和程序设计的理解。

二、实验原理串行通讯是指将数据一位一位地按顺序传送的通信方式。

与并行通讯相比,串行通讯的通信线路简单,成本低,适用于远距离通信。

串行通讯主要有两种通信方式:异步通信和同步通信。

1. 异步通信异步通信中,每个字符之间没有固定的时钟同步,而是通过起始位和停止位来标识字符的开始和结束。

每个字符由起始位、数据位、奇偶校验位和停止位组成。

2. 同步通信同步通信中,数据传输过程中有固定的时钟同步信号,发送方和接收方通过同步时钟来保证数据传输的准确性。

三、实验设备1. 单片机最小系统教学实验模块2. 数码管显示模块3. 串行数据线4. 电脑四、实验内容1. 单片机串行口初始化首先,我们需要对单片机串行口进行初始化,包括设置波特率、通信方式、数据位、停止位等。

2. 数据发送在单片机程序中,编写数据发送函数,将数据通过串行口发送出去。

3. 数据接收编写数据接收函数,从串行口接收数据。

4. 数据显示将接收到的数据通过数码管显示出来。

5. 双机通信通过两套单片机实验模块,实现双机通信。

一台单片机作为发送方,另一台单片机作为接收方。

五、实验步骤1. 将单片机最小系统教学实验模块和数码管显示模块连接到电脑上。

2. 编写单片机程序,初始化串行口,并设置波特率、通信方式、数据位、停止位等。

3. 编写数据发送函数,将数据通过串行口发送出去。

4. 编写数据接收函数,从串行口接收数据。

5. 编写数据显示函数,将接收到的数据通过数码管显示出来。

6. 编写双机通信程序,实现两台单片机之间的通信。

7. 将程序下载到单片机中,进行实验。

六、实验结果与分析1. 通过实验,成功实现了单片机串行口的初始化、数据发送、数据接收和数据显示。

2. 成功实现了双机通信,两台单片机之间可以相互发送和接收数据。

两片单片机之间的串行通信(proteus仿真图+程序)

两片单片机之间的串行通信(proteus仿真图+程序)

两片单片机之间的串行通信(proteus仿真图+程序)两片单片机之间的串行通信(仿真图+程序)AT89C51+MAX232功能:(1)甲机P1口的开关控制乙机P1口的发光二级管,开关闭合发光二级管亮,开关断开发光二级管灭。

(2)乙机P2口的开关控制甲机P2口的数码管,按下4*4矩阵键盘,显示对应的键值0~F (3)乙机P0^0口的开关控制甲机P2口的数码管,按下按键,数码管从0~9循环显示;乙机P0^2口的开关控制甲机P2口的数码管,按下按键,数码管清零。

/****************************甲机控制与接收*********************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit K0=P1^0;sbit K1=P1^1;sbit K2=P1^2;sbit K3=P1^3;sbit K4=P1^4;sbit K5=P1^5;sbit K6=P1^6;sbit K7=P1^7;uchar i;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}void main(){ uchar i;P2=0x00;SCON=0x50; //串口模式1TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定6900TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断while(1){ if(K0==0) send('0'); else send('A');if(K1==0) send('1'); else send('B');if(K2==0) send('2'); else send('C');if(K3==0) send('3'); else send('D');if(K4==0) send('4'); else send('E');if(K5==0) send('5'); else send('F');if(K6==0) send('6'); else send('G');if(K7==0) send('7'); else send('H');}}void serial_int() interrupt 4 //甲机串口接收中断函数{ if(RI){ RI=0;if(SBUF>=0 &&SBUF<=15)P2=tab[SBUF];elseP2=0x00;if(SBUF=='x')if(i>=0&&i<9){i=i+1;P2=tab[i];}if(i==9) i=0;if(SBUF=='y'){P2=0x00;i=0;}}}/*****************************乙机控制与接收程序*****************************/ #include#include#define uchar unsigned char#define uint unsigned intsbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;sbit KEY1=P0^0;sbit KEY2=P0^2;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}uchar key() //按键扫描{ uchar keyon,temp;P2=0x0f;delay(1);temp=P2^0x0f;switch(temp){ case 1:keyon=3;break;case 2:keyon=2;break;case 4:keyon=1;break;case 8:keyon=0;break;default:keyon=16;}P2=0xf0;delay(1);temp=P2>>4^0x0f;switch(temp){ case 1:keyon+=0;break;case 2:keyon+=4;break;case 4:keyon+=8;break;case 8:keyon+=12;break;}return keyon;}void main(){ SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1 工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定: 9600TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断delay(100);while(1){ P2=0xf0; //矩阵键盘if(P2!=0xf0)send(key());if(KEY1==1) //独立按键{ delay(20);if(KEY1==0)send('x');}if(KEY2==0) //清零send('y');}}void serial_int() interrupt 4 //乙机串口接收中断函数{ if(RI) { RI=0;switch(SBUF){ case '0':L0=0;break;case '1':L1=0;break;case '2':L2=0;break;case '3':L3=0;break;case '4':L4=0;break;case '5':L5=0;break;case '6':L6=0;break;case '7':L7=0;break;case 'A':L0=1;break;case 'B':L1=1;break;case 'C':L2=1;break;case 'D':L3=1;break;case 'E':L4=1;break;case 'F':L5=1;break;case 'G':L6=1;break;case 'H':L7=1;break;}}}。

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

单片机串行通信实验报告(实验要求、原理、仿真图及例程)

《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。

2.掌握Keil与Proteus的联调技巧。

3.掌握串行通信在单片机系统中的使用。

4.掌握调度器设计的基础知识:函数指针。

二、实验设备1.PC机一套2.Keil C51开发系统一套3.Proteus 仿真系统一套三、实验容1.甲机通过串口控制乙机LED闪烁(1)要求a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有的LED。

b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。

i.甲机发送“A”,控制乙机LED1闪烁。

ii.甲机发送“B”,控制乙机LED2闪烁。

iii.甲机发送“C”,控制乙机LED1,LED2闪烁。

iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。

c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。

两机的程序要分别编写。

d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下:i.设置串口模式(SCON)ii.设置定时器1的工作模式(TMOD)iii.计算定时器1的初值iv.启动定时器v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。

(2)电路原理图Figure 1 甲机通过串口控制乙机LED闪烁的原理图(3)程序设计提示a.模式1下波特率由定时器控制,波特率计算公式参考:b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。

2.单片机与PC串口通讯及函数指针的使用(1)要求:a.编写用单片机求取整数平方的函数。

b.单片机把计算结果向PC机发送字符串。

c.PC机接收计算结果并显示出来。

d.可以调用Keil C51 stdio.h 中的printf来实现字符串的发送。

单片机串行通信实验报告

单片机串行通信实验报告

实验六串行通信实验报告班级:学号:姓名:教师:一、双机通信由两套单片机试验装置(两个实验小组)共同完成该实验。

我们U1为甲机,U2为乙机。

甲机发送本机(学生本人)学号后8位给乙机,乙机接收该8位数据,并显示在8位数码管上。

电路如图1所示。

要求串行通信方式为方式1,波特率为2400bit/s,不加倍,单片机外部晶振频率为11.0592M。

实验电路图:1、C源程序清单甲机(U1)代码:#include<STC12C5A60s2.h>#define uchar unsigned charvoid delay(uchar i);void send(uchar temp);void init(void);void main(void){init();delay(200);while(1){send('^');send(1);send(2);send(1);send(3);send(2);send(2);send(3);send(1);}}/***********初始化***********/void init(void){SCON=0x40; //串口模式1 只发送不接收 TMOD=0x20; //T1 工作模式2TH1=0xf4; //波特率2400TL1=0xf4;PCON=0x00; //不加倍 SMOD=0TI=0;TR1=1; //开定时中断}/*********发送函数**********/void send(uchar temp){SBUF=temp;while(TI==0);TI=0;delay(50);}/**********延时函数**********/void delay(uchar i){unsigned int j;for(i;i>0;i--)for(j=0;j<100;j++);}乙机(U2)代码:#include<STC12C5A60s2.h>#define uchar unsigned char#define uint unsigned intvoid init(void);void delay(uchar t);void xianshi(void);uchar code distable[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管段码uchar code wi[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uchar tab[9] = {0,0,0,0,0,0,0,0,0};uchar i=0,temp;uint a,b,c,d,e,f,g,h;void main(){init();while(1){xianshi();}}/////////////初始化///////////////void init(void){PCON = 0x00; //不加倍SMOD=0SCON = 0x50; //设置串口方式1且允许串口接收 REN=1TMOD = 0x20; //设置T1为方式2TH1 = 0xf4;TL1 = 0xf4; //设置波特率2400TR1 = 1; //开启定时器1ES = 1; //允许串行口中断EA = 1; //允许全局中断}////////////串口中断接收程序////////////void receive() interrupt 4{temp=SBUF;while(RI==0);RI=0;if(temp=='^')temp=0;tab[i]=temp;i++;if(i ==9){i=0;a=tab[1];b=tab[2];c=tab[3];d=tab[4];e=tab[5];f=tab[6];g=tab[7];h=tab[8];}}/////////////数码管显示/////////////void xianshi(void){uchar i,dm,wx;//m1:m0 00=标准; 01=推挽; 10=输入; 11=开漏输出P1M1 = 0X00;P1M0 = 0Xff;P2M1 = 0X00;P2M0 = 0Xff; //设定P1,P2推挽输出while(1){for(i=1;i<9;i++){//ram[i]=tab[i];dm=distable[tab[i]]; //取显示段码wx=wi[i-1]; //取位选码P1=0x00; //关显示P2=dm; //段码赋给P2口P1=wx; //点亮位选的那个数码管delay(1) ; //延时}}/*uchar k,ram[8];ram[0] = a;ram[1] = b;ram[2] = c;ram[3] = d;ram[4] = e;ram[5] = f;ram[6] = g;ram[7] = h;for(k=0;k<8;k++){P2=distable[ram[k]];P1=wi[k];P2=0x00;delay(1);}*/}//////////////延时函数/////////////void delay(uchar t ){uchar x,y,z;for(x=t;x>0;x--)for(y=25;y>0;y--)for(z=100;z>0;z--);}2、仿真结果3、问题分析在数码管显示这块,刚开始是这样写的在proteus上仿真的时候是没有任何问题的,但是后来在实验板上数码管显示特别暗,几乎看不出来有显示数字,想了想可能是没有加推挽输出,然后就将推挽输出代码加入,然后重新下载,但是结果和之前没什么不同。

单片机与PC机串口通信实验报告

单片机与PC机串口通信实验报告

单片机与PC机串口通讯学生:何绍金学号:201203870408专业班级:自动化1202指导老师:杨东勇2014年12月一、实验目的学习PC机的串口通讯原理。

二、实验设备统一电子开发平台。

三、实验要求单片机与电脑串口通讯,将单片机与电脑相连,借助串口调试助手,单片机发送“which led is light?”,串口调试助手中输入1-8个数字中一个,相应的led点亮,单片机再发送“which led is light?”消息提示输入下一个需要点亮的灯。

通讯波特率:9600bps,信息格式:无校验位+8个数据位+1个停止位,传送方式,单片机采用中断方式接收信息。

四、实验原理鉴于8051单片机输入、输出电平均为TTL/CMOS电平,而计算机配置的是RS232标准串行接口,使用的是RS232标准电平(逻辑0:+3V~+15V,逻辑1:约-3V~-15V),二者的电气规范不一致,因此要完成PC机与单片机的数据通讯,必须进行电平转换。

这里,我们介绍Sipex公司的SP3232电平转换专用芯片[7]。

1.SP3232的工作原理SP3232的引脚如图1所示。

图1 SP3232引脚图SP3232管脚定义如表1所示:SP3232的内部包括3个部分:充电泵电压变换器,发送(传输器),以及接收装如图2”。

2.实验原理图实验原理图如图3所示。

图3 单片机与PC机串口通讯实验硬件原理图图4-2六、实验思考题如果PC机连续发送数字字符,如何避免错漏接收字符?答:利用中断判断是否接受完一个数字字符,接受完后再接收下一个数字字符。

附:实验源代码;********************ASM汇编实验*******************; 工程:; 晶振: 11.0592M;*************************************************//#include "REG_MPC82G516.INC" /* 如果用到MPC82G516的特殊寄存器请包含这个头文件*/ORG 0000HAJMP MAINORG 0023HAJMP INT_COM1MAIN:MOV SCON,#50H ;;MOV TMOD,#20H ; ;设置波特率MOV TH1,#0FDH ; ;SETB TR1;SETB EA;允许总的中断SETB ESMOV R1,#01H ;发送消息判断标志,1 代表发送,0 代表不发送CALL SHOW ;发送显示灯选择消息LOOP:CALL LED1SJMP LOOPINT_COM1:PUSH PSW ;保存寄存器数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

}
void intsvr0(void) interrupt 0 //外部中断 INT0
{ debouncing();//调用消抖函数
c=(*p)(n);//用函数指针形式调用求取整数平方函数
disp(n);//在数码管上显示发送次数
SBUF=c;//发送求取结果
while(TI==0);//查询等待发送是否完成
(2) 电路原理图
Figure 1 甲机通过串口控制乙机 LED 闪烁的原理图
(3) 程序设计提示 a. 模式 1 下波特率由定时器控制,波特率计算公式参考: b. 可以不用使用中断方式,使用查询方式实现发送与接收,通过查询 TI 和 RI 标志位完成。
2. 单片机与 PC 串口通讯及函数指针的使用 (1) 要求: a. 编写用单片机求取整数平方的函数。 b. 单片机把计算结果向 PC 机发送字符串。 c. PC 机接收计算结果并显示出来。 d. 可以调用 Keil C51 中的 printf 来实现字符串的发送。 e. 单片机的数码港显示发送的次数,每 9 次清零。
《嵌入式系统原理及实验》实验报告
Lab 3 调度器设计基础
一、 甲机通过串口控制乙机 LED 闪烁
(一) 实现原理 1. 总体思路 通过发送缓冲寄存器 SBUF,以及接收缓冲寄存器 SBUF,将在甲机上初始化的要发送的数据 'A','B','C','D'存入一个数组,通过超级循环内设定的一个按键控制函数,依次发送给乙机,由乙机 接收并让相应的 LED 灯闪烁。 2. 硬件设计
(2) 参考电路原理图
Figure 2 单片机与 PC 串口通讯及函数指针的使用原理图
(3) 程序设计要求 a. 编写求平方函数时,采用函数指针来编写。 b. 参考头文件模式,完善设计项目文件结构。
四、 思考题 1. 如果实验 1 如何使用实验 2 的成果来改写 2. 请结合实例说明什么是函数指针及如何使用函数指针。 五、 实验报告要求 1. 简述编写 C 程序,并联合调试程序的过程。 2. 解释编写的实验程序的代码,描述实验结果。 3. 解答思考题。 4. 简述实验的心得。
'B'
'C' 'D'


↓↓
都闪烁
LED1 LED3 LED1 LED1&LED3 全灭 闪烁 闪烁 &LED3

'A' 都闪烁
乙机接收相应字符

'B'
'C' 'D'


↓↓
LED2 LED4 LED2 LED2&LED4 全灭 闪烁 闪烁 &LED4
关键代码段+解释:
甲机代码 段·············································· ···················
TI=0;//发送完成,TI 由软件清 0
vir_ter(n,c);//在虚拟终端上显示求平方结果 }
1. 进一步改进的设想 目前还没有设计得出外部中断服务程序和串行口中断服务程序同时一起用的 C51 程序,遇到很 多问题。希望老师今后能指导我们关于双重中断程序的编写,我自己捣鼓了好久还没捣鼓出
来。
实验的收获 收获当然很多,诸如:虚拟终端的 RXD 应当与串口第 3 脚 TXD(即发送端)连接等等都是我对单片机新的认 识,新的收获。 还有:
《嵌入式系统原理与实验》实验指导
实验三 调度器设计基础
一、 实验目的和要求 1. 熟练使用 Keil C51 IDE 集成开发环境,熟练使用 Proteus 软件。 2. 掌握 Keil 与 Proteus 的联调技巧。 3. 掌握串行通信在单片机系统中的使用。 4. 掌握调度器设计的基础知识:函数指针。
SBUF=c; 应该关闭串口中断使能
putchar('\n');
用 printf 之前
while(!TI);.O__O"…
TR1=1;//启动定时器 T1
SCON=0x50;//0101,0000:串行口方式 1 EN=1 允许接收,8 位异步通信方式,8-bit UART,TI= 0; RI=0
总之,以上两幅图所呈现的,是当按键第二次按下,甲机发送字符'B',并闪烁 D3 灯,乙机接收 字符'B',并闪烁相应的 D4 灯。 *******************************************************************
上图所示按键第三次按下,控制甲机发送字符'C',并同时闪烁 D1 和 D3 灯,与此同时,乙机接 收甲机发来的字符'C',并同时闪烁 D2、D4 灯。图中所示的是 LED 灯一闪一灭时的亮状态,灭状 态的截图此处省去。 *******************************************************************
*******************************************************************
以上两幅图是在一起的,也许是 LED 灯启动以及延迟还有甲、乙机发送接收数据时间差等各方 面的差异,甲机的 D3 灯和乙机的 D4 灯亮不到一块去,它们交替着闪烁,此闪彼灭。
PCON=0x00;//SMOD=0 EA=1;//开总中断允许位 ES=1;//开串行口中断 IT0=1;//外部中断 0,下降沿触发
EX0=1;//允许外部中断 0
p=pow2;//将求取整数平方函数的入口地址赋予函数指针 P0=led[0];//初始化数码管显示
while(1);//等待外部中断
的是单击 Play
上图所示 以后开始仿真,此时没有按键按下,甲机乙机均处于等待状态之下。
*******************************************************************
上图所示按键第一次按下,甲机发送字符'A',D1 灯闪烁,乙机接收字符'A',并显示相应与甲机 D1 灯位置对应的 D2 灯闪烁。
二、 实验设备 1. PC 机 2. Keil C51 开发系统 3. Proteus 仿真系统
一套 一套 一套
三、 实验内容 1. 甲机通过串口控制乙机 LED 闪烁 (1) 要求 a. 甲单片机的 K1 按键可通过串口分别控制乙单片机的 LED1 闪烁,LED2 闪烁,LED1 和 LED2 同时 闪烁,关闭所有的 LED。 b. 两片 8051 的串口都工作在模式 1,甲机对乙机完成以下 4 项控制。 i. 甲机发送“A”,控制乙机 LED1 闪烁。 ii. 甲机发送“B”,控制乙机 LED2 闪烁。 iii. 甲机发送“C”,控制乙机 LED1,LED2 闪烁。 iv. 甲机发送“C”,控制乙机 LED1,LED2 停止闪烁。 c. 甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制 LED 的动作。两机的程序要 分别编写。 d. 两个单片机都工作在串口模式 1 下,程序要先进行初始化,具体步骤如下: i. 设置串口模式(SCON) ii. 设置定时器 1 的工作模式(TMOD) iii. 计算定时器 1 的初值 iv. 启动定时器 v. 如果串口工作在中断方式,还必须设置 IE 和 ES,并编写中断服务程序。
/*******************************
.O__O"… ② 调用 printf 之前应该关闭串口中断使能
ES=0;
2

.O__O"… SCON=0x50;用 printf 之前应该关闭串口中断使能 putchar('\n');
while(!TI);
2 .O__O"…
(二) 实验再思考
上图所示按键第四次按下,甲机向乙机发送字符'D',同时使得 D1、D3 灯灭掉,乙机接收完字符 'D'之后,也使得其控制的 D2、D4 灯停止闪烁。
3. 软件设计
流程图:
开始
↓←←←←←←↑
是否有按键按下 否→↑
是↓
第几次按下按键

1 st
2 nd 3 rd 4 th


↓↓
↓甲机发送字符:'A'
相关文档
最新文档