欢迎来到天天文库
浏览记录
ID:38145226
大小:500.84 KB
页数:6页
时间:2019-05-21
《51单片机串口 (1)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.基础●SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。●REN,允许串行接收位。由软件置
2、REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。●TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。●RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。波特率的计算在串行通信中,收发双方对发送或接收数据的速率要有约定。通过
3、软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。方式0的波特率=fosc/12方式2的波特率=(2SMOD/64)·fosc方式1的波特率=(2SMOD/32)·(T1溢出率)方式3的波特率=(2SMOD/32)·(T1溢出率)当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=
4、1,以启动定时器)。这时溢出率取决于TH1中的计数值。T1溢出率=fosc/{12×[256-(TH1)]}根据上面的等式计算出TH1写串口程序的步骤1.串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:§确定T1的工作方式(编程TMOD寄存器)(方式20x20);§计算T1的初值,装载TH1、TL1;(有波特率计算)§启动T1(编程TCON中的TR1位);§确定串行口控制(编程SCON寄存器);{SM0,SM1,REN}串行口在中断方式工作时,要进行中断设置(编程IE、IP寄
5、存器)。例子1.直接串口传输#includevoidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;RI=0;P1=SBUF;}2.中断传输#include#defineucharunsignedcharuchara,flag;voidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;PCON=0x80;while(1){if(flag=
6、=1){ES=0;flag=0;SBUF=a;while(!TI);TI=0;ES=1;}}}voidserial()interrupt4{P1=SBUF;a=SBUF;flag=1;RI=0;}
此文档下载收益归作者所有