单片机串行通信实验报告(实验要求、原理、仿真图及例程)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
(2) 参考电路原理图
Figure 2 单片机与 PC 串口通讯及函数指针的使用原理图
(3) 程序设计要求 a. 编写求平方函数时,采用函数指针来编写。 b. 参考头文件模式,完善设计项目文件结构。
四、 思考题 1. 如果实验 1 如何使用实验 2 的成果来改写 2. 请结合实例说明什么是函数指针及如何使用函数指针。 五、 实验报告要求 1. 简述编写 C 程序,并联合调试程序的过程。 2. 解释编写的实验程序的代码,描述实验结果。 3. 解答思考题。 4. 简述实验的心得。
1. 进一步改进的设想 目前还没有设计得出外部中断服务程序和串行口中断服务程序同时一起用的 C51 程序,遇到很 多问题。希望老师今后能指导我们关于双重中断程序的编写,我自己捣鼓了好久还没捣鼓出
来。
实验的收获 收获当然很多,诸如:虚拟终端的 RXD 应当与串口第 3 脚 TXD(即发送端)连接等等都是我对单片机新的认 识,新的收获。 还有:
}
void intsvr0(void) interrupt 0 //外部中断 INT0
{ debouncing();//调用消抖函数
c=(*p)(n);//用函数指针形式调用求取整数平方函数
disp(n);//在数码管上显示发送次数
SBUF=c;//发送求取结果
while(TI==0);//查询等待发送是否完成
二、 实验设备 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 中的 printf 来实现字符串的发送。 e. 单片机的数码港显示发送的次数,每 9 次清零。
PCON=0x00;//SMOD=0 EA=1;//开总中断允许位 ES=1;//开串行口中断 IT0=1;//外部中断 0,下降沿触发
EX0=1;//允许外部中断 0
p=pow2;//将求取整数平方函数的入口地址赋予函数指针 P0=led[0];//初始化数码管显示
while(1);//等待外部中断
'B'
'C' 'D'
Βιβλιοθήκη Baidu
↓
↓
↓↓
都闪烁
LED1 LED3 LED1 LED1&LED3 全灭 闪烁 闪烁 &LED3
↓
'A' 都闪烁
乙机接收相应字符
↓
'B'
'C' 'D'
↓
↓
↓↓
LED2 LED4 LED2 LED2&LED4 全灭 闪烁 闪烁 &LED4
关键代码段+解释:
甲机代码 段·············································· ···················
*******************************************************************
以上两幅图是在一起的,也许是 LED 灯启动以及延迟还有甲、乙机发送接收数据时间差等各方 面的差异,甲机的 D3 灯和乙机的 D4 灯亮不到一块去,它们交替着闪烁,此闪彼灭。
总之,以上两幅图所呈现的,是当按键第二次按下,甲机发送字符'B',并闪烁 D3 灯,乙机接收 字符'B',并闪烁相应的 D4 灯。 *******************************************************************
上图所示按键第三次按下,控制甲机发送字符'C',并同时闪烁 D1 和 D3 灯,与此同时,乙机接 收甲机发来的字符'C',并同时闪烁 D2、D4 灯。图中所示的是 LED 灯一闪一灭时的亮状态,灭状 态的截图此处省去。 *******************************************************************
的是单击 Play
上图所示 以后开始仿真,此时没有按键按下,甲机乙机均处于等待状态之下。
*******************************************************************
上图所示按键第一次按下,甲机发送字符'A',D1 灯闪烁,乙机接收字符'A',并显示相应与甲机 D1 灯位置对应的 D2 灯闪烁。
《嵌入式系统原理及实验》实验报告
Lab 3 调度器设计基础
一、 甲机通过串口控制乙机 LED 闪烁
(一) 实现原理 1. 总体思路 通过发送缓冲寄存器 SBUF,以及接收缓冲寄存器 SBUF,将在甲机上初始化的要发送的数据 'A','B','C','D'存入一个数组,通过超级循环内设定的一个按键控制函数,依次发送给乙机,由乙机 接收并让相应的 LED 灯闪烁。 2. 硬件设计
上图所示按键第四次按下,甲机向乙机发送字符'D',同时使得 D1、D3 灯灭掉,乙机接收完字符 'D'之后,也使得其控制的 D2、D4 灯停止闪烁。
3. 软件设计
流程图:
开始
↓←←←←←←↑
是否有按键按下 否→↑
是↓
第几次按下按键
↓
1 st
2 nd 3 rd 4 th
↓
↓
↓↓
↓甲机发送字符:'A'
TI=0;//发送完成,TI 由软件清 0
vir_ter(n,c);//在虚拟终端上显示求平方结果 }
/*******************************
.O__O"… ② 调用 printf 之前应该关闭串口中断使能
ES=0;
2
.O__O"… SCON=0x50;用 printf 之前应该关闭串口中断使能 putchar('\n');
while(!TI);
2 .O__O"…
(二) 实验再思考
《嵌入式系统原理与实验》实验指导
实验三 调度器设计基础
一、 实验目的和要求 1. 熟练使用 Keil C51 IDE 集成开发环境,熟练使用 Proteus 软件。 2. 掌握 Keil 与 Proteus 的联调技巧。 3. 掌握串行通信在单片机系统中的使用。 4. 掌握调度器设计的基础知识:函数指针。