单片机实验报告六
- 格式:doc
- 大小:216.00 KB
- 文档页数:4
实验报告单 HUBEI UNIVERSITY OF EDUCATION
院(系) 计算机学院 专业 计算机科学与技术 班级
姓名 学号 同组人
实验室 S4306 组号 日期
课程 单片机技术 指导教师 成绩
实验项目编号 8103201206 实验项目名称 双机通信
一、实验目的
掌握串行口通信电路工作原理,熟悉ARES软件的PCB设计方法。
二、实验环境(仪器设备、软件)
Win XP、Keil uVision4、Proteus ISIS 7 Professional
三、实验原理(或要求)
甲乙两机RXD和TXD交叉相连,两机共地。其中甲机发送数据,乙机接收。
四、实验步骤
1、按照教材图7.20,绘制实验六基本电路原理图,仿真验证P149 双机串行通信源程序的功能;
2、按照图A.69和表A.8改画通信系统接线图,其中BCD数码管的PCB封装采用CONN-H4接线端子(J2)代替。
3、采用手工布局与自动布局相结合,自动布线与手工修线相结合的办法,完成通信系统接线图的PCB设计,生成模版(Gerber)文件。
4、观察仿真结果,完成实验报告。
(1)在Proteus中绘制电路原理图,将元件添加到编辑环境中;
(2)在Keil下调试程序,并进行编译
(3)连接Proteus 软件和Keil软件,并观察仿真结果
五、记录与处理(实验数据、误差分析、结果分析)
1. 电路原理图如下:
2.源程序如下:
/*发送程序*/
#include
#define uchar unsigned char
char code map[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x58,0x5e,0x7b,0x71}; //LED显示模0-f
void delay(unsigned int time){
unsigned int j = 0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main(void){
uchar counter=0; //定义计数器
TMOD=0x20; //T1定时方式2
TH1 = TL1 = 0xf4; //2400b/s
PCON=0; //波特率不加倍
SCON = 0x50; //串口方式1,TI和RI清零,允许接收;
TR1=1; //启动T1
while(1){
SBUF = counter; //发送联络信号
while(TI==0); //等待发送完成
TI = 0; //清TI标志位
while(1){
SBUF = counter; //发送联络信号
while(TI==0); //等待发送完成
TI = 0; //清TI标志位
while(RI==0); //等待乙机回答
RI = 0;
if(SBUF ==counter){ //若返回值与发送值相同,组织新数据
P2 = map[counter]; //显示已发送值
if(++counter>9) counter=0; //修正计数器值
delay(500);
}
}
}
/*接收程序*/
#include
#define uchar unsigned char
char code map[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x58,0x5e,0x7b,0x71}; //LED显示模0-f
void main(void){
uchar receiv; //定义接收缓冲
TMOD=0x20; //T1定时方式2
TH1 = TL1 = 0xf4; //2400b/s
PCON=0; //波特率不加倍
SCON = 0x50; //串口方式1,TI和RI清零,允许接收;
TR1=1; //启动T1
while(1){
while(RI==1){ //等待接收完
RI = 0; //清RI标志位
receiv = SBUF; //取得接收值
SBUF = receiv; //结果返回主机
while(TI==0); //等待发送完成
TI = 0; //清TI标志位
P2 = map[receiv]; //显示接收值
}
}
}
3.仿真运行。
六、思考题
比较分析串行口4种波特率的异同。
在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
其中,T1 溢出率 = fosc /{12×[256 -(TH1)]}
七、实验小结
本次实验的实现采用的是两块AT89C51型号的单片机来完成双机串口通信的。本次实验涉及到较多的硬件设备和寄存器,重难点就在于较多的初始化变量需要设置和计算。通过上机掌握了串行口通信工作原理。