400 likes | 666 Views
第九章 可编程接口与应用 —— 可编程定时 / 计数器 8253. 主讲:刘英. 回顾:主要接口芯片. 简单的输入 / 输出接口芯片 如锁存器 74LS373 、单向缓冲器 74LS244 、双向缓冲器(数据收发器) 74LS245 等。 可编程接口芯片:其功能可以由软件来选用控制。 如并行输入输出接口 8255 、串行输入输出接口 8250/8251 、定时器 / 计数器 8253 、中断控制器 8259 、 DMA 控制器 8237 等。. 9.2 可编程定时 / 计数器 8253. 9.2 可编程定时 / 计数器 8253. 基本概念
E N D
第九章 可编程接口与应用——可编程定时/计数器8253 主讲:刘英
回顾:主要接口芯片 • 简单的输入/输出接口芯片 • 如锁存器74LS373、单向缓冲器74LS244、双向缓冲器(数据收发器)74LS245等。 • 可编程接口芯片:其功能可以由软件来选用控制。 • 如并行输入输出接口8255、串行输入输出接口8250/8251 、定时器/计数器8253、中断控制器8259、DMA控制器8237等。
9.2 可编程定时/计数器8253 9.2 可编程定时/计数器8253 • 基本概念 • 定时/计数器芯片Intel8253
9.2.1 基本概念 1. 定时与计数 定时或计数的工作实质均体现为对脉冲信号的计数,如果计数的对象是标准的内部时钟信号,由于其周期恒定,故计数值也就恒定地对应于一定的时间,这一过程即为定时,如果计数的对象是与外部过程相对应的脉冲信号(周期可以不相等)则此时即为计数。
9.2.1 基本概念 2. 定时与计数的实现方法 • 硬件方法:定时/计数器电路 • 利用脉冲计数在设定的时间输出定时信号 • 软件方法:用一段程序实现延时 • 利用程序循环延迟指定的时间 • 缺点:CPU占用率?延时精度?兼容? • 软、硬件结合法 • 即设计一种专门的具有可编程特性的芯片
9.2.1 基本概念 3. 定时/计数器的用途 • 可以实现定时与计数两个功能,可用于 • 系统时钟 • DRAM刷新定时 • 定时采样 • 在规定的时间对温度、压力、流量等参数进行采样 • 实时控制 • 对外部事件进行计数,按计数结果进行控制 • 脉冲的计数 • 。。。
9.2.2 定时/计数器芯片Intel8253 1. 8253的一般性能 • 每个8253芯片有3个独立的16位计数器通道; • 每个计数器通道都可以按照二进制或二-十进制(BCD码)计数; • 每个计数器的计数速度可以高达2MHz; • 每个通道有6种工作方式,可以由程序设定和改变; • 所有的输入、输出电平都与TTL兼容。
9.2.2 定时/计数器芯片Intel8253 编址部件0 编址部件1 编址部件3 编址部件2 2. 8253的内部结构
9.2.2 定时/计数器芯片Intel8253 • 数据总线缓冲器 • 实现8253与CPU数据总线连接的8位双向三态缓冲器 • 读/写控制逻辑 • 控制8253的片选及对内部相关寄存器的读/写操作 • 控制字寄存器 • 8位,在8253的初始化编程时,由CPU写入控制字 • 计数通道(3个) • 每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器。
9.2.2 定时/计数器芯片Intel8253 CLK0 GATE0 OUT0 DB D7-D0 通道0 A1 A0 A1 CLK1 GATE1 OUT1 A0 通道1 WR IOW IOR 片选信号 RD CLK1 GATE1 OUT1 CS 通道2 8253 3. 8253的外部引脚
9.2.2 定时/计数器芯片Intel8253 A1 A0 选 择 0 0 计数通道0 0 1 计数通道1 1 0 计数通道2 1 1 控制寄存器 (1)与CPU连接的引脚 • D7~D0:双向、三态数据线引脚,与系统的数据总线连接。 • RD#:来自于CPU的读控制信号输入引脚,低电平有效。 • WR#:来自于CPU的写控制信号输入引脚,低电平有效。 • CS#:芯片选择信号输入引脚,低电平有效。 • A1、A0:地址信号输入引脚,由8253片内译码,用以选择芯片的计数通道及控制字寄存器。
9.2.2 定时/计数器芯片Intel8253 (2)与外设连接的引脚 • CLKn:计数脉冲输入引脚,用来输入定时基准脉冲或计数脉冲。 • GATEn:门控信号输入引脚,用来控制计数器的启动或停止。 • OUTn:计数通道的定时/计数到信号输出引脚,不同工作方式下产生不同波形。 (n = 0~2)
9.2.2 定时/计数器芯片Intel8253 (3)定时/计数的工作过程 • 设置8253的工作方式 • 设置计数初值到初值寄存器 • 第一个CLK信号使初值寄存器的内容置入计数寄存器 • 以后每来一个CLK信号,计数寄存器减1 • 减到0时,OUT端输出一特殊波形的信号 注:以上计数过程中还受到GATE信号的控制
9.2.2 定时/计数器芯片Intel8253 D7 D6 D5 D4 D3 D2 D1 D0 计数器 读/写格式 工作方式 数制 4. 8253的控制字 1--计数值为BCD码格式 0--计数值为二进制格式 D3 D2 D1 模式选择 0 0 0 模式0 0 0 1 模式1 / 1 0 模式2 / 1 1 模式3 1 0 0 模式4 1 0 1 模式5 0 0----对计数器进行锁存 0 1----只读/写低8位字节 1 0----只读/写高8位字节 1 1----先读/写低8位字节, 再读/写高8位字节. 0 0----选计数器0 0 1----选计数器1 1 0----选计数器2 1 1----无意义
9.2.2 定时/计数器芯片Intel8253 (1)8253的初始化编程 • 初始化编程包括如下步骤: • 写入通道控制字,规定通道的工作方式。 • 写入计数值。若规定只写低8位,则高8位自动置0;若规定只写高8位,则低8位自动置0;若为16位计数值则分两次写入,先写低8位,后写高8位。
9.2.2 定时/计数器芯片Intel8253 【例1】 设8253的端口地址为:04H~07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。 控制字为:01010000B=50H 初始化程序: MOV AL,50H OUT 07H,AL ;将控制字写入控制字寄存器 MOV AL,80H OUT 05H,AL ;将计数值写入计数器1低8位
9.2.2 定时/计数器芯片Intel8253 【例2】 设8253的端口地址为:F8H~FBH,若用通道0工作在方式1,按二——十进制计数,计数值为5080H,进行初始化编程。 控制字为:00110011B=33H 初始化程序: MOV AL,33H OUT 0FBH,AL ;写控制字 MOV AL,80H OUT 0F8H,AL ;先写低8位 MOV AL,50H OUT 0F8H,AL ;再写高8位
9.2.2 定时/计数器芯片Intel8253 (2)读取8253通道中的计数值 • 8253可用控制命令来读取相应通道的计数值,由于计数值是16位的,而读取的瞬时值,要分两次读取,所以在读取计数值之前,要用锁存命令,将相应通道的计数值锁存在锁存器中,然后分两次读入,先读低字节,后读高字节。 • 当控制字中,D5、D4=00时,控制字的作用是将相应通道的计数值锁存的命令,锁存计数值在读取完成之后,自动解锁。
9.2.2 定时/计数器芯片Intel8253 【例3】如要读通道1的16位计数器,编程如下:地址F8H~FBH。 控制字为:01000000B=40H 读计数值程序: MOV AL,40H OUT 0FBH,AL ;锁存计数值 IN AL,0F9H MOV CL,AL ;读低8位 IN AL,0F9H MOV CH,AL ;读高8位
9.2.2 定时/计数器芯片Intel8253 5. 8253在系统中的典型连接 8253 8253占用4个接口地址: 计数器0 计数器1 计数器2 控制寄存器 DB D0~D7 IOW WR CLK 共三组 GATE IOR RD OUT A1 A1 A0 A0 高位地址 A15-A2 译码器 CS (决定8253的基地址)
9.2.2 定时/计数器芯片Intel8253 6. 8253的工作方式 • 8253有6种工作方式,各种方式下的工作状态不同,输出波形也不同。 • 几条基本原则 • 控制字写入计数器时,所有的控制逻辑电路立即复位,输出端OUT进入初始状态。 • 计数初始值写入之后,要经过一个时钟周期上升沿和一个下降沿,计数执行部件才可以开始进行计数操作。 • 在每个时钟脉冲CLK的上升沿,采样门控信号GATE。 • 在时钟脉冲的下降沿,计数器作减1计数,0是计数器所能容纳的最大初始值。二进制相当于216(65536),用BCD码计数时,相当于104(10000)。
9.2.2 定时/计数器芯片Intel8253 (1)方式0——计数结束产生中断 • 结果特点:计数器减1为0时,OUT升高,向CPU发中断请求 • 过程特点 • 控制字写入:OUT=0。当控制字写入控制字寄存器后,输出端OUT变成低电平,并且在计数值减到0之前一直保持低电平 • 计数值写入:OUT不变,仍然为低电平(OUT=0)。 • 计数期间:OUT为低电平(OUT=0) • 计数为0时:OUT升高(OUT=1),向CPU发中断请求(如果使用中断的话)。直到CPU写入新的控制字或计数值时,才能使OUT=0 • 计数期间写入新的计数值:立即有效。如果计数值是一个字节,则在写入后的下一个时钟脉冲,新的计数值由CR送入CE,开始新的计数。如果计数值是两个字节,则写入第一个字节时,计数不受影响,写入第二个字节后的下一个时钟脉冲时,新的计数值由CR送CE,启动计数器按新的计数值开始计数。 • GATE作用:GATE=0时,禁止计数,计数器停止;GATE=1时,允许计数,此时计数器从刚才断的地方开始连续计数。 • 计数值有效期限:计数值一次有效
9.2.2 定时/计数器芯片Intel8253 (2)方式1 ——单脉冲触发器 • 结果特点:输出单拍负脉冲,脉冲宽度可编程设定。 • 过程特点 • 控制字写入:OUT=1 • 计数值写入:OUT=1(不变) • 启动方式:GATE上跳沿。启动后的下一个CLK脉冲使OUT变低电平(OUT=0),即延迟一个时钟周期 • 计数期间:OUT为低电平(OUT=0) • 计数为0时,OUT变为高电平(OUT=1) • 计数期间写入新的计数值:不影响原计数,只有当下一个GATE上跳沿到来时,才使用新的计数值。 • GATE作用:GATE=0或GATE=1时,不影响计数,但若出现上跳沿则重新启动计数器,按最新计数初值开始计数。若在计数尚未结束时,就出现了上跳沿,则重新计数,因此,使输出负脉冲的宽度延长。这种方式常用于工业控制系统中的干扰自动复位电位。 • 计数值有效期限:计数值多次有效。计数初值写入CR后,在没有新的计数值写入CR之前,原计数初值在CR中保持不变,以后每触发一次,CR中保存的这个计数初值就装入CE一次。
9.2.2 定时/计数器芯片Intel8253 (3)方式2 ——脉冲频率发生器(分频器) • 结果特点:产生连续的负脉冲信号,负脉冲宽度等于一个时钟周期。脉冲周期可由软件设定,脉冲周期=计数值×时钟周期 • 过程特点 • 控制字写入:OUT=1 • 计数值写入:OUT=1(不变) • 启动方式:两种。一是硬件启动:GATE上跳沿启动;二是软件启动:写入计数值启动(此时GATE=1) • 计数期间:OUT为高电平(OUT=1),但CE由1到0的计数中,OUT输出一个负脉冲,宽度为一个时钟周期 • 计数为0时,OUT为高电平(OUT=1),开始下一个周期的计数 • 计数期间写入新的计数值:影响随后的脉冲周期 • GATE作用:GATE=0时,OUT=1,停止计数; GATE=1时,不影响计数器工作; GATE上跳沿时,启动计数器,重新开始 • 计数值有效期限:计数值重复有效。在这种方式下,当计数器的值减到0时,CR的计数初值自动重新装入CE,实现循环计数
9.2.2 定时/计数器芯片Intel8253 (4)方式3 ——方波发生器 • 结果特点:产生连续的方波。方波的重复周期=计数值×时钟周期 • 过程特点 • 控制字写入:OUT为高电平(OUT=1) • 计数值写入: OUT为高电平(OUT=1) • 启动方式:两种。一是硬件启动:GATE上跳沿启动;二是软件启动:写入计数值启动(此时GATE=1) • 计数期间:若计数值N为偶数,则在前N/2计数期间,OUT输出高电平(OUT=1),后N/2计数期间, OUT输出低电平(OUT=0);若计数值N为奇数,则在前(N+1)/2计数期间,OUT输出高电平(OUT=1),后(N-1)/2计数期间, OUT输出低电平(OUT=0); • 计数为0时,OUT输出高电平(OUT=1),从而完成一个周期。然后,CR值自动装入CE,开始下一个周期 • 计数期间写入新的计数值:不影响当前输出周期,影响下一个周期 • GATE作用:GATE=0时,OUT=1,停止计数; GATE=1时,不影响计数器工作; GATE上跳沿时,启动计数器,重新开始 • 计数值有效期限:计数值重复有效。
9.2.2 定时/计数器芯片Intel8253 (5)方式4 ——软件触发的选通信号发生器 • 结果特点:计数器减为0时,输出一个时钟周期的负脉冲 • 过程特点 • 控制字写入:OUT为高电平(OUT=1) • 计数值写入: OUT为高电平(OUT=1) • 启动方式:写入计数值。写入计数值后,再过一个CLK时钟周期,减1计数器CE获得计数初值,开始减1计数 • 计数期间: OUT为高电平(OUT=1) • 计数为0时:计数器减到0后,输出一个负脉冲,宽度为1个时钟周期。然后又自动变为高电平,并一直维持高电平。通常将此负脉冲作为选通信号 • 计数期间写入新的计数值:立即有效(同方式0) • GATE作用:GATE=0时禁止计数;OUT=1时允许计数,此时计数器从暂停的地方开始继续计数。GATE信号不影响OUT的状态 • 计数值有效期限:计数值一次有效。只有在输入新的计数值后,才能开始新的计数过程
9.2.2 定时/计数器芯片Intel8253 (6)方式5 ——硬件触发的选通信号发生器 • 结果特点:计数器减为0时,输出一个时钟周期的负脉冲 • 过程特点 • 控制字写入:OUT为高电平(OUT=1) • 计数值写入: OUT为高电平(OUT=1) • 启动方式:GATE上跳沿。当GATE端有上跳沿信号后,下一个CLK脉冲使CR的计数初值装入CE,从而开始计数过程 • 计数期间: OUT为高电平(OUT=1) • 计数为0时:计数器减到0后,输出一个负脉冲,宽度为1个时钟周期。然后又自动变为高电平 • 计数期间写入新的计数值:不影响本次计数,但影响GATE上跳沿启动后的计数过程。一但GATE重新启动,将按新的计数初值开始计数 • GATE作用:无论GATE=0还是GATE=1均不影响计数过程,而当GATE有上跳沿时将重新启动计数过程,按最新计数值开始计数 • 计数值有效期限:计数值多次有效。当计数器的计数值减到0后,将自动重新装入计数值(由CR装入CE),但并不开始计数,而是在GATE信号的上跳沿才开始计数
9.2.2 定时/计数器芯片Intel8253 8253的工作方式小结(1) 方式2、4、5的输出波形是相同的,都是宽度为一个CLK周期的负脉冲,但方式2连续工作,方式4由软件触发启动,方式5由硬件触发启动。(2) 方式5与方式1工作过程相同,但输出波形不同,方式1输出的是宽度为N个CLK脉冲的低电平有效的脉冲(计数过程中输出为低),而方式5输出的为宽度为一个CLK脉冲的负脉冲(计数过程中输出为高)。(3) 输出端OUT的初始状态,方式0在写入方式字后输出为低,其余方式,写入控制字后,输出均变为高。(4) 任一种方式,均是在写入计数初值之后,才能开始计数,方式0、2、3、4都是在写入计数初值之后,开始计数的,而方式1和方式5需要外部触发启动,才开始计数。
9.2.2 定时/计数器芯片Intel8253 8253的工作方式小结(续)(5) 6种工作方式中,只有方式2和方式3是连续计数,其它方式都是一次计数,要继续工作需要重新启动,方式0、4由软件启动,方式1、5由硬件启动。 (6) 门控信号的作用;通过门控信号GATE,可以干预8253某一通道的计数过程,在不同的工作方式下,门控信号起作用的方式也不一样,其中0、2、3、4是电平起作用,1、2、3、5是上升沿起作用,方式2、3对电平上升沿都可以起作用。 (7) 在计数过程中改变计数值,它们的作用有所不同。 (8) 计数到0后计数器的状态,方式0、1、4、5继续倒计数,变为FF、FE。。。。。。,而方式2、3、,则自动装入计数初值继续计数。
9.2.2 定时/计数器芯片Intel8253 【例4】设定时器0、定时器1工作于方式2,外部提供一个时钟,频率f=2MHZ。要求定时器1每5ms产生一个脉冲,定时器0每5s产生一个脉冲。 分析:时间常数的计算:已知时钟频率F及定时时间t,求计数初值N: 1) 一个定时器的最大定时时间: 65536/(2*106)=0.032768 s=32.768ms 提示:超过65536,必须考虑用两个通道级连,即将第一级的OUT输出作为第二级的CLK输入,取第二级的OUT输出为最后结果,超过二级,依次类推。
9.2.2 定时/计数器芯片Intel8253 2) 将定时器1的CLK1接2MHZ时钟,计数初值: 3) 将定时器1的OUT1端接到定时器0的CLK0端,定时器0的计数初值:
9.2.2 定时/计数器芯片Intel8253 8253 D7~D0 CPU AB 地址 译码 线路连接图: 两个定时器串连使用
9.2.2 定时/计数器芯片Intel8253 8253初始化程序: MOV AL, 00110100B ;0号定时器,方式2 OUT 43H, AL MOV AX, 1000 OUT 40H, AL MOV AL, AH OUT 40H, AL MOV AL, 01110100B ;1号定时器,方式2 OUT 43H, AL MOV AX, 10000 OUT 41H, AL MOV AL, AH OUT 41H, AL
习题 (1)I/O接口的主要功能有哪些?有哪两种编址方式?在8086/8088系统中采用哪一种编址方式? (2)试比较4种基本输入输出方法的特点。 (3)利用三态门芯片74LS244作为输入接口,接口地址为40FBH,试画出其与8086系统总线的连接图。 (4)若8253芯片的接口地址为D0D0H~D0D3H,时钟信号频率为2MHz。现利用计数器0、1、2分别产生周期为10us的对称方波及每1ms和1s产生一个负脉冲,试画出其与系统的电路连接图,并编写包括初始化在内的程序。 (5)某一计算机应用系统采用8253芯片的计数器0作频率发生器,输出频率为500Hz;用计数器1产生1000Hz的连续方波信号,输入8253的时钟频率为1.19MHz。试问:初始化时送到计数器0和计数器1的初值分别为多少?计数器1工作于什么方式下?