440 likes | 687 Views
4. 串行接口与定时计数器. 一、串行接口及应用. 1. 串行接口的一般概念 单片机与外界进行信息交换称之为 通讯 (Communication) 。 单片机的通讯方式有两种: 并行通讯 : 数据的各位同时发送或接收。 串行通讯 : 数据一位一位顺序发送或接收。参看下图:. 起始位. D 0. D 2. D 3. D 4. D 6. D 7. D 5. D 1. 停止位. 一 . 串行通讯的基本方式. ( 一 ). 异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符间隔不固定,只需字符传送时同步。
E N D
4. 串行接口与定时计数器 一、串行接口及应用 • 1.串行接口的一般概念 • 单片机与外界进行信息交换称之为通讯(Communication)。 • 单片机的通讯方式有两种: • 并行通讯:数据的各位同时发送或接收。 • 串行通讯:数据一位一位顺序发送或接收。参看下图:
起始位 D0 D2 D3 D4 D6 D7 D5 D1 停止位 一.串行通讯的基本方式 (一).异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符间隔不固定,只需字符传送时同步。 异步通讯常用格式:一个字符帧 异步通讯的双方需要两项约定: 1.字符格式 一帧字符位数的规定:数据位,校验位,起始位和停止位。
2.波特率(位/秒)——对传送速率的规定 波特率:每秒钟传送的位数,记为 bps (bit/sec)。 例:要求每秒传送120个字符,每帧为10位。 解: B=120×10=1200波特 每位0.83ms 数据位传输率=120×8=960位/秒
(二)同步通讯: 数据块传递开始要用同步字符来指示,要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
串行通信的校验方法 目的:保证高效而无差错的传送数据。 校验位:可以奇校验、偶校验或没有校验位。 奇偶校验:主要用于对一个字符的传输过程进行校验。 通常把数据位和校验位中1的个数为奇数个称为奇校验。 通常把数据位和校验位中1的个数为偶数个称为偶校验。 异步传输信息冗余较大,例如:1+8+1+2中有效位数只有8位。
如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。(无线电对讲机)如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。(无线电对讲机) 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。(电话) 串行传输中的数据传输方向
一.串行接口控制字 1.数据缓冲器SBUF 发送SBUF和接收SBUF共用一个地址99H 。 1)发送SBUF存放待发送的8位数据,写入SBUF将同时启动发送。 发送指令: MOV SBUF,A 2)接收SBUF存放已接收成功的8位数据,供CPU读取。 接收指令: MOV A,SBUF
2.串行口控制/状态寄存器SCON(98H) SM0,SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。 REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。 TB8发送的第9位数据位,可用作校验位和地址/数据标识位 RB8:接收的第9位数据位或停止位 TI:发送中断标志,发送一帧结束,TI=1,必须软件清零 RI:接收中断标志,接收一帧结束,RI=1,必须软件清零
3.节电控制寄存器PCON SMOD(PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍, SMOD=0,则不加倍。
串行口的工作方式方式0:同步方式(移位寄存器方式)串行口的工作方式方式0:同步方式(移位寄存器方式) 要想移位寄存器工作,需要向其时钟输入端CLK送去移位脉冲,接收一个脉冲便移动一位。该脉冲由TXD提供(移位脉冲),参与发送或接收的数据均出入于RXD端。可用于扩展8位并行输入输出口 输出:将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。 输入:置位允许接收控制位REN=1。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
方式1:波特率可变的10位异步通讯接口 • 发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。 • 输出:串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。 输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。
方式2:固定波特率的11位UART方式 它比方式1增加了一位可程控为1或0的第9位数据。 输出:它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。 输入:在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。且不置位RI。 再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
(4)方式3:异步第9位方式 • 方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
常用波特率 Fosc(MHZ) SMOD TH1初值 19200 11.0592 1 FDH 9600 11.0592 0 FDH 4800 11.0592 0 FAH 2400 11.0592 0 F4h 1200 11.0592 0 E8h • 当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。 • 右表列出了定时器T1工作于方式2常用波特率及初值。
串口的电平转换电路 • RS232 使EIA(Electronics Industries Association)组织推荐的、目前最常用的一种串行通讯接口标准。采用25芯连接器或9芯连接器。 • 常用电平为-12V~+12V • 逻辑“1”为-3V~-25V, • 逻辑“0”为+3V~+25V • TTL与EIA之间需要用接口电路进行转换
为什么需要电平转换电路 • 单片机使用的是TTL电平,单片机的串口输出信号也是如此, • 串行通信中一般使用的是RS232通信协议 • 需要外接接口进行电平匹配
单片机和单片机之间的串行通信也需要电平转换芯片吗?单片机和单片机之间的串行通信也需要电平转换芯片吗? • 对于两个单片机而言,二者都是TTL电平,所以不需要电平转换芯片。
内部时钟脉冲 (定时) K1 K2 计数脉冲 溢出信号 中断 请求 可预置初值计数器 外部输入脉冲 (计数) 计数初值 启动 控制 功能 选择 二.定时/计数器的工作原理 定时/计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值归0或产生溢出,可申请中断。
例:设CTC中为8位加1计数器。按要求选择功能和初值。例:设CTC中为8位加1计数器。按要求选择功能和初值。 1.要求检测到100个脉冲,发中断请求,通知CPU。 选计数功能,计数初值为156 。 2.要求定时每隔100s时间,发一次中断请求。设内部时钟周期1s 选定时功能,计数初值为156 。
3 定时/计数器电路CTC 一.定时/计数器的应用 1.计数功能: 生产线上产品计数。每个产品通过得到一个脉冲信号,计数器记录脉冲个数,当计数值与设定值相等,启动包装机器。 检测转速。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,显示转速。 2.定时功能:用于实时控制,定时采样、定时启动等。当定时时间与设定值相等,执行规定操作。
3-2-1 MCS-51定时/计数器 2个可独立控制的16位定时器/计数器:T0、T1 定时器初始化编程: 1.功能选择(定时/计数) 2.位数选择(8/13/16位) 3.启动方式选择(内部启动/外部启动) 4.启动控制(启动/停止) 5.恢复初值方式(自动重装/软件重装)
T0 T1 一.定时器控制、状态寄存器 1.TMOD定时器方式寄存器(89H) 1)功能选择位C/T: =0,定时功能,计数内部机器周期脉冲; =1,计数功能,计数引脚T0(T1)输入的负脉冲。
3)门控方式选择位GATE: =0,非门控方式(内部启动): TRx=1,启动定时器工作; TRx=0,停止定时器工作。 =1,门控方式(外部启动):TRx=1且引脚INTx=1才启动。 确定定时器工作方式指令:MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#
2.TCON定时器控制/状态寄存器 1)启动控制位TR0、TR1 =0,停止定时器工作 =1,启动定时器工作 例:启动T0: SETB TR0
2)溢出中断标志位TF0、TF1 定时器溢出使TFx=1,引起中断请求,CPU响应Tx中断后,自动清0 TFx。 可用软件检测TFx,必须软件清0。 WAIT:JBC TF0,NEXT;检测T0是否溢出 SJMP WAIT ;未溢出,继续检测 NEXT: …;溢出,TF0清0,处理溢出 3.可预置初值的16位加1计数器TH0、TL0、 TH1、TL1 预置T0初值指令: MOV TH0,#XH MOV TL0,#XL
二.定时器工作方式由方式选择位M1、M0设定 1.方式0 13位定时/计数器。 THx 8位和TLx低5位组成13位加1计数器 计数外部脉冲个数:1~8192(213) 定时时间(T=1s):1s ~8.19ms
2.方式1 16位定时/计数器。 THx8位和TLx8位组成16位加1计数器 计数外部脉冲个数:1~65536(216) 定时时间(T=1s):1s ~ 65536×T= 65.54ms
3.方式2 自动恢复初值8位定时/计数器。TLx为8位加1计数器,THx为8位初值暂存器。 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(T=1s): 256s
4.方式3 T0分成2个8位定时器:TL0定时/计数器和TH0定时器 TL0占用T0控制位:C/T,TR0,GATE; TH0占用T1控制位:TR1,TF1。 T1不能使用方式3工作
5.计算时间常数X(计算初值) 计数功能:X= 2n -计数值 n:8/13/16 定时功能:X= 2n - t/T t:定时时间、T:机器周期
三. MCS-51定时器的应用 定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式 1. 按实际需要选择定时/计数功能 2. 按时间或计数长度选择方式 3. 计算时间常数 初始化编程格式: MOV TMOD,# 方式字;选择方式 MOV THx,#XH;装入Tx时间常数 MOV TLx,#XL (SETB EA ) ;开Tx中断 (SETB ETx ) SETB TRx;启动Tx定时器
4. 溢出处理编程格式: 1)查询方式:先查询定时器溢出标志,再进行溢出处理。 …;定时器初始化 WAIT:JBC TFx,PT ;检测溢出标志 SJMP WAIT PT: MOV THx,#XH ;重装时间常数 MOV TLx,#XL …;溢出处理 SJMP WAIT
2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。 ORG 0000H LJMP MAIN ORG 000BH(001BH);Tx中断入口 LJMP PTS MAIN: …;初始化后执行其他程序 PTS: …;溢出中断服务程序 MOV THx,#XH;重装时间常数 MOV TLx,#XL RETI
2ms 四. 举例 (1)查询方式: ORG 0000h JMP START ORG 1000H START: MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB TR0 LOOP: JBC TF0,PTF0 SJMP LOOP PTF0: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH SJMP LOOP END 由P1.0输出方波信号,周期为2ms, 设fosc=12MHz。 解:每隔1ms改变一次P1.0的输出状态。用T0非门控方式1定时。 计算时间常数:X = 216 - t/T = 216 -1000/1 = FC18H
(2)中断方式 ORG 0000H AJMP MAIN ORG 000BH AJMP PT0INT ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB EA SETB ET0 SETB TR0 HERE: SJMP HERE PT0INT: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH RETI END
编制程序使P1.7驱动LED亮1秒灭1秒地闪烁。 P1.0 设时钟频率为6MHz P1.7 长定时方法:增加一个软件计数器或一个硬件计数器。 硬件方式: T0定时,T1计数 T0的定时跳变信号P1.0的负跳变次数,计满5个跳变为1秒。 T0方式1定时,T1方式2计数 T1计数值为5,初值为#0FBH; 设置T0的定时值为100ms,初值为#3CH; T0溢出后(每100ms), P1.0反转一次 同时P1.0每下跳变一次(反转两次),T1计数一次 累计5次,P1.7反转一次
START: MOV TMOD,#61H;T0方式1定时,T1方式2计数 MOV TL1,#0FBH;差5个负跳变就溢出,同时自动重装 MOV TH1,#0FBH;T1计数值为5 CLR P1.0 SETB TR1;T1开始计数 LOOP1: CPL P1.7 LOOP2 : MOV TL0,#3CH;设置T0的定时值为100ms ,MOV TH0,#0B0H ;每100ms作一次反相跳变 SETB TR0 ;T0开始计数 LOOP3: JBC TF0,LOOP4;T0溢出后(每100ms), P1.0反转一次 SJMP LOOP3;同时P1.0每下跳变一次(反转两次), LOOP4: CPL P1.0;T1计数一次 JBC TF1,LOOP1;累计5次,P1.7反转一次 SJMP LOOP2
START: MOV TMOD,#61H;T0方式1定时,T1方式2计数 • MOV TL1,#0FBH;差5个负跳变就溢出,同时自动重装 • MOV TH1,#0FBH;T1计数值为5 • CLR P1.0 • SETB TR1;T1开始计数 • LOOP1: CPL P1.7 • LOOP2 : MOV TL0,#3CH;T设置0的定时值为100ms , MOV TH0,#0B0H ;每100ms作一次反相跳变 • SETB TR0 ;T0开始计数 • LOOP3: JBC TF0,LOOP4;T0溢出后(每100ms), P1.0反转一次 • SJMP LOOP3;同时P1.0每下跳变一次(反转两次), • LOOP4: CPL P1.0;T1计数一次 • JBC TF1,lOOP1;累计5次,P1.7反转一次 • SJMP LOOP2 • end
INT1 TR1=1 T1启动TR1=0 (门控方式) (T1停止) 例定时器外部引脚T0(T1)用作外部中断信号输入端。 外部负脉冲引起中断请求, 选计数方式,时间常数为FFH。 例:门控方式测量正脉冲宽度 解: INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。
1)设脉宽小于65.5ms 等待查询INT1,正脉冲过后,读出TH1TL1。 START: MOV TMOD,#90H ;T1门控方式(INT1=1启动定时),方式1定时 MOV TL1,#0H;T1清零 MOV TH1,#0H WAIT1: JB P3.3,WAIT1;等待负脉冲的到来 SETB TR1;开始定时 WAIT2 :JNB P3.3,WAIT2 ;等待正脉冲的到来 WAIT3 : JB P3.3,WAIT3;等待负脉冲的到来 CLR TR1;结束定时 MOV R2,TL1 MOV R3,TH1 …
2)设脉宽大于65.5ms,中断方式记录TH1TL1溢出中断次数。2)设脉宽大于65.5ms,中断方式记录TH1TL1溢出中断次数。 SETB TR1 SETB ET1 ;开T1中断 SETB EA WAIT2: JNB P3.3,WAIT2;等待正脉冲到来 WAIT3: JB P3.3,WAIT3;等待正脉冲结束 CLR TR1 ;关闭T1 MOV IE,#00 ;关闭中断 MOV R2,TL1 ;读出T1 MOV R3,TH1 LCALL PPS ;计算脉宽 HERE: SJMP HERE ;其他任务 PRIC: INC R4 ;记录溢出次数 RETI PPS: …;计算脉宽子程序 计算脉宽的子程序的计算式如下: 脉宽t = (R4 ×216 + R3 R2 ) ×T (T为机器周期)