1 / 41

第七章 定时与计数技术

第七章 定时与计数技术. 第一节 概 述. 一、定时与计数. 1 、定时 目的: 提供时间基准。. 分类: 内部定时、外部定时。. 外部定时实现: 已知 — 一个固定频率的脉冲,所需定时时长; 参数 — Num= 脉冲频率*所需定时时长; 工具 — 计数器 ( 每过一个脉冲 Num 减一 ) ; 结果 — 计数器 Num 为零时定时时间到。. 2 、计数 目的: 计算给定时间内脉冲个数。 计数与定时本质上是一致的,但复杂一些。. 实现: 已知 — 一个固定频率 (f1) 的脉冲,一个需计数

sirvat
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. 第七章 定时与计数技术

  2. 第一节 概 述 一、定时与计数 1、定时 目的:提供时间基准。 分类:内部定时、外部定时。 外部定时实现: 已知—一个固定频率的脉冲,所需定时时长; 参数—Num=脉冲频率*所需定时时长; 工具—计数器(每过一个脉冲Num减一); 结果—计数器Num为零时定时时间到。

  3. 2、计数 目的:计算给定时间内脉冲个数。 计数与定时本质上是一致的,但复杂一些。 实现:已知—一个固定频率(f1)的脉冲,一个需计数 目标脉冲,所需计数时长(t); 参数—定时初值Num1=f1*t, 计数初值Num2=计数器允许的最大值; 工具—计数器1(到零时控制计数器2停止); 计数器2(连接需计数脉冲); 结果—计数器1的Num1到零时,读计数器2当前计数值Num,计数值=Num2-Num, 需计数脉冲频率=(Num2-Num)/t。

  4. 二、定时方法 1、软件定时 通过软件指令周期方法定时,如执行循环程序。 增加CPU负担,通用性差,一般用于短延时。 2、不可编程硬件定时 采用中小规模IC构成。 不增加CPU负担,成本低,定时值不可改变。 3、可编程硬件定时 采用可编程定时/计数器完成,软件可改变计数值。 可编程定时/计数器:Intel8253/8254等。

  5. 锁存后读出 LSB MSB 16位当前计数值锁存器OL CLK CTRL 16位减1计数器CE OUT GATE 16位计数初值寄存器CR 装入/读出 LSB MSB 三、定时/计数器基本原理 1、内部逻辑 2、工作原理 初始化(工作方式、初值),输入→输出的控制 回15页

  6. 第二节 Intel 8254 8253→8254→82801BA。 一、8254-2基本功能 3个独立的16位定时/计数器(T/C); 每个T/C功能: 可按二、十进制方式计数; 有6种不同的工作方式; 最高频率10MHz; 8253—2MHz,8253-5—5MHz, 8254—8MHz,8254-5—5MHz,8254-2—10MHz, 82801BA—14.31818MHz 有读回状态功能(8253没有)。

  7. 二、8254-2结构与引脚 1、内部逻辑 总线缓冲器[8位R/W]:写工作方式、计数初值, 读当前计数值等。

  8. (1)译码:CS与A1A0: (2)读/写:RD、WR; 2、外部引脚 (3)外部信号:CLK、OUT、GATE。 不同工作方式OUT波形不同

  9. 3、CPU操作功能及命令 I/O端口地址:8254提供4个端口(使用A1A0); 命令:初始化—设置工作方式、写计数器初值; 操 作—重写计数器初值、写锁存信息; 读当前计数值、读当前状态 I/O端口与命令冲突的解决方法: ①特征位—用数据的某几位表示操作的类型; 如:MOV AL,83H MOV AL,03H OUT 63H,AL 与 OUT 63H,AL表示不同操作 ②间接访问—两条命令完成一个操作(不常用)。 如:OUT+IN/OUT命令 回下页

  10. A1 A0 CS RD WR 8254命令关系表: 转上页 回下页 回14页 回15页 回16页 回12页

  11. 工作方式控制字格式 三、8254-2命令及编程 1、设置工作方式命令—写工作方式控制字 端口地址:A1A0=11; 特征位:D7D6=00~10为所选T/C设置工作方式命令, 11为所有T/C读回命令。 读写格式:D5D4=01~11,只写8位时另8位自动清零。 例1:MOV AL,01110100B ;T/C1,先低后高字节 OUT 43H,AL ;方式2,十六进制方式 转上页 回13页 转第2章

  12. 2、写计数初值命令 端口地址:T/C0—A1A0=00,T/C1—A1A0=01, T/C2—A1A0=10; 步骤: (1)每次写入一个字节(8254数据通道为8位); (2)根据工作方式控制字选择的读/写格式,决定计数器初值的高、低字节写入方法。 例2:MOV AL,00H ;假设读写格式为先低后高字节格式 OUT 41H,AL ;BCD方式计数时,则初值=2000 MOV AL,20H ;二进制方式计数时,则初值=2000H OUT 41H,AL 转10页

  13. 3、锁存命令—软件锁存 有两种方法实现锁存当前计数值/状态功能 (1)利用工作方式控制字实现锁存当前计数值功能 端口地址:A1A0=11; 特征位:D7D6=00~10—选择T/C; D5D4=00—锁存功能,01~11--读写格式 功能:只能锁存当前计数值。 例3:MOV AL,01000000B ;锁存T/C1当前计数值 OUT 43H,AL 特点:用工作方式控制字方法不能实现多个计数器的同时锁存。 转11页 回下页 回19页

  14. 读回控制字格式 (2)利用读回命令实现锁存当前计数值/状态功能 端口地址:A1A0=11; 特征位:D7D6=11。 功能:锁存当前计数值—D5D4=01; 锁存当前状态—D5D4=10。 特点:读回控制字方法可同时锁存多个计数器; 8254才支持该功能。 转10页 转上页

  15. 4、读出当前计数值命令 方法:⑴直接读取,一般在硬件锁存后读取; ⑵用工作方式控制字锁存(软件)后读取; ⑶用读回控制字锁存(软件)后读取。 实现:端口地址—A1A0=00~10,对应计数器号; 操作—1~2个读(IN)操作,个数取决于工作方式字的读写格式。 注意:锁存功能在IN操作后自动解锁! 转10页 转5页

  16. 状态字格式 5、读出当前状态命令 方法:用读回控制字锁存(软件)后读取。 实现:端口地址—A1A0=00~10,对应计数器号; 操作—1个读(IN)操作,下图为所读出的状态字格式。 转10页 回20页

  17. 6、T/C初始化编程 (1)设置工作方式控制字(端口地址A1A0=11) (2)设置计数初值(所选T/C端口地址A1A0=00~10) 例4:MOV AL,01110101B;T/C1,先低后高字节,方式2,BCD OUT 43H,AL MOV AL,00H OUT 41H,AL MOV AL,20H OUT 41H,AL ;计数初值为2000 注意:(1)每个准备使用的T/C均要初始化; (2)计数初值设置方法由控制字D5D4位决定; (3)计数初值≤65536。

  18. 7、T/C工作编程—读取当前计数值 (1)硬件锁存后读取当前计数值—直接读取 一般直接读取在硬件方法锁存后使用。 例5:MOV AL,01100101B ;T/C1,只写高字节,方式2,BCD OUT 43H,AL MOV AL,20H OUT 41H,AL ;计数初值为2000 ……… IN AL,41H MOV AH,AL MOV AL,0 ;AX为T/C1当前计数值,低位忽略为0 注意:当初始化采用BCD码时,高和低字节计数值按十进制规则减1(60H减1后,变成59H,而非5FH)。

  19. (2)软件锁存后读取当前计数值—间接方式读取 例6:利用工作方式控制字锁存后读取 MOV AL,01000000B ;锁存T/C1当前计数值 OUT 43H,AL IN AL,41H ;假设T/C1初值只写低字节 MOV AH,0 ;AX为T/C1当前计数值 例7:利用读回命令锁存后读取 MOV AL,11011010B ;锁存T/C0、T/C2当前计数值 OUT 43H,AL IN AL,40H ;假设T/C0先低后高字节写初值 MOV AH,AL IN AL,40H XCHG AH,AL ;AX为T/C0当前计数值 IN AL,42H ;假设T/C2只写低字节写初值 MOV AH,0 ;AX为T/C2当前计数值 转13页

  20. 计数初值 CR CE 写计数初值时 不同工作方式传递时机不同 8、T/C工作编程—读取当前状态 例8:MOV AL,11100100B ;锁存T/C1当前状态值 OUT 43H,AL IN AL,41H ;若AL=00110101,状态是什么? MOV AL,11100010B ;锁存T/C0当前状态值 OUT 43H,AL IN AL,40H ;若AL=00010110,状态是什么? 9、T/C工作编程—重写计数初值 方法:与写T/C计数初值一致。 效果:重写计数初值会影响输出效果; 不同工作方式导致新初值生效时间不同。 转16页

  21. 四、8254-2工作方式 1、方式0—计数结束时中断 特点:一次计数; GATE高允许、下降暂停、低禁止、上升继续计数; WR#写[重写]后下一脉冲下降沿重新计数; OUT在写完时变低、计数值为0时变高(N+1个低)。 回25页

  22. 2、方式1—硬件可重触发单稳 特点:一次计数; GATE上升重新计数,高、下降、低不影响计数; WR#写[重写]在下次计数(重新)时有效; OUT开始计数时变低、计数值为0时变高(N个低)。 与方式0比较:GATE效果不同、OUT宽度不同。 回26页

  23. 3、方式2—频率发生器 特点:多次计数; GATE上升重新、高允许、下降停止、低禁止计数; WR#写[重写]在下次计数时有效; OUT在计数值为1时输出宽度为1个CLK的负脉冲(周期为N)。 回下页

  24. 4、方式3—方波发生器 特点:多次计数; GATE上升重新、高允许、下降停止、低禁止计数; WR#写[重写]在下次计数时有效; OUT开始计数时变高,每个脉冲计数减2(计数初值为奇数时第一CLK减1),计数值为0时反向(周期为N)。 与方式2比较:OUT波形不同。 转上页

  25. 5、方式4—软件触发选通 特点:一次计数; GATE上升重新、高允许、下降停止、低禁止计数; WR#写[重写]后下降沿重新计数; OUT开始计数时变高,在计数值为0时输出1个CLK的负脉冲(总长N+1)。 与方式0比较:GATE上升沿效果、OUT波形不同。 转22页

  26. 6、方式5—硬件触发选通 特点:一次计数; GATE上升重新计数,高、下降、低不影响计数; WR#写[重写]在下次计数时有效; OUT在计数值为0时输出1个CLK负脉冲(总长N+1)。 与方式1比较:OUT波形不同。 转23页

  27. n 0 n 0 n 0 n 0 n 0 n 0 工作方式比较表:

  28. D0~D7 CLK0 GATE0 5MHz OUT0 CLK1 GATE1 OUT1 A1 CLK2 1Hz A0 GATE2 RD OUT2 CS WR 五、8254-2应用举例 1、分频器设计 用8254(地址40H~43H)将5MHz的脉冲变为1Hz脉冲。 思路:初值=fCLK/fOUT=5×106>216,需2个T/C级联,采用方式3产生连续方波脉冲,T/C的GATE统一控制。 MOV AL,00110111B ;T/C0 OUT 43H,AL MOV AL,00H OUT 40H,AL MOV AL,50H OUT 40H,AL ;初值5000 MOV AL,01110111B ;T/C1 OUT 43H,AL MOV AL,00H OUT 41H,AL MOV AL,10H OUT 41H,AL ;初值1000 回下页

  29. D0~D7 CLK0 GATE0 2500个原CLK 0.5ms 2500个原CLK 0.5ms 5MHz OUT0 CLK1 OUT0 1kHz GATE1 OUT1 A1 OUT1 5kHz CLK2 ? A0 GATE2 RD OUT2 0.2ms 1000个原CLK 0.2ms 1000个原CLK CS WR 思考: (1)如何用8254将5MHz的脉冲变为0.2Hz方波? (2)如何用8254将5MHz的脉冲变为先3s后2s脉冲? (3)程序初始化后,CPU执行其它程序,结果如何? (4)上例如下图连接,OUT1结果如何? 转上页

  30. D0~D7 CLK0 TRG GATE0 EOC OUT0 CLK1 信号 GATE1 OUT1 A1 CLK2 fCLK A0 GATE2 RD OUT2 CS WR 2、频率计数器设计 用8254计数外来信号频率fIN(fCLK=1MHz)。 思路:fIN=(N-M)/t。 用T/C0得到M(初值为N),采用方式0; 用T/C1得到t,采用方式1,OUT1连接GATE0; TRG:计数开始控制信号; EOC:计数结束状态信号。 回下页 回33页 回34页

  31. MOV AL,0 ;TRG(D1位)=0,STC(D0位)=0 OUT PIO1,AL MOV AL,01110010B ;T/C1,先低后高字节 OUT 43H,AL MOV AL,10H OUT 41H,AL MOV AL,27H OUT 41H,AL;间隔为10ms MOV AL,00110000B ;T/C0 OUT 43H,AL MOV AL,00H OUT 40H,AL OUT 40H,AL;初值为N=65536 ;STC产生一个脉冲 MOV AL,2 OUT PIO1,AL ;TRG=1,开始计数 S1:IN AL,PIO2;读EOC AND AL,01H CMP AL,01H JNZ S1 ;等到EOC=1 IN AL,40H MOV AH,AL IN AL,40H XCHG AH,AL ;AX为当前计数值M 转上页 回下页

  32. TRG STC CLK0 ≥1 & 信号 GATE1 结果:fIN=(N-M+1)/t=[(65536-AX+1)/10]*1000 Hz 注意:(1)10ms时M应大于0; (2)T/C0在方式0时经过一个CLK后才将初值写到CE中,因此计数结果必须+1。 思考:如何使结束结果不需要+1? ;实现思路: ;在T/C0初值写完后,送初值到CE MOV AL,1 OUT PIO1,AL ;STC(D0位) 0→1 MOV AL,0 OUT PIO1,AL ;STC(D0位) 1→0 ;如此计数结果不需要+1。 转上页 回下页 转31页

  33. CLK0 CLK0 CLK0 GATE0 GATE0 GATE0 OUT0 OUT0 OUT0 CLK1 CLK1 CLK1 GATE1 GATE1 GATE1 OUT1 OUT1 OUT1 综合思考: (1)上例T/C1为方式0时,接线及程序如何改变? (2)采用简化电路,用读回命令的实现方法能否很精确? (3)为得到精确的fIN,需增大时间间隔,在时间间隔内M=0怎么办? (4)分析下图T/C间连接的效果。 两个独立、同步控制T/C 间歇型T/C 分频器 转上页 转31页

  34. f1=1kHz f2=0Hz f1=1kHz f2=64Hz … … … t1=0.5s t2=0.5s t1=1s t2=1s 1个定时周期 1个定时周期 分析:波形的组成 OUT0=0.5Hz … … OUT0=1Hz OUT1=1KHz … … … … OUT1=1KHz OUT2=64Hz 设计:T/C的引脚连接 CLK0 GATE0 OUT0 CLK0 GATE0 OUT0 CLK0 GATE0 OUT0 CLK0 GATE0 OUT0 CLK1 GATE1 OUT1 CLK1 GATE1 OUT1 CLK1 GATE1 OUT1 CLK1 GATE1 OUT1 CLK2 GATE2 OUT2 CLK2 GATE2 OUT2 CLK2 GATE2 OUT2 CLK2 GATE2 OUT2 3、组合波形发生器设计

  35. 4、电子钟显示功能实现 设计思路:   ⑴8254采用方式2,每秒产生一个请求到8259A;   ⑵8259A实现定时中断服务功能;   ⑶中断服务程序实现(简略)电子钟的显示功能。 注意:   ⑴8254与8259A的端口地址不同,如何连接?   ⑵8259A的请求采用哪种方式不遗漏中断请求?   ⑶中断服务程序入口地址的写入与原入口地址的保存/恢复?

  36. 第三节 8254在微机中应用 PC系列机定时系统结构框图 回41页

  37. 一、计数器0—系统定时器 工作方式:3方式,计数初值:65536。 1、系统定时器 OUT0连接到8259A的IRQ0(中断类型号为8)上。 fOUT0=1.1931816MHz/65536=18.2Hz, 即每秒产生18.2次中断用于日时钟计时。 应用:BIOS提供1CH用户定时中断(被08H中断调用)。 2、软盘驱动器马达控制 系统要求:完成软盘操作后2s时关闭软驱马达。 实现:软盘操作完成时,置2s÷54.925ms=37在BOIS的40:40H处,每次08H中断减1,等其为0时关闭马达。

  38. 二、计数器1—动态存储器定时刷新控制 工作方式:2方式,计数初值:18。 OUT1连接到8237的DREQ0上,定时产生负脉冲。 脉冲宽度=1/1.1931816MHz=838ns, 脉冲周期=18/1.1931816MHz=15.08μs, 即:每隔15.08μs产生一个脉冲用于RAM刷新。

  39. 8255的PB口D1位 扬声器 T/C2的OUT2 三、计数器2—扬声器音频发生器 工作方式:3方式,计数初值:由调用程序设置。 连接:OUT2与8255的PB口D1信号“与”后连接到扬声器上,控制扬声器发生频率及时长。 控制: 时长:CPU控制8255的PB口的D1位的电平实现; 频率:CPU控制8254的T/C2的初值。

  40. 533H时频率为896Hz, 计数初值=533H*896/频率 比较dl(10ms)不同即可 计数并比较音符时长 例:教材P198乐曲播放程序。 音符序列: 1 2 3 1 1 2 3 1 3 4 5 3 … 音符频率: 262 294 330 262 262 294 330 262 330 349 392 330 … 音符时长(10ms):10 10 10 10 10 10 10 10 10 10 20 10 … 8254初始化,设置频率(音符) 打开扬声器 取时间,等待10ms通过 等待音符时长通过 关闭扬声器 直到乐曲结束 转37页

More Related