1 / 47

单片机原理及其应用

单片机原理及其应用. (Principle and Application of Single Chip Microcomputer). 第 1 章 概述 第 2 章 MCS-51 单片机硬件结构 第 3 章 MCS-51 寻址方式和指令系统 第 4 章 MCS-51 汇编程序设计 第 5 章 中断系统 第 6 章 定时器 / 计数器及 串行口 第 7 章 存储器扩展 第 8 章 接口电路扩展 第 9 章 应用举例. 6.1 定时 / 计数器结构特点及控制 6.2 串行通信及其接口. 第 6 章 定时器 / 计数器及串行口.

Download Presentation

单片机原理及其应用

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. 单片机原理及其应用 (Principle and Application of Single Chip Microcomputer)

  2. 第1章 概述 第2章 MCS-51单片机硬件结构 第3章 MCS-51寻址方式和指令系统 第4章 MCS-51汇编程序设计 第5章 中断系统 第6章 定时器/计数器及串行口 第7章 存储器扩展 第8章 接口电路扩展 第9章 应用举例

  3. 6.1 定时/计数器结构特点及控制 6.2 串行通信及其接口 第6章 定时器/计数器及串行口

  4. 6.1 定时/计数器结构特点及控制 定时/计数器是单片机中重要的部件,它的主要功能是产生内部定时和对外部脉冲计数。其核心是一个加1计数器,完成累加计数。 1。对晶振分频计数就形成内部定时功能。 2。通过相应引脚对外部脉冲计数就形成计数功能。 将加1计数器设置为不同的初值和不同的位数,可得到不同的定时间隔,不同大小的计数器。

  5. 6.1.1 定时/计数器结构 6.1.2 定时/计数器控制寄存器 6.1.3 定时/计数器工作方式 6.1.4 定时/计数器常数的计算 6.1.5 定时器/计数器的编程

  6. 定时/计数器简称定时器,8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时或事件计数的功能,用于定时控制、延时、对外部事件计数和检测等场合。定时/计数器简称定时器,8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时或事件计数的功能,用于定时控制、延时、对外部事件计数和检测等场合。 T0由2个特殊功能寄存器TH0、TL0(加1计数器)构成,T1则由TH1和TL1构成。 6.1.1 定时/计数器结构

  7. 6.1.1 定时/计数器结构 • 作计数器用时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,输入脉冲信号从1到0负跳变时,计数器自动加1。确认一个负跳沿需两个机器周期,故计数最高频率为振荡频率的1/24。 • 定时应用时,加1计数器每个机器周期接收一个脉冲。当晶振为12MHz, 定时精度1us

  8. ÷12 振荡器 C/ T=0 TF 加1计数器 中断 X C/ T=1 T 端 X 控制信号 定时/计数器的原理 THx, TLx 图 6‑1 定时/计数器的结构框图

  9. 定时器有2个8位控制寄存器: TMOD和TCON,由软件设置各个定时器的工作方式和控制功能。 6.1.2 定时/计数器的控制寄存器

  10. 13位 16位 自动8位 独立8位 计/定,与INT0(P3.2)无关 计/定,与INT0有关 1.工作方式控制寄存器—TMOD(89H) 图6-2 定时器工作方式寄存器TMOD

  11. 中断设置 中断硬件自动复位, 不用中断软件清零。 中断硬件自动复位, 不用中断软件清零。 2.定时器控制寄存器—TCON(88H) 图6-3 定时器控制寄存器TCON

  12. 定时/计数器有4种工作方式,也就是定时器可构成4种电路结构模式。定时/计数器有4种工作方式,也就是定时器可构成4种电路结构模式。 方式0、1和2,T0和T1的工作方式相同。 方式3,两个定时器的模式不同。 6.1.3 定时/计数器工作方式

  13. 一、 方式0 (13位) 当TMOD的M1M0两位为00时,定时/计数器设定为工作方式0,其逻辑结构如图 6‑4 所示。 图6-4 定时/计数器T1(T0)方式0结构

  14. 二、 方式1 (16位) 当TMOD的M1M0两位为01时,定时/计数器为工作方式1,其逻辑结构如图 6‑5 所示。 图 6‑5 定时/计数器T1(T0)方式1结构

  15. 三、 方式2 (自动8位) 当TMOD的M1M0两位为10时,定时/计数器为工作方式2,其逻辑结构如图 6‑6 所示。 图 6‑6 定时/计数器T1(T0) 方式2 结构

  16. 定时/计数 仅定时 图 6‑7 定时/计数器T0方式3 结构 四、 方式3 (独立8位) 当TMOD的M1M0两位为11时,为工作方式3。只有T0能设为方式3,其逻辑结构如图 6‑7 所示。

  17. T1这时只能工作在无中断的方式0,1,2。计数溢T1这时只能工作在无中断的方式0,1,2。计数溢 出时只能送串行口,一旦设好工作方式T1自动运行。 要停止运行,将T1设为方式3即可。作波特率发生 器,T1常工作在方式2。

  18. 1.计数器初值的计算 (1) 单纯计数,计数值不会溢出。初值 X=0。 (2)预先给定计数值 C, 计满 C 后发中断信号。 设初值为 X, 由计数器工作原理知 X+C=M, X = M - C 式中,M为计数器模值,该值和计数器工作方式 有关。 方式0, M=213=8192; 方式1, M=216=65536; 方式2和方式3, M=28=256。 6.1.4 定时/计数器常数的计算

  19. 2.定时器初值的计算 在定时器模式下,加1计数器对单片机晶振频率的 12分频进行计数。因此,定时器定时时间T的计算公 式: T=(M-X)×T计数 上式也可写成:X=M-(T/T计数) 式中,M为模值,和定时器的工作方式有关;T计数 是单片机振荡周期TCLK的12倍;X为定时器的定时初 值。

  20. 6.1.5 定时器/计数器的编程 1、 初始化程序编程步骤: 1) 确定工作方式--对TMOD赋值; 2) 确定定时/计数初值--直接写入TH0、TL0 或 TH1、TL1; 3) 根据需要开放或关闭定时器/计数器中断--直接对 IE的位(ET0 、ET1)赋值; 4) 启动定时器/计数器工作。软件启动置位TR0或 TR1即可, 硬件启动除了置位TR0、TR1外还要在 /INT0、 /INT1脚引入高电平才能工作。

  21. 2、中断服务程序 保护和恢复现场 时间常数重置 其他工作

  22. 一、方式0、方式1的应用 【例6-1】 选择T1方式0用于定时,在P1.1输出周期为1ms的方波,晶振fosc=6MHZ。 根据题意,只要使P1.1每隔500µs取反一次即可得到1ms方波,因而T1的定时时间为500µs。 将T1设为定时方式0:GATE=0,C/T=0,M1M0=00;T0没使用,可为任意,只要不使其进入方式3即可,一般取0。故TMOD=00H。系统复位后TMOD为0,所以可不必对TMOD置初值。

  23. 下面计算500µs定时,T1的初值: 机器周期 T计数=12/fosc=12/(6×106 )=2µs 设初值为X,则: (213-X)×2×10-6 s =500×10-6 s X=7942D=11111000 00110B=1F06H 因为在作13位计数器用时,TL1高3位未用,应 写0,X的低5位装入TL1的低5位,所以TL1=06H; X的高8位应装入TH1,所以TH1=F8H。 11111000 000 00110B=F8 06H X=65286D=FF06H 方式1时,时间常数?

  24. [例6-2] (6-2) 编写用T0产生1秒定时的程序。 (fosc=6MHz) (1)工作方式确定 硬件定时: 方式0最大定时 16.384 ms 方式1最大定时 131.072 ms,方式2最大定时 512 us 必须加上软件计数才能产生1秒定时。选方式1,每100ms中断一次, 对其计数10次得1秒定时。 (2)定时器初值 机器周期 T计数=12/fosc=12/(6×106 )=2µs 设初值为X 则: (216-X)×2×10-6 s =100×10-3 s X=15536D=3CB0H (3)程序设计 用B作软件计数器。T0为定时方式1:GATE=0, C/T=0,M1M0=01;T1没使用。 TMOD = 01H

  25. ORG 0 RESET: LJMP MAIN ORG 000BH ; T0中断入口 LJMP IT0P ORG 1000H MAIN: MOV SP, #60H ;设堆栈指针 MOV B, #10 ;软计数器初值 MOV TMOD, #01H ;T0方式1 MOV TL0, #0B0H MOV TH0, #3CH SETB ET0 ;T0 允中 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP $

  26. T0中断服务程序 IT0P: MOV TL0, #0B0H MOV TH0, #3CH DJNZ B, LOOP CPL P1.5 ; 1秒时间到,翻转P1.5 LOOP: RETI

  27. 二、 方式2的应用 【例6-3】(6-3) T0(P3.4)引脚发生负跳变时(扩展外中断),从P1.0引脚输出周期为1ms的方波。 (fosc= 6MHz) (1)工作方式选择 产生1ms的方波只要T1每 500us中断一次,在中断服 务程序中对P1.0取反即可。 如何检测T0(P3.4)引脚发 生负跳变?将T0设定为只计一个 数就产生中断,以F0=1表示发生了中断。 (2)初值计算 计数器初值:0FFFFH 定时器初值:(28-X)×2×10-6 s = 500×10-6 , X=6

  28. (3)程序设计 ORG 0 RESET: LJMP MAIN ORG 000BH LJMP IT0P ; 转T0中断服务程序 ORG 001BH LJMP IT1P ; 转T1中断服务程序 ORG 0100H MAIN: MOV SP, #60H SETB P3.4 ACALL PT0M2 ;T0,T1初始化 LOOP: MOV C, F0 ;查看T0有没发生中断 JNC LOOP ;没有则等待 SETB ET1 ; T1允中 SETB TR1 ;检测到P3.4负跳变,启动T1 SJMP $

  29. PT0M2: MOV TMOD, #25H ; T1定(方式2)T0计数(方式1) MOV TL0, #0FFH MOV TH0, #0FFH SETB ET0 ; T0允中 MOV TL1, #06H MOV TH1, #06H CLR F0 ; 清T0已发生中断标志 SETB EA ;CPU开中断 SETB TR0 ; 启动T0 RET IT0P:: CLR TR0 ;停止T0计数 SETB F0 ;设置T0已发生中断标志 RETI IT1P: CPL P1.0 RETI

  30. 【例6-4】(6-4) 用定时器T1计数,要求每计满100次,将P1.0取反。 (1) 选择工作方式 根据题意,外部计数信号由T1(P3.5) 引脚输入,每跳变一次计数器加1,每输入100个脉冲发生一次中断,在中断服务程序中取反 P1.0。 用方式2计数,初始化后不必再置初值。 (2)初值计算 初值 X=28-100=156D=9CH, TH1=TL1=9CH, (3)程序设计 TMOD=60H

  31. ORG 0 LJMP MAIN ORG 001BH ; T1中断入口 CPL P1.0 RETI ORG 0100H MAIN: MOV TMOD, #60H ;T1计数方式2 MOV TL0,#9CH ;装入定时常数高8位 MOV TH0,#9CH ;装入定时常数低8位 SETB P3.5 MOV IE, #88H;开放CPU, T1中断 SETB TR1 ;启动T1 SJMP $

  32. T0工作在计数模式,计数器初值设定FFH,当T0端子输入负跳脉冲,计数器回零发出中断请求。将T0设为方式2,自动装入计数常数。T0工作在计数模式,计数器初值设定FFH,当T0端子输入负跳脉冲,计数器回零发出中断请求。将T0设为方式2,自动装入计数常数。 ORG 0000H AJMP MAIN ORG 000BH LJMP INTER ORG 100H MAIN: MOV SP, #60H MOV TMOD, #06H ; 方式2,计数 MOV TL0, #0FFH MOV TH0, #0FFH 【例6.5】 用定时/计数器扩展外部中断源(与例6-3类似)

  33. SETB P3.4 SETB TR0 SETB ET0 SETB EA LOOP: ┋ SJMP LOOP ORG 150H INTER: PUSH A PUSH PSW ┋ POP PSW POP A RETI

  34. 三、方式3的应用 将T1作为波特率发生器使用时,T0有时设定在方式3, 获得两个独立的8位定时/计数器(TH0仅能定时)。 【例6-6】(6-5) 某单片机系统 T1工作在方式2,作波特率发生器。现要增加一个外部中断(原有的2个外中断已被占用),控制P1.0输出一个5kHz的方波。(fosc= 12MHz) (1)T0工作方式 TH0定时控制P1.0输出一个5kHz 的方波, 定时100us。TL0计数测 P3.4(T0)的负跳变。 T0需工作在方式3。

  35. (2)初值计算 TL0 初值为0FFH TH0初值 (28-X)×1×10-6 =100×10-6, X= 28-100=156D=9CH (3)程序设计 ORG 0 RESET: LJMP MAIN …… ;转外中断0 ORG 000BH LJMP TL0INT ; 转T0中断服务程序 ORG 001BH LJMP TH0INT ; 转TH0(T1)中断服务程序 …… ;转外中断1 …… ;转串口中断

  36. ORG 100H MAIN: MOV TMOD, #27H ; T0方式3 计数/定时, ; T1方式2定时 MOV TL0, #0FFH ; 计数初值 MOV TH0, #09CH ; 定时初值 MOV TL1, #datal ; 波特率常数 MOV TH1, #datal SETB P3.4 SETB IT0 ;/INT0 下降沿触发 SETB IT1 MOV IE, #9FH ; 允许中断(CPU,T0,T1) SETB TR0 ┆ TL0INT: MOV TL0, #0FFH ; 重装计数初值 SETB TR1 ; 启动TH0定时 RETI TH0INT: MOV TH0, #09CH ; 重装定时初值 CPL P1.0 RETI

  37. 四、脉冲测量 【例6-7】(p.132) 测量脉冲信号宽度 测量原理见图。脉冲加在P3.3, 用GATE1控制T1的定 时。P3.3为低电平期间,启动T1。当P3.3跳至高电平, 定时开始,直到P3.3 再次跳至低电平,停止T1定时。 ORG 0 RESET: AJMP MAIN ORG 100H MAIN: MOV SP, #60H MOV TMOD, #90H ;T1定时,方式1

  38. MOV TL1, #0 MOV TH1, #0 SETB P3.3 LOOP: JB P3.3, LOOP ;等待/INT1变低 SETB TR1 ;启动T1(T1尚未计时) LOOP1: JNB P3.3, LOOP1;等待/INT1变高 LOOP2: JB P3.3, LOOP2 ;等待/INT1变低 CLR TR1 ;停止计时 MOV A,TL1 ;取定时值 计算脉冲 宽度,代 码转换等处理 LOOP3: LCALL DIR ; 调显示程序 AJMP LOOP3

  39. 【例6-8】 用定时/计数器测脉冲信号频率 设计思想:在一个固定时间(闸门时间)内,对外 接的脉冲计数。T0作定时 100ms (fosc=6MHz), T1作 计数。 TMOD=0101 0001B T0设为定时,方式1,定时器初值 T1设为计数,方式1,计数器初值为零 测量结果放在41H, 40H。 用位00H作为测量结束标志:(00H)=1

  40. ORG 0000H LJMP ST ORG 000BH LJMP MSU1 ST: MOV TMOD, #51H ;T0,T1初始化 MOV TL0, #0B0H MOV TH0, #03CH MOV TL1, #00H MOV TH1, #00H SETB P3.5 ; T1引脚输入 JB P3.5, $ ; 等待信号低电平 SETB TR0 SETB TR1 SETB EA SETB ET0 CLR 00H ;清测量结束标志 WAI: JNB 00H, WAI SJMP $

  41. 中断服务程序 ORG 100H MSU1: CLR TR1 ; 停止计数 CLR TR0 ;定时停止 MOV 40H,TL1 ;存测量结果 MOV 41H,TH1 SETB 00H ;置测量结束标志 RETI 若(41H)= 02H, (40H)= 05H,频率是多少?

  42. 设计思想:在信号一个周期TF内用 定时器对系统时钟计数。信号接在 /INT1引脚。在外中断1程序中,设法 在信号第一次下降沿处启动T1计数, 第二次下降沿处停止T1计数。(第一 次中断时,TH1=TL1=0) 设测得的脉冲宽度计数值是m, 则脉 冲周期用下式计算: T1设定成定时方式1,TMOD=10H,定时常数为 零,最长的定时。对系统时钟的计数值放在40H, 41H,程序没有计算测出的脉冲周期。 【例6-9】 用定时/计数器测脉冲信号周期

  43. 主程序 ORG 0000H LJMP ST ORG 0013H LJMP MST ST: MOV TMOD, #10H SETB IT1 ; /INT1下降沿有效 MOV TL1, #0 MOV TH1, #0 CLR F0 ; 清测量结束标志 SETB P3.3 ;/INT1引脚输入 JB P3.3, $ ; 等待信号变低电平 SETB EA SETB EX1 JNB F0, $ ;等待测量结束 SJMP $

  44. 中断服务程序 MST: CJNE TH1, TL1, IEND ;不是第一次中断 CJNE TL1, #00H, IEND ;不是第一次中断 SETB TR1 ;第一次中断,启动计数 RETI IEND: CLR TR1 ;第二次中断,停止计数 SETB F0 ;置测量结束标志 MOV 40H, TL1 ;存结果 MOV 41H, TH1 RETI

  45. 6.1.6 实时时钟设计 1.基本设计思想 获取1秒定时:硬件定时 + 软件计数。T0设定 100ms定时,中断10次即得秒计时。 安排三个单元分别作为时、分、秒单元。 40H: 秒单元 41H: 分单元 42H: 时单元 按照钟表计时方法计时。 2. 程序流程 (1)主程序

  46. (2)中断服务程序

  47. 运行中读定时器/计数器 运行中读定时器/计数器,可能发生读取到错误的 数据。原因在于CPU是分时读TLx和THx的。 解决方法:先读THx, 后读TLx, 再读THx。 若两次读的THx相同,读取的数据正确,否则重复 上述过程,读取的结果就正确了。 RDTIME: MOV A, TH0 MOV R0, TL0 CJNE A, TH0, RDTIME MOV R1, A RET

More Related