第9讲 串行通信技术.pptVIP

  • 9
  • 0
  • 约9.53千字
  • 约 47页
  • 2017-06-20 发布于湖北
  • 举报
三、串行通信接口的控制 串行口工作方式2 串行口工作方式2为9位异步通信方式,数据帧格式为1位起始位、8位数据位、1位控制/校验位、1位停止位,共11位。波特率为fosc/32或fosc/64。 方式2发送 将要发送的数据写入到SBUF,并通过SCON中的TB8设置数据的奇偶校验。数据位从TXD引脚输出。当数据发送完毕后,硬件自动使TI置1。启动下一次发送前,TI位必须清0。 方式2接收 方式2的接收过程与方式1类似,当RI=0且接收数据的第9位为1,或者RI=0且SM2=0时,前8位数据被移入到SBUF中,第9位数据被送入到SCON的RB8位,硬件自动使RI置1,CPU读取SBUF后必须将RI清0才可以进行下次接收。 DATE: * PAGE: * 三、串行通信接口的控制 串行口工作方式3 串行口工作方式3的波特率可变,取决于定时器T1的溢出率,除此之外与方式2相同。 方式1和方式3下波特率的设定 方式1和方式3下,波特率是可变的,由定时器T1的溢出率控制。定时器T1用作波特率发生器时,通常选择工作方式2,即8位初值自动重装载方式。常用的波特率与定时器T1的初值关系见下表: DATE: * PAGE: * 四、串行通信接口的编程 串行通信接口的编程 在使用串口收发数据之前,需要对串口相关的特殊功能寄存器进行初始化设置,其内容包括以下两个方面: 1、初始化: (1)串口工作模式SCON设置 需要设置SM0和SM1选择串行口工作方式,多机通信时还需要设置SM2。此外,如果需要串口接收数据,则必须设置REN为1。 (2)设置波特率 对于方式0,不需要设置波特率。 对于方式2,可以通过设置PCON中的SMOD位选择波特率为fosc/32或fosc/64。 对于方式1和方式3,波特率设置通过定时器T1的工作方式2实现。设置波特率时,需要设置TMOD寄存器,使定时器T1工作于方式2,并需要根据波特率的值查表设置定时器T1的初值寄存器TH1和TL1。另外还需要设置PCON中的SMOD位,以决定波特率是否加倍。 (3)如需中断,开总中断和串行中断 DATE: * PAGE: * 四、串行通信接口的编程 2、奇偶校验: 对于方式2和方式3,需要有奇偶校验。 偶校验:发送/接收的8个数据位的1的个数为偶数时,TB8=0/ RB8=0;为奇数时,TB8=1/ RB8=1; 奇校验:发送/接收的8个数据位的1的个数为奇数时,TB8=0/RB8=0;为偶数时,TB8=1/ RB8=1; 用软件产生奇偶校验位是根据51系列单片机的状态寄存器PSW的定义:当累加器ACC中为1的个数为奇数时,P=1,否则P=0,因此在校验之前需要先将数据送入累加器ACC计算1的个数,以决定P值,然后将P值装入TB8位,与数据一起发送出去供接收方校验。默认是偶校验,如果需要改成奇校验,则在发送方需要将P值取反后再装入TB8,在接收方校验时需将RB8中的值取反再与P值进行比较。 DATE: * PAGE: * 四、串行通信接口的编程 例9-1 下图是单片机8051与8位并入串出接口芯片74LS165的接口电路。使用串行口工作方式0,编程实现单片机从74LS165读取8位开关状态,并送P1口上的八个LED显示。 DATE: * PAGE: * 四、串行通信接口的编程 #includereg51.h sbit P37=P3^7; int main(void) { EA=1; //开总中断 ES=1;//开串行中断 SCON=0x10;//设置串口工作于方式0,允许接收数据 while(1) { P37=0; //锁存数据 P37=1; //允许传送数据 REN=1; //允许接收 while(REN);//等待传送完成 } } DATE: * PAGE: * 四、串行通信接口的编程 void Recive() interrupt 4//串行中断程序 { REN=0; //禁止接收数据 P1=SBUF;//显示数据 RI=0;//允许再次中断 } DATE: * PAGE: * 四、串行通信接口的编程 例9-2 下图是单片机与8位的串入并出接口芯片74LS164的接口电路。使用串行口工作方式0,编程实现单片机发送串行数据到74LS165控制八个LED进行流水灯显示。 DATE: * PAGE: * 四、串行通信接口的编程 #includereg51.h unsigned char code Tab[]={0xFE,0xFD,0

文档评论(0)

1亿VIP精品文档

相关文档