1 / 44

4. 串行接口与定时计数器

4. 串行接口与定时计数器. 一、串行接口及应用. 1. 串行接口的一般概念 单片机与外界进行信息交换称之为 通讯 (Communication) 。 单片机的通讯方式有两种: 并行通讯 : 数据的各位同时发送或接收。 串行通讯 : 数据一位一位顺序发送或接收。参看下图:. 起始位. D 0. D 2. D 3. D 4. D 6. D 7. D 5. D 1. 停止位. 一 . 串行通讯的基本方式. ( 一 ). 异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符间隔不固定,只需字符传送时同步。

solana
Download Presentation

4. 串行接口与定时计数器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4. 串行接口与定时计数器 一、串行接口及应用 • 1.串行接口的一般概念 • 单片机与外界进行信息交换称之为通讯(Communication)。 • 单片机的通讯方式有两种: • 并行通讯:数据的各位同时发送或接收。 • 串行通讯:数据一位一位顺序发送或接收。参看下图:

  2. 起始位 D0 D2 D3 D4 D6 D7 D5 D1 停止位 一.串行通讯的基本方式 (一).异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符间隔不固定,只需字符传送时同步。 异步通讯常用格式:一个字符帧 异步通讯的双方需要两项约定: 1.字符格式 一帧字符位数的规定:数据位,校验位,起始位和停止位。

  3. 2.波特率(位/秒)——对传送速率的规定 波特率:每秒钟传送的位数,记为 bps (bit/sec)。 例:要求每秒传送120个字符,每帧为10位。 解: B=120×10=1200波特 每位0.83ms 数据位传输率=120×8=960位/秒

  4. (二)同步通讯: 数据块传递开始要用同步字符来指示,要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。

  5. 串行通信的校验方法 目的:保证高效而无差错的传送数据。 校验位:可以奇校验、偶校验或没有校验位。 奇偶校验:主要用于对一个字符的传输过程进行校验。 通常把数据位和校验位中1的个数为奇数个称为奇校验。 通常把数据位和校验位中1的个数为偶数个称为偶校验。 异步传输信息冗余较大,例如:1+8+1+2中有效位数只有8位。

  6. 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。(无线电对讲机)如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。(无线电对讲机) 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。(电话) 串行传输中的数据传输方向

  7. 一.串行接口控制字 1.数据缓冲器SBUF 发送SBUF和接收SBUF共用一个地址99H 。 1)发送SBUF存放待发送的8位数据,写入SBUF将同时启动发送。 发送指令: MOV SBUF,A 2)接收SBUF存放已接收成功的8位数据,供CPU读取。 接收指令: MOV A,SBUF

  8. 2.串行口控制/状态寄存器SCON(98H) SM0,SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。 REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。 TB8发送的第9位数据位,可用作校验位和地址/数据标识位 RB8:接收的第9位数据位或停止位 TI:发送中断标志,发送一帧结束,TI=1,必须软件清零 RI:接收中断标志,接收一帧结束,RI=1,必须软件清零

  9. 3.节电控制寄存器PCON SMOD(PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍, SMOD=0,则不加倍。

  10. 串行口的工作方式方式0:同步方式(移位寄存器方式)串行口的工作方式方式0:同步方式(移位寄存器方式) 要想移位寄存器工作,需要向其时钟输入端CLK送去移位脉冲,接收一个脉冲便移动一位。该脉冲由TXD提供(移位脉冲),参与发送或接收的数据均出入于RXD端。可用于扩展8位并行输入输出口 输出:将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。 输入:置位允许接收控制位REN=1。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。

  11. 方式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标志。

  12. 方式2:固定波特率的11位UART方式 它比方式1增加了一位可程控为1或0的第9位数据。 输出:它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。 输入:在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。且不置位RI。 再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。

  13. (4)方式3:异步第9位方式 • 方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。

  14. 常用波特率 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常用波特率及初值。

  15. 串口的电平转换电路 • RS232 使EIA(Electronics Industries Association)组织推荐的、目前最常用的一种串行通讯接口标准。采用25芯连接器或9芯连接器。 • 常用电平为-12V~+12V • 逻辑“1”为-3V~-25V, • 逻辑“0”为+3V~+25V • TTL与EIA之间需要用接口电路进行转换

  16. 为什么需要电平转换电路 • 单片机使用的是TTL电平,单片机的串口输出信号也是如此, • 串行通信中一般使用的是RS232通信协议 • 需要外接接口进行电平匹配

  17. MAX232和单片机串口连接的典型电路

  18. 单片机和单片机之间的串行通信也需要电平转换芯片吗?单片机和单片机之间的串行通信也需要电平转换芯片吗? • 对于两个单片机而言,二者都是TTL电平,所以不需要电平转换芯片。

  19. 内部时钟脉冲 (定时) K1 K2 计数脉冲 溢出信号 中断 请求 可预置初值计数器 外部输入脉冲 (计数) 计数初值 启动 控制 功能 选择 二.定时/计数器的工作原理 定时/计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值归0或产生溢出,可申请中断。

  20. 例:设CTC中为8位加1计数器。按要求选择功能和初值。例:设CTC中为8位加1计数器。按要求选择功能和初值。 1.要求检测到100个脉冲,发中断请求,通知CPU。 选计数功能,计数初值为156 。 2.要求定时每隔100s时间,发一次中断请求。设内部时钟周期1s 选定时功能,计数初值为156 。

  21. 3 定时/计数器电路CTC 一.定时/计数器的应用 1.计数功能: 生产线上产品计数。每个产品通过得到一个脉冲信号,计数器记录脉冲个数,当计数值与设定值相等,启动包装机器。 检测转速。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,显示转速。 2.定时功能:用于实时控制,定时采样、定时启动等。当定时时间与设定值相等,执行规定操作。

  22. 3-2-1 MCS-51定时/计数器 2个可独立控制的16位定时器/计数器:T0、T1 定时器初始化编程: 1.功能选择(定时/计数) 2.位数选择(8/13/16位) 3.启动方式选择(内部启动/外部启动) 4.启动控制(启动/停止) 5.恢复初值方式(自动重装/软件重装)

  23. T0 T1 一.定时器控制、状态寄存器 1.TMOD定时器方式寄存器(89H) 1)功能选择位C/T: =0,定时功能,计数内部机器周期脉冲; =1,计数功能,计数引脚T0(T1)输入的负脉冲。

  24. 2)方式选择位M1、M0:4种工作方式:13/16/8位

  25. 3)门控方式选择位GATE: =0,非门控方式(内部启动): TRx=1,启动定时器工作; TRx=0,停止定时器工作。 =1,门控方式(外部启动):TRx=1且引脚INTx=1才启动。 确定定时器工作方式指令:MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#

  26. 2.TCON定时器控制/状态寄存器 1)启动控制位TR0、TR1 =0,停止定时器工作 =1,启动定时器工作 例:启动T0: SETB TR0

  27. 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

  28. 二.定时器工作方式由方式选择位M1、M0设定 1.方式0 13位定时/计数器。 THx 8位和TLx低5位组成13位加1计数器 计数外部脉冲个数:1~8192(213) 定时时间(T=1s):1s ~8.19ms

  29. 2.方式1 16位定时/计数器。 THx8位和TLx8位组成16位加1计数器 计数外部脉冲个数:1~65536(216) 定时时间(T=1s):1s ~ 65536×T= 65.54ms

  30. 3.方式2 自动恢复初值8位定时/计数器。TLx为8位加1计数器,THx为8位初值暂存器。 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(T=1s): 256s

  31. 4.方式3 T0分成2个8位定时器:TL0定时/计数器和TH0定时器 TL0占用T0控制位:C/T,TR0,GATE; TH0占用T1控制位:TR1,TF1。 T1不能使用方式3工作

  32. 5.计算时间常数X(计算初值) 计数功能:X= 2n -计数值 n:8/13/16 定时功能:X= 2n - t/T t:定时时间、T:机器周期

  33. 三. MCS-51定时器的应用 定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式 1. 按实际需要选择定时/计数功能 2. 按时间或计数长度选择方式 3. 计算时间常数 初始化编程格式: MOV TMOD,# 方式字;选择方式 MOV THx,#XH;装入Tx时间常数 MOV TLx,#XL (SETB EA ) ;开Tx中断 (SETB ETx ) SETB TRx;启动Tx定时器

  34. 4. 溢出处理编程格式: 1)查询方式:先查询定时器溢出标志,再进行溢出处理。 …;定时器初始化 WAIT:JBC TFx,PT ;检测溢出标志 SJMP WAIT PT: MOV THx,#XH ;重装时间常数 MOV TLx,#XL …;溢出处理 SJMP WAIT

  35. 2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。 ORG 0000H LJMP MAIN ORG 000BH(001BH);Tx中断入口 LJMP PTS MAIN: …;初始化后执行其他程序 PTS: …;溢出中断服务程序 MOV THx,#XH;重装时间常数 MOV TLx,#XL RETI

  36. 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

  37. (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

  38. 编制程序使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反转一次

  39. 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

  40. 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

  41. INT1 TR1=1 T1启动TR1=0 (门控方式) (T1停止) 例定时器外部引脚T0(T1)用作外部中断信号输入端。 外部负脉冲引起中断请求, 选计数方式,时间常数为FFH。 例:门控方式测量正脉冲宽度 解: INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。

  42. 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 …

  43. 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为机器周期)

More Related