1 / 38

第八章 可编程定时 / 计数器 8253

第八章 可编程定时 / 计数器 8253. 实现定时或延时控制有三种方法: 软件定时: 即让 CPU 执行一段不完成任何其他功能的程序段,由于执行每条指令都需要时间,则执行一个程序段就需要一定的时间,通过改变指令执行的循环次数来控制定时时间 不可编程硬件定时器: 采用中小规模器件,外接定时元件 —— 电阻和电容构成。

Download Presentation

第八章 可编程定时 / 计数器 8253

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. 第八章 可编程定时/计数器8253 实现定时或延时控制有三种方法: • 软件定时:即让CPU执行一段不完成任何其他功能的程序段,由于执行每条指令都需要时间,则执行一个程序段就需要一定的时间,通过改变指令执行的循环次数来控制定时时间 • 不可编程硬件定时器:采用中小规模器件,外接定时元件——电阻和电容构成。 • 可编程硬件定时器:就是其工作方式、定时值和定时范围可以很容易由软件来确定和改变。计数器一旦开始工作后,CPU就可以去做别的工作了,等计数器计到预定时间,便自动形成一个输出信号,用来向CPU提出中断请求。这种方法不但显著提高了CPU的利用率,而且定时时间由软件设置,使用十分灵活,加上定时时间精确,使用十分广泛。

  2. 可编程定时器/计数器8253 8253可编程定时器/计数器的主要性能: • 有3个独立的16位计数器 • 工作方式可编程控制 • 计数脉冲频率0~2MHz • 可以按二进制或BCD码计数 • 使用单一+5V电源 • 一、8253的内部结构和功能 • 二、8253的引脚功能 • 三、8253的工作方式 • 四、8253应用举例

  3. 0 1 2 一、8253的内部结构和功能 当用8253作外部事件计数器时,在CLK脚上所加的计数脉冲是由外部事件产生的,这些脉冲的间隔可以是不相等的。如果用它作定时器,则CLK引脚上应数入精确的时钟脉冲,这时8253所能实现的定时时间=计数脉冲周期×预置的计数初值 这个八位的三态、双向缓冲器用于将8253与系统总线相连,接收CPU输出的方式控制字或计数初值,发送CPU从计数器读出的计数值。 读写逻辑接收来自系统总线的控制信号,以产生控制整个器件工作的控制信号。 在初始化编程时用于寄存在CPU写入的控制字以决定各通道的工作方式。此寄存器只能写入不能读出。

  4. 二、8253的引脚功能 D7~D0:双向三态数据线,CPU用输入、输 出指令对8253进行读/写操作的信息都经8 位数据总线传送。 CLK0~CLK2:计数输入,要求加在CLK引脚 的时钟脉冲频率不大于2MHz。 GATE0~GATE2:门控输入,当GATE引脚为 低时,禁止计数器工作;只有GATE引脚为 高时,才允许计数器工作 OUT0~OUT2:计数器0~2的输出,其输出 波形取决于工作方式 A1、A0:寻址3个计数器和控制寄存器(三 个计数器的控制寄存器共用一个端口地址) RD、WR和CS:分别为读、写和片选信号, 均为低电平有效

  5. CS RD WR 8253的端口选择

  6. 三、8253的工作方式 1、控制字寄存器 2、工作方式 • 方式0——计数结束中断方式 • 方式1——可重复触发的单稳态触发器 • 方式2——频率发生器(n分频器) • 方式3——方波发生器 • 方式4——软件触发的选通信号发生器 • 方式5——硬件触发的选通信号发生器

  7. 1. 8253控制字寄存器

  8. BCD=1时,采用BCD码计数,写入计数器的初值用BCD码表示,初值范围为0000~9999H,其中0000表示最大值10000,即104。如预制初值n=1200H时,表示一个十进制数1200。BCD=1时,采用BCD码计数,写入计数器的初值用BCD码表示,初值范围为0000~9999H,其中0000表示最大值10000,即104。如预制初值n=1200H时,表示一个十进制数1200。 BCD=0时,采用BCD码计数,写入计数器的初值用二进制数表示,初值范围为0000~FFFFH,其中0000表示最大值65536,即216。如预制初值n=1200H时,表示一个十进制数4608。

  9. (m=5) 5 2 0 4 3 1 A B INTR 方式0:计数结束中断 CLK (n=4) 4 3 1 0 2 GATE OUT n INTR • 方式0的工作特点: • 计数到零后,不能自动恢复计数初值,OUT输出端保持高电平。 • 计数过程中,如果GATE=0,则暂停计数,直到GATE变高后再接着计数。 • 在计数过程中可改变计数值。若是8位计数,写入新的计数值后,计数器按新值开始计数;若是16位计数,写入第一个字节后,计数器停止计数,在写入第二个字节后,按新的初值计数。

  10. 方式1:可重复触发的单稳态触发器 CLK (n=4) (m=5) 4 3 1 0 2 5 5 4 2 1 4 3 3 2 0 GATE 单脉冲宽度 单脉冲宽度 OUT • 方式1的工作特点: • 可重复触发。计数到零后,不用再次送计数值,只要给它触发脉冲,即可产生一个同样宽度的单稳脉冲。 • 计数过程中,若装入新的计数初值,则当前输出不受影响。只有再次触发后,计数才开始按新值输出脉冲宽度。 • 计数过程中,外部的GATE触发沿提前到来,则下一个CLK脉冲下降沿,计数器开始重新计数,这将使输出单稳脉冲比原先设定的计数值加宽了。

  11. 方式2:频率发生器(n分频器) CLK n=4 n=3 0 3 1 0 4 3 3 1 2 4 4 2 3 1 4 2 0 0 3 2 1 GATE OUT 重复周期 • 方式2的工作特点: • 计数器写入控制字和计数初值后,如GATE一直处于高电平,那么,在下一个脉冲开始计数器计数。 • 不用重复置数。计数器能够连续工作,输出OUT是输入CLK的n(初值)分频。 • 计数过程可由GATE信号控制。GATE变低将使计数暂停且OUT立即为高;在GATE变高后的下一个CLK下降沿计数器重新从初值开始计数。 • 计数过程中可改变初值。如果GATE一直处于高电平,则重装计数初值不影响现行计数过程;下一个过程,才按新值计数。

  12. 方式3:方波发生器 CLK n=4 n=5 4 5 4 2 0 0 4 5 4 2 4 4 4 2 0 2 5 2 0 4 0 GATE 0 2 4 OUT 重复周期 重复周期 • 特点: • 当计数初值n为偶数时,每个CLK脉冲使计数值减2,当计到零时,一方面使输出改变状态,另一方面,又重新装入计数值、开始新的计数。当n为奇数时,且OUT为高时,第一个脉冲使计数减1,然后依次减2;当OUT为低时,先使计数减3,然后依次减2。 • GATE=1,允许计数;GATE=0,禁止计数。如果在输出为低期间, GATE=0,输出将立即变高,停止计数;当GATE变高后,计数器将重新装入初值并开始计数。

  13. 方式4:软件触发的选通信号发生器 CLK n=4 0 4 3 1 2 OUT n=4 GATE 0 4 3 1 2 4 OUT • 特点: • 只计数一次 • GATE=1,允许计数;GATE=0,禁止计数。 • 在计数过程中改变计数初值,则按新计数值重新开始计数。如果是二字节数,则在写入第一个字节时停止计数;写入第二个字节后,按新的计数初值开始计数。

  14. CLK GATE 0 4 3 1 2 OUT(n=4) GATE 4 3 4 3 1 0 2 OUT(n=4) 例 方式5:硬件触发的选通信号发生器 • 写入控制字后,输出为高。写入计数初值后并不立即开始计数,而是由GATE信号的脉冲上升沿触发启动。当计数到零后时,输出一个CLK周期宽度的负脉冲,然后输出变高,停止计数。直至下次GATE脉冲的触发才能计数。 • 在计数过程中,外部的GATE触发沿提前到来,则下一个CLK脉冲下降沿,计数器开始重新计数。

  15. 8253工作方式特点: 方式0,在写入控制字后,输出端即变低,计数结束后,输 出端由低变高,常用该输出信号作为中断源。 方式1,用来产生单脉冲。 方式2,用来产生序列负脉冲,每个负脉冲的宽度与CLK脉冲 的周期相同。 方式3,用来产生连续的方波。方式2和方式3都实现对时钟 脉冲进行n分频。 方式4和方式5的波形相同,都在计数器回0后,从OUT端输出 一个负脉冲,其宽度等于一个时钟周期。 方式0、1和4,计数初值装进计数器后,仅一次有效。方式2,3和5,在减1计数到0值后,8253会自动将计数值重装进计数器。

  16. 启动计数器的触发方式 • 软件触发方式:只要GATE信号为高电平,在写入计数初值后的下一个CLK脉冲的下降沿到来时,计数初值从计数初值寄存器送到减1计数器中,启动计数。 • 硬件触发方式:即写入计数初值后,计数器并不开始计数。而是在GATE信号上升沿到来后的第一个CLK下降沿到来时,才将计数初值从计数初值寄存器送到减1计数器中,启动计数。 • 在六种工作方式中属于软件触发方式的有方式0和方式4,属于硬件触 • 发方式的有方式1和方式5。 • 注意:方式2和方式3既可用于软件触发,也可用于硬件触发。具体地讲,在计数过程中,若GATE变为低电平,计数器停止计数。在GATE正跳变后,重新启动计数并从计数初值开始,因此当计数通道用作对外部事件计数时,GATE正跳变可用作对外部事件的同步控制信号

  17. 四、8253应用举例 1. 初始化编程 2. 读取8253的计数值 3. 应用举例

  18. 1. 初始化编程 初始化编程:刚接通电源时,诸如8253之类的可编程外围接口芯片通常都处于未定义状态,在使用之前,必须用程序把他们初始化为所需的特定模式,这个过程称为初始化编程。 初始化步骤: (1)写入控制字 用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。写入控制字还起到复位作用,使输出端out变为规定的初始状态,并使计数器清0 (2)写入计数初值 用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定。初值可以是8位数据,也可以是16位数据。

  19. D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 1 0 0 1 0 二进制计数 先写低8位 计数器0 方式1 再写高8位 例:对计数器0初始化。工作与方式1,按二进制计数,计数值为5080H。 确定控制字: 计数值低8位为80H, 高8位为50H。设端口 地址为2A0H~2A3H, 则初始化程序为: MOV DX,2A3H ;控制端口地址为2A3H MOV AL,32H ;00110010B OUT DX,AL ;送方式控制字到控制寄存器 MOV DX,2A0H ;计数器0端口地址为2A0H MOV AL,80H OUT DX,AL ;先写低8位计数值到计数器 MOV AL,50H OUT DX,AL ;再写高8位计数值到计数器0

  20. 2. 读取8253的计数值 当8253计数值是16位时,CPU要分两次读入,通常做法有两种: (1)利用GATE信号使计数过程暂停 (2)利用命令控制字(SC1 SC0 000000B)将待读计数值锁存至其锁存器,这种方法不能影响计数过程。注意,控制字应写入控制端口。CPU读取此锁存器后,锁存自动解除。 例:读取计数器0的 16位计数值,采用锁存器锁存方式,其程序为: MOV AL,00H MOV DX,2A3H OUT DX,AL MOV DX,2A0H IN AL,DX XCHG AL,AH ;暂存AH IN AL,DX ;读取计数器0高8位数据 XCHG AL,AH ;AX中为计数器0的16位计数值 ;命令控制字送控制口 ;读取计数器0低8位数据

  21. 3、应用举例 • 用8253产生各种定时波形 • 控制LED的点亮或熄灭

  22. 8253初始化方法: • 控制字 • 计数初值: n=定时时间t时钟频率fc =定时时间t/时钟脉冲周期Tc 如: fc=1MHZ,最大计数初值: 65536 一个定时器最大定时时间: N/fc=65536/ 106 =0.065536s

  23. 用8253产生各种定时波形 在某个以8086为CPU的系统中使用了一块8253芯片, 8253的4个端口地址分别为310H、312H、314H、和316H,所用的时钟脉冲频率为1MHZ。要求3个计数通道分别完成以下功能: (1)通道0工作于方式3,输出频率为2KHZ的方波; (2)通道1产成宽度为480us的单脉冲; (3)通道2用硬件方式触发,输出单脉冲,时间常数为26。

  24. 对三个通道的初始化程序 ;通道0初始化程序 MOV DX,316H;控制口地址 MOV AL,00110111B ;通道0控制字,先读写低字节,后高字节,方式3,BCD计数 OUT DX,AL;写入方式字 MOV DX,310H;通道0口地址 MOV AL,00H;低字节 OUT DX,AL;先写入低字节 MOV AL,05H;高字节 OUT DX,AL;后写入高字节

  25. ;通道1初始化程序 MOV DX,316H MOV AL,01110011B ;通道1方式字,先读写低字节,后高字节,方式1,BCD计数 OUT DX,AL MOV DX,312H;通道1口地址 MOV AL,80H;低字节 OUT DX,AL MOV AL,04H;高字节 OUT DX,AL

  26. ;通道2初始化程序 MOV DX,316H MOV AL,10011011B ;通道2方式字,只读写低字节,方式5,BCD计数 OUT DX,AL MOV DX,314H;通道2口地址 MOV AL,26H;低字节 OUT DX,AL ;只写入低字节

  27. 控制LED的点亮或熄灭 例:用8253来控制一个LED发光二极管的点亮和熄灭,要求点亮10秒钟后再让它熄灭10秒钟,8253的各端口地址为81H、83H、85H和87H。

  28. 初始化程序 MOV AL,00110101B ;通道0控制字,先读写低字节,后高字节,方式3,BCD计数 OUT 87H,AL MOV AL,00H;计数初值低字节 OUT 81H,AL MOV AL,50H;计数初值高字节 OUT 81H,AL MOV AL,01110111B ;通道1控制字,先读写低字节,后高字节,方式3,BCD计数 OUT 87H,AL MOV AL,00H;计数初值低字节 OUT 83H,AL MOV AL,80H;计数初值高字节 OUT 83H,AL

  29. 用8253监视一个生产流水线,每通过100个工件。蜂鸣器响6s。频率为1000HZ。 ① 硬件连接:硬件接口示意图如图所示,工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一个脉冲,此脉冲作为8253计数通道0的计数脉冲,当通道0计数满100后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253计数通道1工作,由OUT1连续输出1000HZ的方波,持续6s后停止输出。 ② 控制字设置:通道0计数器工作于方式2,采用BCD计数,因计数初值为100,采用RL1RL0=10(读/写计数器的高8位),则方式控制字为00100101B。 通道1计数器工作于方式3,CLK1接2MHZ时钟,要求产生1000HZ的方波,则计数初值应为2000000÷1000=2000,采用RL1RL0=10(只读/写高8位),BCD计数,则方式控制字为01100111B。 ③ 程序编制:假设8253通道0的地址为40H,通道1的地址为42H,控制口地址为46H。8255A的A口地址为80H,工作于方式0输出。

  30. 则主程序为: MOV AL,25H ;通道0初始化 OUT 46H,AL MOV AL,01H ;计数初值高8位,低8位自动清零 OUT 40H,AL STI ;开中断 LOP: HLT ;等待中断 JMP LOP 中断服务程序为: MOV AL,01H ;通道1的GATE1置1,启动计数 OUT 80H,AL MOV AL,67H ;通道1初始化 OUT 46H,AL MOV AL,20H ;计数初值高8位,低8位自动清零 OUT 42H,AL CALL DL6s ;延时6s MOV AL,00H ;通道1的GATE1置0,停止计数 OUT 80H,AL ┇ ;向8259A发中断结束命令 IRET

  31. 8253通道2接有一发光二极管,要使发光二极管以点亮2s,熄灭2s的间隔工作,8253各通道端口地址分别为40H、42H、 44H、46H,其电路硬件图如图10. 21所示,试编程完成以上工作。  根据要求8253通道2输出一个周期为4s的方波。从图10. 21可知通道1的CLK1输入时钟周期为1μs,若通道1工作为定时,其输出最大定时时间为1×65536μs,仅为65.5ms,因而使用一个通道达不到定时时间4s的要求。此时,采用通道级连的办法,将通道1的输出OUT1作为通道2的输入脉冲。 8253的通道1工作于方式2,其输出端OUT1的输出为相对于1MHZ频率的分频脉冲,若选定OUT1输出脉冲周期为4ms,则通道1的计数初值应为4000。周期为4ms的脉冲作为通道2的输入,要求输出端OUT2的波形为方波且周期为4s,因此通道2应工作于方式3,计数初值为1000。通道1的控制字为01100101B,通道2的控制字为10100111B。

  32. 由于计数初值的低8位0,因此采用只读/写高8位的方法,初始化程序如下:由于计数初值的低8位0,因此采用只读/写高8位的方法,初始化程序如下: ┇ MOV AL,65H ;通道1控制字,只读/写高8位,BCD计数制 OUT 46H,AL MOV AL,0A7H ;通道2控制字,只读/写高8位,BCD计数制 OUT 46H,AL MOV AL,40H ;通道1计数初值高8位,低8位自动置0 OUT 42H,AL MOV AL,10H ;通道2计数初值高8位,低8位自动置0 OUT 44H,AL ┇

  33. 某系统利用8253-5定时器/计数器通道0产生1KHz的重复方波,问通道0应工作在什么工作方式?若CLK0=2MHz,试写出通道0的初始化程序。设8253-5端口地址为2F0H、2F2H、2F4H、2F6H。  解:(1)因为只有方式3可产生重复方波,所以计数通道0应工作在方式3。 (2)首先计算计数初值: N = (2*106)/(1*103)= 2000 其次确定方式控制字,由于采用BCD计数,只读/写高八位,因而方式控制字为00100111B。 最后编写程序。注意:由于端口地址为2F0H、2F2H、2F4H、2F6H,是16位地址,因此必须采用端口寻址中的DX寄存器间接寻址。程序如下: MOV DX,2F6H ;通道0初始化 MOV AL,00100111B OUT DX,AL MOV DX,2F0H ;写入计数初值高8位,低8位自动清零 MOV AL,20H OUT DX,AL

  34. 将8253的三个计数器级连,假设时钟输入为1MHz,画出级连图,并求: 一、各计数器均取最大计数初值,8253的各计数器的定时脉 宽为多少? 二、要求得到毫秒,秒,时三种定时脉宽,计数器的初值为 多少? (1)定时脉宽: 定时器0:T=65536*1us 定时器1:T=65536*65536 定时器2: T=65536*65536*65536 (2)初值 N0=1ms/1us=1000 N1=1s/1ms=1000 N2=3600s/1s=3600

  35. 作业 8-1 8-3 8-4

More Related