资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2,第,8,章 串行口通信,3,主要内容,8.1,串行通信的概念,8.2,串行口,1,的相关寄存器,8.3,串行口,1,的工作方式,8.4,串行口,1,通信中波特率的设置,8.5,串行口,2,的相关寄存器,8.6,串行口,2,的工作方式,8.7,串行口的应用,8.8 RS-232,串行标准,8.9 RS,485,串行接口,8.10 SPI,串行接口概述,8.11 SPI,串行数据通信,8.12 SPI,接口的应用,4,8.1,串行通信的概念,串行通信是按一位一位的顺序传送数据,串行通信方式又分为,同步通信,和,异步通信,两种。,同步通信,:,发送方和接收方用同一个时钟控制信号,5,8.1,串行通信的概念,异步通信是一种将数据以一个字符为单位进行传送的通信方式,传送一个字符又称为一帧信息,发送与接收之间无时钟信号控制,,发送和接收的速率要求相同,起始位,:位于一帧数据的开头,逻辑“,0”,电平信号,用来通知接收设备开始接收一帧信息,数据位,:紧跟起始位之后的是数据位,对,51,内核单片机来说,,低位在前,高位在后,第,9,位:常用于对串行通信数据进行奇偶校验,停止位,:逻辑“1”电平信号,,应大于或等于一个位数据的时间,。在发送完一帧信息后,用于发送的数据线一直处于高电平状态,等待再次发送,8,8.2,串行口,1,的相关寄存器,STC12C5A60S2,单片机的串行口,1,与,8,个特殊功能寄存器相关,串行控制寄存器,SCON,电源控制寄存器,PCON,辅助寄存器,AUXR,独立波特率发生器寄存器,BRT,唤醒控制寄存器,WAKE_CLKO,中断寄存器,IE,、,IP,、,IPH,。,9,8.2,串行口,1,的相关寄存器,1.串行控制寄存器SCON,地址为98H,可进行位寻址,SM0/FE:寄存器PCON中的SMOD0位为1时,该位用于帧错误检测(FE)。,当检测到停止位无效时,硬件会将该位置1,必须由软件清零,SMOD0位为0时,,SM0、SM1两位一起确定串行口1的工作方式,SM2:,在方式0中,该位必须为0;,在方式2和方式3中,该位为1时,只有接收到的第9位数据RB8位为1时,接收才能有效。,在方式1中,该位为1时,只有正确接收到停止位时,接收才能有效,REN:允许串行接收控制位。,当该位为1时,允许接收信息;,当该位为0时,禁止接收信息。,TB8:发送数据的第9位,RB8:接收数据的第9位,TI:串行口1发送中断请求标志位,RI:串行口1接收中断请求标志位,10,8.2,串行口,1,的相关寄存器,2.电源控制寄存器PCON,地址为87H,SMOD:波特率倍频选择位。,该位置1,,串行口1工作在方式1、2、3时波特率加倍;,该位为0,,各工作方式的波特率不加倍,SMOD0:帧错误检测有效控制位。,该位置1,,SCON寄存器中的SM0/FE位用于FE功能;,该位为0,,SCON寄存器中的SM0/FE位用于方式选择。,11,8.2,串行口,1,的相关寄存器,3.辅助寄存器AUXR,地址为8EH,UART_M0 x6:串行口1方式0的通信速度控制位。,UART_M0 x6=0,,方式0的波特率为系统时钟频率的12分频;,UART_M0 x6=1,,方式0的波特率为fosc/2。,BRTR:独立波特率发生器运行控制位。,BRTR=0,时,不允许独立波特率发生器工作;,BRTR=1,时,允许独立波特率发生器工作,BRTx12:独立波特率发生器计数控制位。,BRTx12=0,时,独立波特率发生器的计数时钟源为系统时钟频率fosc的12分频;,BRTx12=1,,独立波特率发生器的计数时钟源为系统时钟频率。,S1BRS:串行口1的波特率发生器选择位。,S1BRS=0,时,选择定时/计数器T1作为串行口1的波特率发生器;,S1BRS=1,时,选择独立波特率发生器作为串行口1的波特率发生器,12,8.2,串行口,1,的相关寄存器,4.独立波特率发生器寄存器BRT,地址为9CH,独立波特率发生器是专门用于控制串行通信速度的定时器,与定时/计数器T1工作于方式2的情况相似。,BRT用于保存重装时间常数的一个8位寄存器,注意:,串行口2:,只能使用独立波特率发生器控制发送与接收,,串行口1:,既可以选择T1作为波特率发生器,也可以选择独立波特率发生器。,串行口1和串行口2,不能同时使用独立波特率发生器,,13,8.2,串行口,1,的相关寄存器,5.唤醒控制寄存器WAKE_CLKO,地址为8FH,RXD_PIN_IE=0,时,禁止P3.0/RxD引脚的下降沿置位RI,也禁止RxD引脚唤醒掉电模式;,RXD_PIN_IE=1,时,允许P3.0/RxD引脚的下降沿将RI置1,并且RxD引脚的下降沿能够唤醒掉电模式,14,8.3,串行口,1,的工作方式,8.3.1,方式,0,串行口,1,工作在方式,0,,作同步移位寄存器使用,UART_M0 x6:串行口1方式0的通信速度控制位。,UART_M0 x6=0,,方式0的波特率为系统时钟频率的12分频;,UART_M0 x6=1,,方式0的波特率为fosc/2。,15,8.3,串行口,1,的工作方式,8.3.1,方式,0,串行口数据由,RxD引脚输入或输出,,,同步移位脉冲通过,TxD引脚输出,,,发送、接收均为,8位数据,发送过程:,在,TI=0,的条件下,,执行,MOV SBUF,A,指令,启动发送,注意:,发送顺序:,低位在前,高位在后,发送完一帧数据后,由,硬件将发送中断标志位TI置1,,向CPU发出中断请求。,若要再次发送数据,,必须先通过程序将TI位清0,。,16,8.3,串行口,1,的工作方式,8.3.1,方式,0,串行口数据由,RxD引脚输入或输出,,,同步移位脉冲通过,TxD引脚输出,,,发送、接收均为,8位数据,接收过程:,在,RI=0,的条件下,,接收允许控制位,REN置1,时,处于接收状态,接收完一帧数据后,硬件将接收到的数据存入接收缓冲器,SBUF,,并将中断标志位,RI置1,,向CPU发出中断请求,注意:,接收,顺序:,先收到的是低位,后收到的是高位,若要继续接收数据,,必须先通过程序将RI位清0,。,17,8.3,串行口,1,的工作方式,8.3.2,方式,1,8位数据,,低位在前高位在后,发送过程:,在TI为0的条件下,,执行将数据写入SBUF的指令时,启动发送过程。,在内部移位脉冲的控制下,,TxD引脚首先发送起始位、8位数据、停止位,,发送完毕后TI置1,,向CPU发出中断请求,18,8.3,串行口,1,的工作方式,8.3.2,方式,1,接收过程:,在,RI,为,0,、接收允许控制位,REN,被置,1,的条件下,,CPU,处于接收状态。当硬件检测到,RxD,引脚由高电平变为低电平时,开始接收一帧数据,并同步波特率发生器。,19,8.3,串行口,1,的工作方式,8.3.2,方式,1,接收过程:,(1)RI=0,(2)SM2=0或接收到的停止位为1时,硬件自动将接收到的数据装入接收缓冲器SBUF,,同时将停止位写入RB8,,置中断标志位RI为1,向CPU提出中断请求。,若不满足两个条件,,接收到的数据无法装入接收缓冲器SBUF,数据丢失。,注意:,无论满足这两个条件与否,接收控制器将继续检测RxD引脚,接收下一帧数据,所以在接收的过程中,应及时清接收中断标志位RI,以免数据丢失,20,8.3,串行口,1,的工作方式,8.3.3,方式,2,、方式,3,方式2 与方式3唯一的区别,在于方式2的波特率是固定的,而方式3的波特率与波特率发生器有关,方式1与方式3的区别是:,方式1,是8位的串行异步通信、,方式3,是9位串行异步通信,21,8.3,串行口,1,的工作方式,8.3.3,方式,2,、方式,3,发送过程:,将发送中断标志位,TI清0,,并通过位传送指令将,第9位数据写入TB8,中,然后执行,MOV SBUF,A,指令,启动发送过程。一帧数据发送完毕,硬件将发送中断标志位TI置1,22,8.3,串行口,1,的工作方式,8.3.3,方式,2,、方式,3,接收过程:,允许控制位,REN被置1,后处于接收状态。接收到的第9位(而不是停止位)装入到,RB8,位中,注意:,在方式2和方式3中,SM2为1时,只有接收到的第9位数据RB8位为1时,接收才能有效,23,8.3,串行口,1,的工作方式,8.3.4,多机通信,在多机通信中,方式,2,和方式,3,更适合主从通信,主机的,SM2,位清,0,从机的SM2位置1,通信过程举例,(1),主机向从机发送某一从机的地址,发送前将TB8位置1,然后进入接收状态,(2),各从机接收到主机送出的地址信息后,,与本机地址相符时,,表示被选中,将本机地址回发给主机(TB8位为0),执行CLR SM2指令。,未被选中的从机,,SM2位依然为1,接收不到TB8位为0的数据信息。,24,8.3,串行口,1,的工作方式,8.3.4,多机通信,在多机通信中,方式,2,和方式,3,更适合主从通信,主机的,SM2,位清,0,从机的SM2位置1,通信过程举例,(3),主机收到从机回发的地址后,检验是否与主机先前发送的地址一致,若不同,说明发送过程出现错误,再回到第(1)步,,若相同,可以发出指令或数据信息(TB8位为0)。,(4),从机正确地接收到主机所发送到的指令或数据信息后,,回发先前约定好的应答信号给主机,同时将SM2位重新置1,,以便从机能够接收主机再次发送地址信息,本次主机与从机通信过程结束。,理论上,一个主机可以与256个从机通信,,但由于每个单片机引脚的输入阻抗及总线上阻抗的存在,总线上所允许并联从机的数量要受到限制。如果主机与过多的从机连接时,波特率应设置的低一些以减少通信错误,25,8.4,串行口,1,通信中波特率的设置,(,1,)方式,0,辅助寄存器,AUXR,UART_M0 x6=0,时,,波特率是,fosc/12,UART_M0 x6=1,时,,波特率是,fosc/2,26,8.4,串行口,1,通信中波特率的设置,(2)方式2,电源控制寄存器PCON,波特率,=,(,2SMOD/64,),fosc,SMOD=0,时,,波特率,=fosc/64,当,SMOD=1,时,,波特率,=fosc/32,SMOD=0,时,,波特率,=fosc/64,当,SMOD=1,时,,波特率,=fosc/32,27,8.4,串行口,1,通信中波特率的设置,(3)方式1和方式3,波特率,=2,SMOD,(,定时,/,计数器,T1,的溢出率,/32),SMOD=0,时,,波特率,=T1,的溢出率,/32,当SMOD=1时,,波特率=T1的溢出率/16,T1x12=0,时,,T1,的溢出率,=(fosc/12)/(256-THl),T1x12=1,时,,T1,的溢出率,=fosc/(256-TH1),28,8.4,串行口,1,通信中波特率的设置,(3)方式1和方式3,波特率,=2,SMOD,(,独立波特率发生器的溢出率,/32),BRTx12=0,时,,独立波特率发生器的溢出率,=(fosc/,12,)/(256-BRT),BRTx12=1,时,,独立波特率发生器的溢出率,=fosc/(256-BRT),29,8.4,串行口,1,通信中波特率的设置,(3)方式1和方式3,T1x12=0,,,T1,工作在方式,2,时,几种波特率所对应,T1,的重装初值,30,8.5,串行口,2,的相关寄存器,与串行口,2,相关的寄存器有:,1.串行口2的控制寄存器,S2CON,地址为9AH,不能位寻址,2.,辅助寄存器,AUXR波特率加倍控制位S2SMOD,S2SMOD,位为,0,时,,串行口,2,的波特率不加倍,S2SMOD位为1时,,串行口2的波特率加倍,31,8.5,串行口,2,的相关寄存器,与串行口,2,相关的寄存器有:,3.辅助寄存器,AUXR1,4.独立波特率发生器寄存器,BRT,5.,中断寄存器,IE、IE2、IP2、IP2H,S2_P4,位为,0,时,,TxD2,为,P1.3,,,RxD2,为,P1.2,S2_P4位为1时,,TxD2为P4.3,RxD2为P4.2,6.发送缓冲器,S2BUF,与接收缓冲器,S2BUF,共用同一个地址9BH,32,8.6,串行口,2,的工作方式,8.6.1 方式0,当,S2SM0,、,S2SM1,为,00,时,串行口,2,工作在方式,0,波特率=fosc/12,仅有这一种情况,8,位数据低位在前,高位在后,通过,RxD2,引脚接收或发送,数据,TxD2,引脚输出同步移位时钟,33,8.6,串行口,2,的工作方式,8.6.2 方式1,当S2SM0、S2SM1为01时,串行口2工作在方式1,TxD2,引脚发送、,RxD2,引脚接收,一帧数据包含一个起始位、,8,个数据位,和一个停止位,停止位存放在,S2CON,寄存器的,S2RB8,位,34,8.6,串行口,2,的工作方式,8.6.2 方式1,波特率=(2,S2SMOD,/32)独立波特率发生器的溢出率,BRTx12=0,时,,独立波特率发生器的溢出率,=(fosc/,12,)/(256-BRT),BRTx12=1,时,,独立波特率发生器的溢出率,=fosc/(256-BRT),35,8.6,串行口,2,的工作方式,8.6.3 方式2,当S2SM0、S2SM1为10时,串行口2工作在方式2,TxD2,引脚发送、,RxD2,引脚接收,一帧数据包含一个起始位、,9个数据位,和一个停止位,发送时,,第,9,位数据位来自,S2CON,寄存器中的,S2TB8,位,,接收时,,第,9,位数据装入,S2CON,寄存器中的,S2RB8,位,S2SMOD,位为,0,时,,波特率,=fosc/64,S2SMOD位为1时,,波特率=fosc/32,36,8.6,串行口,2,的工作方式,8.6.4 方式3,当S2SM0、S2SM1为11时,串行口2工作在方式3,TxD2,引脚发送、,RxD2,引脚接收,一帧数据包含一个起始位、,9个数据位,和一个停止位,发送时,,第,9,位数据位来自,S2CON,寄存器中的,S2TB8,位,,接收时,,第,9,位数据装入,S2CON,寄存器中的,S2RB8,位,波特率的设定与方式1相同,37,8.7,串行口的应用,1.串行口1的初始化,(,1,),设置,SCON,寄存器中各个相关位,由,SM0,、,SM1,两位确定工作方式,将,TI,、,RI,清,0,,如果需要接收,将,REN,位置,1,;,(,2,),设置合适的波特率,即设置定时,/,计数器,T1,的工作方式、给,TL1,、,TH1,赋初值,启动,T1,工作;使用独立波特率发生器时,给,BRT,赋初值,并初始化,AUXR,寄存器的,BRTR,及,BRTx12,两位;,(,3,),根据需要确定是否需要开放中断及中断优先级;,(,4,),编写相应的中断或查询方式的服务程序。,38,8.7,串行口的应用,2.串行口2的初始化,(,1,),即设置,S2CON,寄存器中的各个相关位的值,由,S2SM0,、,S2SM1,两位确定工作方式,,S2RI,、,S2TI,两位清,0,。如果允许接收,将,S2REN,位置,1,;,(,2,),设置独立波特率发生器。初始化,AUXR,寄存器中的,BRTx12,、,S2SMOD,等位,将初值装入,BRT,寄存器;,(,3,),将,AUXR,中的,BRTR,位置,1,,启动独立波特率发生器工作;,(,4,),根据需要设置中断优先级,开放中断,ES2,、,EA,;,(,5,),编写相应的中断或查询方式的服务程序。,39,【例81】STC12C5A60S2单片机的串行口1与一片8位串入并出的芯片74HC164连接,驱动一组发光二极管,使发光二极管从右至左延时轮流显示。,分析:74HC164是一个串行输入并行输出的移位寄存器,,Q0Q7,是并行输出端,,Dsa、Dsb,为串行输入端。,CP,为时钟输入端。,复位端,,低电平有效,当复位端输入低电平时清除移位寄存器的值,强制所有的输出为低电平,设STC12C5A60S2单片机的系统时钟频率为12MHz,,串行口1工作在方式0。对SCON寄存器赋初值为00H,40,(1)汇编程序:,ORG 0000H,LJMP MAIN,ORG 0100H,MAIN:MOV SP,#0BFH ;初始化堆栈指针,MOV SCON,#00H;串行口1工作在方式0,MOV A,#0FEH ;LED显示码存A寄存器,START:MOV SBUF,A ;启动发送过程,LOOP:JNB TI,LOOP ;判断发送是否完毕,CLR TI ;发送完毕,将TI位清0,ACALL DELAY ;延时,RL A ;发光二极管显示码左移一位,SJMP START,41,DELAY:MOV R7,#0BDH;500ms的延时程序,DL1:MOV R6,#0E6H,DL0:MOV R5,#21H,DJNZ R5,$,DJNZ R6,DL0,DJNZ R7,DL1,RET,END,42,(2)C语言程序:,#include,#include/声明本征函数库,void DELAY();/延时函数,void main(),unsigned char j;,SCON=0 x00;/串行口1工作在方式0,j=0 xFE;/LED显示码,for(;),SBUF=j;/启动发送过程,while(!TI);/等待发送完毕,TI=0;,DELAY();/延时500ms,j=_crol_(j,1);/循环左移一位,43,void DELAY()/,延时,500ms,函数,unsigned char a,b,c;,for(c=189;c0;c-),for(b=230;b0;b-),for(a=33;a0;a-);,44,【,例,8,2】,利用,STC12C5A60S2,单片机的串行口,1,外接一片,8,位的并入串出芯片,74HC165,,用于扩展并行输入,如图所示。,分析:74HC165是一种并入串出的芯片,其中D0D7为并行数据输入端,DS为串行数据输入端,Q7为串行输出端,为串行互补输出端。,当并行输入允许引脚 输入为低时,,从D0至D7引脚并行输入的数据被输入到内部移位寄存器内,,而当 为高时,,并行输入禁止,移位寄存器的数据在CP引脚输入的时钟脉冲上升沿的控制下,向右移动一位DSQ0 Q1 Q7,Q7的状态出现在第9引脚上。,设串行口,1,工作在方式,0,,,SCON,寄存器的内容为,00H,。,45,(1)汇编程序段如下:,MOV SCON,#00000000B,CLR P1.7 ;并行输入允许,NOP;等待引脚状态稳定,NOP,NOP,NOP,NOP,NOP,SETB P1.7;禁止并行输入,NOP;等待引脚状态稳定,NOP,NOP,NOP,NOP,NOP,CLR RI;清除中断标志RI,SETB REN;允许接收,LOOP:JNB RI,LOOP;等待,CLR RI,MOV A,SBUF,46,(2)C语言程序,#include,#include,sbit P1_7=P17;,void main(),unsigned char temp;,SCON=0 x00;,P1_7=0,;/并行输入允许,_nop_();/等待引脚状态稳定,_nop_();_nop_();_nop_();,_nop_();_nop_();,P1_7=1,;/并行输入禁止,_nop_();_nop_();_nop_();,_nop_();_nop_();_nop_();,RI=0;/,清除接收中断标志,RI,REN=1;/,允许接收,while(!RI),;,/,等待接收数据,RI=0;/,清除接收中断标志,RI,temp=SBUF;/,读入数据,while,(,1,);,47,【,例,8,3】,在图,8,10,所示的甲、乙两机间的串行通信中,单片机系统的时钟频率为,11.0592MHz,,要求波特率为,1200bps,,编程实现将甲机片内的,30H,3FH,单元的数据传送到乙机片内,40H,4FH,单元中。,(,1,)汇编子程序:,分析:甲、乙两机都选择串行口,1,工作在,方式,3,,,9,位异步通信,方式,,TB8,用作奇偶校验位,,甲机串口控制寄存器,SCON,的初值为,0C0H,,乙机的控制字,0D0H,。,定时/计数器T1工作在方式2作为波特率发生器,TMOD为20H;,波特率,2,SMOD,(定时/计数器T1的溢出率)/32,,T1的溢出率,=(波特率 32)/2,SMOD,,,T1的重装初值,=256(fosc/12)2,SMOD,/(波特率32),=256(11059200/12)/(120032)=232=E8H,甲机的发送子程序:,48,TRA_UART:,MOV TMOD,#20H ;T1工作在方式2,ANL AUXR,#0BFH;T1计数工作在系统时钟的12分频,MOV TL1,#0E8H ;给T1的低8位赋初值,MOV TH1,#0E8H ;给T1的高8位赋初值,ANL PCON,#7FH ;波特率不加倍,MOV SCON,#0C0H;串行口1工作在方式3,MOV R0,#30H ;R0作为片内RAM指针,MOV R7,#10H ;R7作为发送计数器,SETB TR1,;波特率发生器开始工作,LOOP:MOV A,R0 ;读取片内30H3FH单元的内容,MOV C,P,MOV TB8,C ;将奇偶校验位写入TB8,MOV SBUF,A ;启动发送过程,WAIT:JNB TI,WAIT ;等待发送完毕,CLR TI ;发送完毕,将TI清0,INC R0 ;指向下一个单元地址,DJNZ R7,LOOP;如果数据未发送完,将继续发送,RET,49,乙机接收子程序:,RES_UART:MOV TMOD,#20H;T1的初始化,MOV TL1,#0E8H,MOV TH1,#0E8H,ANL AUXR,#0BFH;系统时钟的12分频,ANL PCON,#7FH;波特率不加倍,MOV SCON,#0D0H;方式3,且允许接收,MOV R0,#40H ;R0作为片内RAM指针,MOV R7,#10H ;R7作为计数器,SETB TR1 ;波特率发生器开始工作,LOOP:NOP,WAIT:JNB RI,WAIT,CLR RI,MOV A,SBUF;,50,;P与RB8位异或,出错时跳转,,,MOV C,P,ANL C,/RB8,MOV F0,C,MOV C,RB8,ANL C,/P,ORL C,F0,JC ERROR,MOV R0,A;数据正确,存放进40H开始的单元,INC R0 ;R0指向下一个单元,DJNZ R7,LOOP;数据未接收完,则继续,RET,ERROR:;错误处理,此处略,RET,51,(,2,),C,语言程序:,分析:为了保持通信的通畅与准确,通信中做如下约定:,通信开始时,甲机(主机)首先发送乙机(从机)的地址0AAH,并且TB8位为1,,乙机接收后与自己的地址比较,回发地址0AAH,并将自己的SM2位清0。,甲机收到0AAH后,说明地址发送正确开始发送16个字节的数据。数据缓冲区为数组buf,数据发送完成后发送校验和的低字节。,乙机接收到数据后,存入乙机的缓冲区buf中,并用接收的数据产生校验和与接收的校验和相比较,如相同,乙机发送00H,回答接收正确;如不同,则发送0FFH,请求甲机重发。,根据以上约定,利用串行口2的工作方式3,实现甲机作主机,乙机作从机的通信方式。由于甲、乙两机都要发送和接收信息,所以甲、乙两机的串口控制寄存器的S2REN位都应该为1,方式控制字都是0D0H。,52,甲机的发送程序:,#include STC12C5A.h,unsigned char idata buf16;/,定义,16,字节的缓冲区,unsigned char pf;/,校验和的低字节,void main(),unsigned char i,,,j;,S2CON=0 xD8;/,串行口,2,的初始化,,S2TB8,位为,1,BRT=0 xE8,;,/,独立波特率发生器寄存器装入初值,AUXR=AUXR|0 x10,;,/,独立波特率发生器开始工作,53,for,(;),do,S2BUF=0 xAA;/发送乙机地址,do,j=S2CON;,while (j/等待发送完毕,S2CON=(S2CON /TI位清0,do,j=S2CON;,while(j /等待接收应答信号,S2CON=(S2CON /RI位清0,while(S2BUF0 xAA)!=0);/如果地址有误;继续联络,54,do,pf=0;/校验和变量赋初值0,S2CON=(S2CON /S2TB8位写入0,for (i=0;i16;i+)/,发送,16,个字节的数据,S2BUF=bufi;/,发送数据,pf+=bufi;/,求校验和的低,8,位字节,do,j=S2CON;,while (j/,等待发送完毕,S2CON=(S2CON,55,S2BUF=pf;/,发送校验和的低,8,位字节,do,j=S2CON;,while (j/,等待发送完毕,S2CON=(S2CON /TI,位清,0,do,j=S2CON;,while (j /,等待接收应答信号,S2CON=(S2CON/RI,位清,0,while(S2BUF!=0 x00)break;/收到正确应答,退出循环,/否则再重发,while,(,1,);,56,8.8 RS-232,串行标准,在实际应用系统中,通常需要,单片机,进行数据采集,并,将采集的数据,以串行通信方式,传送给计算机,,或,计算机,以串行通信方式,向单片机传送指令,,如扫描仪、打印机等。,因通信时(传输电缆线上有干扰)信号要衰减,所以常采用,RS,232,标准接口,拉开,“,0,”,和,“,1,”,的电压档次,以免信息出错。,数据传输速率,020000bps,TTL,正逻辑:,“,0”,:,0 2.4V,;,“,1”,:,3.6V+5V,;,高阻:,2.4V3.6V,。,TTL,电平直接传输距,离一般不超过,1.5,米。,RS232,负逻辑(,EIA,电平):,“,0”,:,+5V+15V,;,“,1”,:,-5V-15V,。,最大传输信息的长度为,15,米。,57,能够适应,RS,232,通信协议的芯片有很多,下面以,MAX,232,为例介绍各引脚的功能,16,引脚是内部电源变换电路部分与外部电容连接端,功能是产生,+12V,和,-12V,两个电源,提供给,RS,232,内部串行口的电平转换电路,单片机输出的,TTL,电平数据从,T1IN,、,T2IN,输入,转换成,RS,232,电平数据从,T1OUT,、,T2OUT,输出到总线。,总线上的,RS,232,电平数据从,R1IN,、,R2IN,输入后转换成,TTL,电平数据再从,R1OUT,、,R2OUT,输出送给单片机。,58,完整的,RS,232,接口由主信道、辅信道共,25,根连线组成,用,25,芯,插座实现连接,但在实际应用中有很多信号线用不到,常采用,9,芯,插座,信号引脚含义如图所示。,当设备间进行串行通信联络时,只需要,TxD,、,RxD,、,GND,三根线实现串行通信,其余的联络信号端可以悬空。,TxD,:,串行数据发送引脚,作为输出,RxD,:,串行数据接收引脚,作为输入,GND,:,接地信号,59,RS,232,的典型应用电路,60,8.9 RS-485,串行接口,RS,232,传输距离有限,抗干扰性弱。,RS,485,标准接,口,能够很好的解决上述问题。,RS,485,采用电流驱动,接口处的电平比,RS,232,电平低,不易损坏接口处芯片,且与,TTL,电平兼容;,传输的最大速率为,10Mbps,由于采用了差分驱动器,提高了抗干扰能力,传输距离可达,1200m,。,RS232,负逻辑(,EIA,电平):,“,0”,:,+5V+15V,;,“,1”,:,-5V-15V,。,最大传输信息的长度为,15,米。,RS485,差分信号负逻辑:,“,0”,:,-6V -2V,;,“,1”,:,+,2V+6V,。,最大传输信息的长度为,1200,米。,61,以,MAX,485,为例介绍其功能,RO,:,接收器的输出端。若,A,引脚的电压大于,B,引脚的电压,200mV,时,,RO,为高电平,若,A,引脚的电平小于,B,引脚的电平,200 mV,时,,RO,为低电平。,/RE,:,接收器输出使能端。当,为低电平时,,RO,才有效;当,为高电平时,,RO,处于高阻态。,DI,:,发送器输入端。,DE,:,发送器输出使能端。当,DE,为高电平时,可以正常发送。在接收时,应将,DE,拉低,使,DI,输出驱动器的两输出端呈现高阻态,不影响接收。,A,:,同向接收器输入和同向驱动器输出端。,B,:,反,向接收器输入和反向驱动器输出端。,62,在发送时应将,DE,拉高,,/RE,拉低,接收时应将,DE,、,/RE,都拉低。,RS,485,的总线可以采用双绞线传输信号,,Rt,为终端电阻,,可以吸收空间电磁波的干扰,标准值为,120,。,RS,485,典型的通信电路如图所示,63,8.10 SPI,串行接口概述,当前有很多类器件(如存储器、,A/D,转换器、,LCD,驱动器等)具有,SPI,通信接口;,STC12C5A60S2,等系列单片机为了满足与这些类别器件通信的需要,内部集成了,SPI,接口电路;,STC12C5A60S2,单片机的,SPI,接口是一种,全双工同步传输的高速通信总线,,有,主模式,和,从模式,两种工作方式;,被设置为,主模式时,,可以提供给从机的,最高时钟频率为,f,osc,/4,。,64,8.10.1 SPI,接口电路,STC12C5A60S2,单片机的,SPI,接口电路如图所示。,MOSI,:,SPI,同步串行接口的主机的输出和从机的输入引脚,用于实现主机到从机的串行数据传输。在该线上,从机需配置为仅为输入模式,作为传输数据的入口。根据,SPI,通信协议,主机在时钟信号的前半周期通过该线输出数据,从机在时钟信号的控制下获取数据。,MISO,:,SPI,同步串行接口的主机的输入和从机的输出引脚,用于实现从机到主机的数据传输。在该线上,主机配置成输入模式,作为传输数据的入口。根据,SPI,通信协议,当主机与多个从机中的某一从机通信时,其他从机总线被禁止,被禁止通信从机的,MISO,引脚为高阻状态。,SCLK,:,串行时钟的输入、输出信号。,SCLK,时钟用以控制主机和从机同步的时钟信号,控制主机和从机之间在,MOSI,和,MISO,线上的串行数据传输。当主机启动一次数据传输时,自动产生,8,个,SCLK,时钟周期信号给从机。在,SCLK,的每个上升沿或下降沿处移出一位数据。所以,,主机启动一次可以连续传输一个字节的数据,。,SCLK,信号在主模式时为输出,在从模式时为输入。,/SS,:,从机选择信号。主机通过控制,引脚的电平来选择处于多从机中的某一从机,主机的,引脚(,P1.4,)可以作为,I/O,口使用,在从机模式下,无论是发送还是接收信息,,引脚必须处于低电平。,在只有,一主一从,的情况下,,SPI,接口可以由,3,根线构成,从机的,/SS,引脚直接接地。,65,8.10.2 SPI,串行通信的特殊功能寄存器,1.,控制寄存器,SPCTL,(字节地址为,0CEH,),复位后的值为,00000100B,;,SSIG,:,/SS,引脚忽略位。,SSIG=1,时,由,MSTR,位确定器件是主机还是从机;,SSIG=0,时,,/SS,引脚与,MSTR,位共同确定器件是主机还是从机。,SPEN,:,SPI,串行通信接口使能位。,SPEN=1,,,SPI,串行通信功能有效;,SPEN=0,SPI,通信功能被禁止,此时,所有,SPI,串行通信引脚都可作为,I/O,口或其他功能使用。,DORD,:,设定,SPI,数据发送和接收的位顺序。,DORD=1,时,数据字的最高位(,D7,)最先发送及接收;,DORD=0,时,数据字的最低位,(D0),最先发送及接收。,MSTR,:,主,/,从模式选择位。该位置,1,时,被选择为主机模式;该位置,0,时,被选择为从机模式。,CPOL,:,SPI,时钟极性选择位。该位为,1,时,,SCLK,空闲时为高电平,,SCLK,的时钟前沿为下降沿而后沿为上升沿;该位为,0,时,,SCLK,空闲时为低电平,,SCLK,的时钟前沿为上升沿而后沿为下降沿。,CPHA,:,SPI,时钟相位的选择控制位。该位为,1,时,从机输出给主机的首位数据在,引脚的下降沿时被驱动输出,主机输出给从机的首位数据由写入数据寄存器,SPDAT,的指令控制输出,在,SCLK,的时钟后沿改变主、从机的位数据输出,由时钟前沿控制采样输入;该位为,0,时,位数据在,SCLK,的时钟前沿控制输出,在时钟后沿采样输入。在,CPHA,位为,1,时,,SSIG,位必须为,0,才能有效。,SPR1,、,SPR0,:,SPI,时钟速率选择控制位。,66,8.10.2 SPI,串行通信的特殊功能寄存器,2.,状态寄存器,SPSTAT,(字节地址为,0CDH,),复位后的值为,00B,;,SPIF,:,SPI,传输完成标志位。当一个字节的数据串行输出完成时,硬件电路将,SPIF,位置,1,。此时,如果,SPI,中断被允许,则产生中断。当单片机处于主模式且,SSIG=0,时,如果,/ss,引脚出现由高变低的下降沿,硬件也将,SPIF,位置,1,,表示模式改变,由主模式强行改变为从模式。在,SPIF,标志位为,1,的情况下,只有通过指令向其写入,1,才能将其清零。,WCOL,:,SPI,写冲突标志位。当数据正在传输过程中,如果又向数据寄存器,SPDAT,执行写操作,,WCOL,位将被置位。只有通过指令对,WCOL,标志位写入,1,才能清零。,67,8.10.2 SPI,串行通信的特殊功能寄存器,3.,数据寄存器,SPDAT,(字节地址为,0CFH,),复位后的值为,00000000B,;,SPI,串行通信的发送数据寄存器,SPDAT,与接收数据寄存器,SPDAT,属于两个寄存器,地址都是,CFH,,通过读、写指令加以区分。,4.,辅助功能寄存器,AUXR1,(字节地址为,0A2H,),当,SPI_P4,位为,0,时,,SPI,在,P1,口;当,SPI_P4,位为,1,时,,SPI,从,P1,口切换到,P4,口:,SCLK,从,P1.7,切换到,P4.3,引脚、,MISO,从,P1.6,切换到,P4.2,引脚、,MOSI,从,P1.5,切换到,P4.1,引脚、,从,P1.4,切换到,P4.0,引脚,。,68,8.11 SPI,串行数据通信,当单片机之间进行,SPI,串行通信时,,主机可以给从机发送数据,从机也可以给主机发送数据,主机给从机发送数据是将发送数据寄存器,SPDAT,中的数据经,MOSI,引脚在,SCLK,的控制之下,一位一位的移出;而从机在,SCLK,的控制之下,将主机移出的数据一位一位的移入从机的移位数据寄存器。从机的发送数据寄存器中的数据在,SCLK,的控制之下一位一位的从,MISO,引脚送出,输入给主机的移位寄存器。即,一个,8,位字节数据从输出引脚移出的同时,另一个,8,位字节数据从输入引脚输入,一条串行时钟线上的时钟信号控制着两条串行数据线上的信息移位与采样同步进行,。,SPI,的核心是一个,8,位移位寄存器和数据缓冲器,数据可以同时发送和接收。,STC12C5A60S2,单片机之间的,SPI,接口的,数据通信方式有,3,种,:,单主单从,、,互为主从,、,单主多从,。,69,8.11.1,单主单从通信方式,在单主单从的通信方式中,主机将,SPCTL,寄存器中的,SSIG,及,MSTR,位置,1,,选择成主机模式,从机将,SSIG,及,MSTR,位清,0,,选择成从机模式,此时主机可使用任何一个,I/O,引脚来控制从
展开阅读全文