电子与信息工程学院实验报告
姓 名: | 张周静
| 学号:
| 2014022063
| 班级: | 电子14级2班
| 课程名称:
| 单片机原理与应用实验
| 实验时间:
| 2016.11.9
| 项目名称:
| 双机通信(串口)
|
一、实验目的
1.了解单片机串行口的内部结构及工作原理。
2.理解串行双机通信的原理。
3.掌握单片机串行通信C51程序的设计、仿真与调试。
二、实验设备
PC机 一套
三、实验内容
1. 硬件连接 电路图如图5所示,甲机和乙机的串行口RXD和TXD互相连接,甲机的P1口接有按键K1~K8,P2口接有LED灯D9~D16,乙机的P1口接有按键K9~K16,P2口接有LED灯D1~D8。
图1 单片机方式1双机通信的连接 2. 实现功能 编程实现甲机的K1~K8可以控制乙机的D1~D8,同时乙机的K9~K16能够控制甲机的D9~D16。
四、实验步骤 1、编程实现甲机的K1~K8控制乙机的D1~D8。
甲机程序代码:
- #include<reg51.h>
- void main(void)
- {
- unsigned char temp = 0;
- TMOD = 0x22; //设置定时器T1为方式2
- TH1 = 0xfd;
- TH0 = 0xfd;
- SCON = 0x50; //串口方式1发送:SM1SM0=10,且REN = 0所以不发送
- PCON = 0x00; //串口波特率不倍增
- TR1 = 1; //启动T1定时器
- TR0 = 1;
- P1 = 0xff; //设置P1为输入,端口初始化。
- TI = 1;
- //SBUF = temp;
- while(1)
- {
- while(TI == 0); //如果TI == 0 ,表示未发送完,等待发送完毕
- TI = 0; //已经发送完毕,则将TI清0
- temp = P1; //读入P1口开关的状态数据
- SBUF = temp; //数据送串行口发送
- //乙级接收
-
- while(RI == 0);//若RI == 0,则表示没有接到数据,等待
- RI = 0; //接收收据后进行清0
- temp = SBUF; //读取数据存入temp中
- P2 = temp;
- }
- }
复制代码
乙机程序代码:
- #include<reg51.h>
- void main(void)
- {
- unsigned char temp = 0;
- TMOD = 0x22; //设置定时器T1为方式2
- TH1 = 0xfd; TL1 = 0xfd;
- TH0 = 0xfd; TL0 = 0xfd;
- SCON = 0x50; //设置串口为方式1接收,REN = 1
- PCON = 0x00; //SMOD = 0;,波特率不加倍
- TR1 = 1; //开启定时器T1
- TR0 = 1;
- TI = 1;
- //SBUF = temp;
- while(1)
- {
- while(RI == 0);//若RI == 0,则表示没有接到数据,等待
- RI = 0; //接收收据后进行清0
- temp = SBUF; //读取数据存入temp中
- P2 = temp;
-
- while(TI == 0); //如果TI == 0 ,表示未发送完,等待发送完毕
- TI = 0; //已经发送完毕,则将TI清0
- temp = P1; //读入P1口开关的状态数据
- SBUF = temp; //数据送串行口发送
- }
- }
复制代码
Protues仿真图:
五、实验总结
通过本次实验,让我对单片机的串行口的内部结构有了更加深入的学习和理解,知道了单片机不仅可以独立使用还能与其他单片机进行互联,通过这种方式可以增强单片机的功能,在以后的单片机使用上有了更多的选择。
完整的Word格式文档51黑下载地址:
双机通信(串口).doc
(453 KB, 下载次数: 17)
|