单片机串行通信实验报告Word文档下载推荐.docx
- 文档编号:22030155
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:6
- 大小:58.61KB
单片机串行通信实验报告Word文档下载推荐.docx
《单片机串行通信实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机串行通信实验报告Word文档下载推荐.docx(6页珍藏版)》请在冰豆网上搜索。
二、实验原理
计算机与其外部设备之间进行数据交换称为通信。
通信的基本方式可分为并行通信和串行通信两种。
并行通信中数据至少有8路,可以同时将一个字节的8位二进制代码发送到对方。
串行通信用两根传输线进行数据的传输,一次只能发送一位二进制。
串行通信技术根据传送的编码格式不同,可分为同步通信和异步通信两种方式:
1、同步方式:
数据以数据块为单位传送。
在开始传送前用同步字符来指示,并由时钟来实现发送端和接收端同步。
2、异步方式:
数据时不连续传送的。
以字符为单位进行传送。
被传送字节分为:
起始位、数据位、校验位和停止位,称为一帧。
常用格式:
a、1bit起始位+8bit数据位+无校验位+1bit停止位
b、1bit起始位+8bit数据位+1位偶校验位+1bit停止位
串行通信技术根据数据流动方向分为三种方式:
1、单工通信:
数据流动方向是固定的,数据只能由一方发送到另一方。
2、半双工通信:
数据的流动方向是双向的,但一时刻,数据只能在一个方向流动。
3、全双工通信:
允许数据在两个方向流动,即通信双方的数据发送和接收是同时的。
串行口控制寄存器SCON的格式如下:
D7D6D5D4D3D2D1D0
SM0
SM1
SM2
REN
TB8
RB8
T1
RI
SM0、SM1:
由软件置位或清零,用于选择串行口四种工作方式。
SM2:
多机通信控制位。
在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;
RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。
当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。
在方式0时,SM2必须为0。
REN:
允许串行接收控制位。
若REN=0,则禁止接收;
REN=1,则允许接收,该位由软件置位或复位。
TB8:
发送数据D8位。
在方式2和方式3时,TB8为所要发送的第9位数据。
在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:
TB8=0为数据,TB8=1为地址;
也可用作数据的奇偶校验位。
该位由软件置位或复位。
RB8:
接收数据D8位。
在方式2和方式3时,接收到的第9位数据,可作为奇偶校验位或地址帧或数据帧的标志。
方式1时,若SM2=0,则RB8是接收到的停止位。
在方式0时,不使用RB8位。
TI:
发送中断标志位。
在方式0时,当发送数据第8位结束后,或在其它方式发送停止位后,由内部硬件使TI置位,向CPU请求中断。
CPU在响应中断后,必须用软件清零。
此外,TI也可供查询使用。
RI:
接收中断标志位。
在方式0时,当接收数据的第8位结束后,或在其它方式接收到停止位的中间由内部硬件使RI置位,向CPU请求中断。
同样,在CPU响应中断后,也必须用软件清零。
RI也可供查询使用。
电源控制寄存器PCON的格式如下:
D7D6D5D4D3D2D1D0
SMOD
---
CF1
CF0
PD
IDL
PCON的最高位SMOD是串行口波特率系数控制位。
SMOD=1时,波特率增大一倍。
其余各位与串行口无关。
波特率设置:
串行口的4种工作方式对应着三种波特率模式。
对于方式0,波特率是固定的,为fosc/12。
对于方式2,波特率由振荡频率fosc和SMOD(PCON.7)所决定。
其对应公式为
波特率=2SMOD×
fosc/64。
当SMOD=0时,波特率为fosc/64;
当SMOD=1时,波特率为fosc/32。
对于方式1和方式3,波特率由定时器/计数器T1的溢出率和SMOD决定,即由下式确定:
定时器/计数器T1溢出率/32
三、实验内容
#include"
reg51.h"
#defineucharunsignedchar
uchara,flag;
voiddelay();
voidinit()//串行口初始化函数:
实现9600b/s的波特率,只发送不接收
{
TMOD=0x20;
//定时器1的方式2
TH1=0xfd;
TL1=0xfd;
//初值:
0xfd
PCON=0x00;
//波特率不倍频
TR1=1;
//启动定时器1
SCON=0x50;
//设置串行口为接收,REN=0
TI=0;
//发送标志位初始为0
RI=1;
//接收标志位初始化为0
ES=1;
EA=1;
flag=0;
}
voidsend(uchardat)//发送函数:
发送一个8位的数据
SBUF=dat;
//把发送的数据装载入SBUF中
while(TI==0);
//等待发送完成
//发送完成,标志位必须软件清零
ucharreceive()//接收函数:
接收一帧数据
uchardat;
//保存接收到的数据
while(RI==0);
//等待接收完成
RI=0;
//标志位清零,等待下次接收
dat=SBUF;
//接收到的数据取出给dat
returndat;
//返回dat给主函数处理
}*/
voidreceive()interrupt4using1
P1=SBUF;
delay();
a=SBUF;
flag=1;
}
voiddelay()//延时函数:
实现约15ms的时间
ucharm,n;
for(m=0;
m<
200;
m++)
for(n=0;
n<
n++);
voidmain()//主函数:
实现数据发送
init();
//初始化串行口
while
(1)
{
//send(0xAA);
//发送0x55给串行口清零
//P1=receive();
//delay();
//给系统一点响应时间
if(flag==1)
send(a);
仿真图
四、小结与体会
通过这次串行通信实验,有了上节课的简单了解,我对单片机串行口的工作原理有了更为深入的了解,比如说发送缓冲器只可以写入不可读出、接收缓冲器只可以读出不可以写入、定时器T1作为波特率发生器,它的溢出信号作接收或发送移位寄存器的移位时钟、T1和R1分别为发送和接收完数据的中断标志等问题。
WelcomeTo
Download!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 串行 通信 实验 报告