ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:261.42KB ,
资源ID:11088577      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11088577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第九章 可编程计数器8253.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

第九章 可编程计数器8253.docx

1、第九章 可编程计数器8253第九章 可编程定时计数器8253一 概述 定时器和计数器定时控制在微机系统中极为重要 定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间隔; 计数电路如果记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为计数器。 定时功能的实现方法 软件延时利用微处理器执行一个延时程序段实现; 不可编程的硬件定时采用分频器、单稳电路或简易定时电路控制定时时间; 可编程的硬件定时软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路。二 8253定时计数器的内部结构和外部特性 概述 3个独立的16

2、位计数器通道; 每个计数器有6种工作方式; 按二进制或十进制(BCD码)计数。 内部结构内部结构图 数据总线缓冲器 是8253与CPU DB连接的8位双向三态缓冲器,CPU通过它向8253写方式控制字到控制字寄存器中,写计数初值到计数通道,读取计数通道的当前计数值。 读/写控制逻辑 控制8253内部操作。当 无效,8253的DB处于高阻状态,当 有效, 和A1、A0、 、 组合,对3个计数通道、控制字寄存器进行读/写操作,见下表。 8253读写操作及端口选择表注意:CPU对控制字寄存器只能写,不能读; CPU对计数通道写的是计数初值,读的是当前计数值。 控制字寄存器 8253初始化编程时,CP

3、U写控制字到控制字寄存器,以选择计数通道及相应的工作方式。 数通道02 8253内部包括3个功能完全相同和操作完全独立的计数通道,每个计数通道由16位减法计数器、16位计数初值寄存器和16位计数值锁存器组成。初始化时,向计数通道装入的计数初值,先送到计数初值寄存器中保存,然后送到减法计数器。计数器启动后,减法计数器对CLK的下降沿进行减1计数,在未锁定时把结果送入16位计数值锁存器中。当计数值减到0时,输出OUT信号,一次计数结束。计数初值寄存器的内容,在计数过程中保持不变。计数初值寄存器和计数值锁存器占用一个端口地址(即该计数通道口地址),CPU读取计数通道的当前计数值来自计数值锁存器。 各

4、通道可工作在计数器方式,此时被计数的事件以脉冲方式从CLK输入; 各通道可工作在定时器方式,此时确定频率的时钟脉冲从CLK输入。 计数初值=定时时间CLK周期 各通道的启动、禁止、允许计数与门控信号GATE有关,GATE的作用OUT的输出波形随各通道工作方式不同而不同。 计数器结构示意图计数初值存于预置寄存器;在计数过程中,减法计数器的值不断递减,而预置寄存器中的预置不变;输出锁存器用于写入锁存命令时,锁定当前计数值。 8253的引脚功能 与CPU相连的引脚 D7D0:双向三态DB; :读, :写,低电平有效; :片选; A1A0:片内端口选择。 计数通道引脚 CLK2CLK0:计数脉冲输入;

5、 OUT2OUT0:当计数值减到0时,OUT有输出,输出波形取决于通道工作方式; GATE2GATE0:门控信号输入,是控制计数器工作的一个外部信号,它的作用是用来禁止、允许或启动计数过程的。每个计数通道均有6种不同工作方式,GATE信号的控制作用不同。GATE信号总是在CLK的上升沿被采样。三 8253的工作方式Intel 8253的每个计数通道都有6种工作方式可供选用。这6种工作方式主要有5点不同。一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器

6、是否恢复计数初值并自动重复计数过程不同。上述五点不同,有相互关联,学习时应灵活运用。 方式0计数结束时中断 当写入控制字后,OUT立即变为低电平;启动计数方式:软启动。即仅当GATE为高电平时,在写入计数初值后的第一个CLK下降沿到来时,计数初值寄存器的内容装入到减法计数器中,此后减法计数器对每一个CLK下降沿作减法计数,直到计数结束。在计数过程中,OUT一直维持低电平,直至减法计数器减到0时,OUT变高。见图9.19.3。图9.1 方式0波形图图9.2 方式0时GATE信号的作用图9.3 方式0计数过程中改变计数值具有以下特点: 计数器只计一遍。当计到0时,减法计数器不恢复计数初值,不开始重

7、新计数,且OUT保持高电平。只有重新写入计数初值后,OUT才变低,开始新的计数; 启动计数方式:软启动。 GATE为低电平时,计数暂停,当GATE变高后就接着计数。在计数过程中,GATE的变化不影响OUT的状态。 计数过程中可重新写入计数初值。如果是8位计数初值,在写入新的计数初值后,计数器将按新的计数初值重新开始计数;如果是16位计数初值,在写入第一个字节后,计数器停止计数,在写入第二个字节后,计数器按照新的计数初值开始计数。 8253没有中断控制电路,也没有专用中断请求线。若要中断,则可用OUT的正跳变作为中断请求信号。 方式1可重复触发的单稳态触发器 图9.4 方式1波形图当写入控制字后

8、,OUT立即变高,计数初值写入后,计数器并不开始计数,启动计数方式是硬启动。即要有GATE上升沿触发,在GATE信号上升沿之后的第一个CLK下降沿到来时将计数初值装入减法计数器,OUT立即变低,然后开始减1计数过程。在整个计数过程中,OUT维持低电平,直至计到0,OUT变高。因此OUT输出一个单拍负脉冲。若想再输出一个单拍负脉冲,必须再次用GATE上升沿触发,否则OUT维持高电平。见图9.49.6。图9.5 方式1时GATE信号的作用图9.6 方式1在计数过程中改变计数值具有以下特点: 启动计数方式是硬启动。 若初值为N,则OUT输出的单拍负脉冲低电平宽度为N个CLK周期; 当计到0后,可再次

9、用GATE触动启动计数器计数,输出一个同样宽度的单负脉冲,而不必再次送计数初值; 在计数过程中,若计数器没有减到0,又有GATE上升沿触发,则OUT仍为低,计数器重新计数,直至计到0,OUT变高,其作用使OUT输出的单负脉冲宽度加宽。 在计数过程中,若写入一个新的计数初值,这时计数过程不受影响,要等GATE再次触发后,才按新的计数初值重新开始计数。 方式2频率发生器 当写入控制字后,OUT立即变高,写入计数初值后,如果GATE为高,则计数器立即开始计数。在计数过程中,OUT维持高电平,对每个计数脉冲作减1计数直至计到1时,OUT由高变低,经过一个CLK周期,OUT恢复为高,若GATE仍为高,计

10、数器又开始重新计数。见图9.7。图9.7 方式2波形图具有以下特点: 启动计数方式是硬启动或软启动。 能够连续工作。若CLK为一定频率的时钟脉冲,计数初值为N,只要保持GATE为高电平,则OUT输出波形的周期为N个CLK周期,其中高电平宽度为N-1个CLK周期,低电平宽度为1个CLK周期,见图9.7。 若在计数过程中,GATE变为低电平,则计数器立即停止计数。在GATE变为高后的下一个CLK使减1计数器恢复计数初值,重新开始计数。 在计数期间,如果向计数器写入新的计数初值,这对正在进行的计数过程没有影响,但在计到1输出一个CLK宽度的负脉冲后,计数器将按新的计数初值开始计数。 方式3方波发生器

11、 与方式2基本相同,也具有自动装入计数初值的能力,OUT输出波形也是周期性的,唯一不同的是OUT输出波形占空比不同。若初值N为偶数,在装入计数初值后,每一个CLK使减法计数器减2,当减到0,一方面OUT输出改变状态,另一方面又重新装入计数初值开始新的计数,OUT输出波形为方波,其重复周期为N个CLK周期;若初值N为奇数,则在装入计数初值后,第一个CLK使减法计数器减1,以后每个CLK使计数器减2,当计到0,OUT输出改变状态,同时重新装入计数初值,这以后第一个CLK使计数器减3,以后每一个CLK使计数器仍减2,直至计到0,OUT恢复高电平,重复上述过程。OUT输出波形重复周期为N个CLK周期,

12、其中高电平宽度为(N+1)/2个CLK周期,低电平宽度为(N-1)/2个CLK周期。见图9.8、9.9。图9.8 方式3计数值为偶数时的波形图图9.9 方式3计数值为奇数时的波形图具有以下特点: 和方式2类似,唯一不同的是OUT输出重复波形占空比不同。 方式4软件触发 当写入控制字后,OUT立即变为高电平,启动计数方式是软启动,启动计数后则计数器开始减1计数,当计到0时,OUT变低,经过一个CLK周期,OUT输出一个宽度为一个CLK周期的负脉冲,见图9.10。图9.10 方式4波形图具有如下特点: 启动计数为软启动; 计数初值一次有效,只有再次输入计数初值,才开始新的计数; 在计数过程中,若G

13、ATE变低,则停止计数,待GATE变高后,不是继续计数,而是恢复计数初值重新计数,GATE不影响OUT; 若在计数过程中,写入一个新的计数初值,对本次计数过程无影响,而是等到计数过程结束,新初值才装入到减法计数器,使下一次计数按新的初值进行。 方式5硬件触发 当写入控制字后,OUT立即变为高电平,启动计数为硬启动,启动计数后,作减1计数,当计到0时,OUT变低,经过一个CLK周期,OUT又变高,停止计数,待到下一次GATE触发,才能再次从初值开始计数。见图9.11。图9.11 方式5波形图具有以下特点: 启动计数为硬启动; 输出波形与方式4相同; 在计数过程中,若有GATE触发,则计数器重新从

14、初值开始计数,但不影响OUT; 在计数过程中,若写入一个新的计数初值,只要没有GATE触发,不影响计数过程。现行计数计到0后,若有GATE触发,则按新的计数初值开始计数。但在计数过程中,若写入一个新的计数初值后,有GATE触发,则立即按新的计数初值重新开始计数。 各种方式下的输出波形四 8253编程 方式控制字写到控制字寄存器。 格式D7D6D5D4D3D2D1D0SC1SC0RL1RL0M2M1M0BCD 说明SC1 SC0:计数器选择,00:计数通道0; 01:计数通道1; 10:计数通道2; 11:非法。 RL1RL0:规定CPU向计数通道写入的计数初值格式或规定CPU读取计数通道锁存器

15、当前计数值格式。 计数器可写入8位数据,也可写入16位数据,而写入的8位数据又可分为两种格式:仅写低8位,则高8位自动置0,或仅写高8位,则低8位自动置0。写入16位数据时,应先写入低8位,后写入高8位。 若RL1 RL0=00,锁存计数器当前值,使锁存器不随计数器值变化而变化; RL1 RL0=01,只读/写低8位数据; RL1 RL0=10,只读/写高8位数据; RL1 RL0=11,读/写16位数据,先读/写低8位,后读/写高8位。 M2M1M0:工作方式选择 若M2M1M0=000,方式0; M2M1M0=001,方式1; M2M1M0=10,方式2; M2M1M0=11,方式3; M

16、2M1M0=100,方式4; M2M1M0=101,方式5。 BCD:BCD=1,计数器按BCD计数,计数初值00009999; BCD=0,计数器按二进制计数,计数初值0000FFFFH。 计数初值为0000时最大,对于BCD计数,0000代表10000; 计数初值为0000时最大,对于二进制计数,0000代表10000H。注意:计数初值必须跟在控制字之后,即先写控制字,后写计数初值。说明:8088中的8253的通道0、1、2和控制字寄存器端口地址为40H、41H、42H、43H。五 8253的初始化编程初始化编程包括如下步骤: 写入通道控制字,规定通道的工作方式 写入计数值,若规定只写低8

17、位,则高8位自动置0,若规定只写高8位,则低8位自动置0。若为16位计数值则分两次写入,先写低8位,后写高8位。例1:设8253的端口地址为:04H07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。控制字为:01010000B=50H初始化程序: MOV AL,50H OUT 07H,AL MOV AL,80H OUT 05H,AL例2:设8253的端口地址为:F8HFBH,若用通道0工作在方式1,按BCD码计数,计数值为5080H,进行初始化编程。控制字为:00110011B=33H初始化程序: MOV AL,33H OUT 0FBH,AL MOV AL,

18、80H OUT 0F8H,AL MOV AL,50H OUT 0F8H,AL例3:设8253的端口地址为:04H07H,若用通道2工作在方式2,按二进制计数,计数值为02F0H,进行初始化编程。控制字为:10110100B=0B4H初始化程序: MOV AL,0B4H OUT 07H,AL MOV AL,0F0H OUT 06H,AL MOV AL,02H OUT 06H,AL六 8253的应用举例 例9. 1 用8253监视一个生产流水线,每通过100个工件。蜂鸣器响6s。频率为1000HZ。 硬件连接:硬件接口示意图如图9.1所示,工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一

19、个脉冲,此脉冲作为8253计数通道0的计数脉冲,当通道0计数满100后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253计数通道1工作,由OUT1连续输出1000HZ的方波,持续6s后停止输出。 控制字设置:通道0计数器工作于方式2,采用BCD计数,因计数初值为100,采用RL1RL010(读/写计数器的高8位),则方式控制字为00100101B。通道1计数器工作于方式3,CLK1接2MHZ时钟,要求产生1000HZ的方波,则计数初值应为200000010002000,采用RL1RL0=10(只读/写高8位),BCD计数,则方式控制字为011001

20、11B。 例9.1图 8253的应用 程序编制:假设8253通道0的地址为40H,通道1的地址为42H,控制口地址为46H。8255A的A口地址为80H。 则主程序为: MOV AL,01H ;置PC0为1 OUT 86H,AL MOV AL,25H ;通道0初始化 OUT 46H,AL MOV AL,01H ;计数初值高8位,低8位自动清零 OUT 40H,AL STI ;开中断 LOP: HLT ;等待中断 JMP LOP 中断服务程序为: MOV AL, 03H ;置PC1为1,使通道1的GATE1置1,启动计数 OUT 86H,AL MOV AL,67H ;通道1初始化 OUT 46H

21、,AL MOV AL,20H ;计数初值高8位,低8位自动清零 OUT 42H,AL CALL DL6s ;延时6s MOV AL,02H ;通道1的GATE1置0,停止计数 OUT 86H,AL ;向8259A发中断结束命令 IRET 例9.2 8253在IBM PC系列机上的应用扬声器控制: 计数器2的输出控制扬声器的发声音调 计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声 扬声器还受控于并行接口(8255芯片) 必须使PB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音 8255A的PC口(62H)76543210 8253计数器2

22、(43H)放大器AND 8255A的PB口(61H)76543210扬声器与系统的连接说明:各计数器的时钟频率均为1.19318MHz模拟电话铃程序如下:CSEG SEGMENT ASSUME CS:CSEGRING PROC FAR PUSH DSXOR AX , AX PUSH AX MOV BP, 8 ;循环计数值,响铃8次AGAIN: MOV CX,30 ;产生600和1500Hz的声音30次NEXT : MOV DX,600 ;频率=600Hz MOV AX, 30 ;时间=30ms MOV BL, 3 ;允许产生声音 CALL SOUND MOV DX, 1500 ;频率=1500

23、Hz MOV AX, 30 ;时间=30ms CALL SOUND LOOP NEXT ;循环 MOV DX, 100 ;频率100Hz MOV BL, 1 ;不允许产生声音 MOV AX, 2000 ;时间2S MOV BL, 1 CALL SOUND DEC BP JNZ AGAIN ;循环8次 RET RING ENDP SOUND PROC PUSH CX PUSH SI MOV SI, DX ;频率送SI MUL DX ;频率时间=周期数 MOV CX, 1000 DIV CX MOV CX, AX ;周期数作为循环计数送CX MOV AL, 10110110B ;将8253计数器2

24、设置为方式3 OUT 43H, AL MOV DX, 0012H ;1193180的低位 MOV AX, 34DCH ;1193180的高位 DIV SI ;1193180/频率=计数值 OUT 42H, AL ;送计数值的低位 MOV AL, AH ;送计数值的高位 OUT 42H, AL IN AL, 61H 读8255A的B口 AND AL, 11111100B ;清掉最低2位 OR AL, BL ;根据BL设置是否产生声音 OUT 61H, AL ZERO: IN AL, 61H ;读8255A的C口 TEST AL, 00100000B;8253计数器2的输出变高? JZ ZERO

25、没有,等待ONE: IN AL, 61H ; TEST AL, 00100000B;8253计数器2的输出变低? JNZ ONE ;没有,等待 LOOP ZERO ;周期数减1,不为0继续 POP SI POP CX RET SOUND ENDP CSEG ENDS END RING 例 9.3 读取8253通道中的计数值8253可用控制命令来读取相应通道的计数值,由于计数值是16位的,而读取的瞬时值,要分两次读取,所以在读取计数值之前,要用锁存命令,将相应通道的计数值锁存在锁存器中,然后分两次读入,先读低字节,后读高字节。当控制字中,D5、D4=00时,控制字的作用是将相应通道的计数值锁存的命令,锁存计数值在读取完成之后,自动解锁。如要读通道1的16位计数器,编程如下:地址40H43H。MOV AL,40H;OUT 43H,AL ;锁存计数值IN AL,41HMOV CL,AL;低八位IN AL,41H;MOV CH,AL;高八位

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2