1、第 7章,第7章 定时计数控制接口,教学重点8253的引脚和6种工作方式8253的编程8253的应用,定时器和计数器,定时控制在微机系统中极为重要 定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间隔 计数电路如果记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为计数器,定时功能的实现方法,软件延时利用微处理器执行一个延时程序段实现 不可编程的硬件定时采用分频器、单稳电路或简易定时电路控制定时时间 可编程的硬件定时软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路,8.1 8253/8254定时计数器,
2、3个独立的16位计数器通道 每个计数器有6种工作方式 按二进制或十进制(BCD码)计数,8254是8253的改进型,8.1.1 8253/8254的内部结构和引脚,计数器结构示意图,计数初值存于预置寄存器; 在计数过程中, 减法计数器的值不断递减, 而预置寄存器中的预置不变。 输出锁存器用于写入锁存命令时, 锁定当前计数值,计数器的3个引脚,CLK时钟输入信号在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1 GATE门控输入信号控制计数器工作,可分成电平控制和上升沿控制两种类型 OUT计数器输出信号当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号,2.
3、与处理器接口,D0 D7数据线 A0 A1地址线 RD*读信号 WR*写信号 CS*片选信号,8.1.2 8253/8254的工作方式,8253有6种工作方式,由方式控制字确定 熟悉每种工作方式的特点才能根据实际应用问题,选择正确的工作方式 每种工作方式的过程类似: 设定工作方式 设定计数初值 硬件启动 计数初值进入减1计数器 每输入一个时钟计数器减1的计数过程 计数过程结束,方式0 计数结束中断,设 定 工 作 方 式,设 定 计 数 初 值,计 数 值 送 入 计 数 器,计 数 过 程,计 数 结 束,方式1 可编程单稳脉冲,设 定 工 作 方 式,设 定 计 数 初 值,硬 件 启 动
4、,计 数 值 送 入 计 数 器,计 数 过 程,计 数 结 束,方式2 频率发生器(分频器),方式3 方波发生器,方式4 软件触发选通信号,方式5 硬件触发选通信号,各种工作方式的输出波形,讨论: 计数开始的时刻,计数开始的时刻,需要注意: 处理器写入8253的计数初值只是写入了预置寄存器,之后到来的第一个CLK输入脉冲(需先由低电平变高,再由高变低)才将预置寄存器的初值送到减1计数器。 从第二个CLK信号的下降沿,计数器才真正开始减1计数。,实验: 计数开始的时刻,实验1,感谢山西省太原理工大学常晓明教授提供实验结果,实验1,感谢山西省太原理工大学常晓明教授提供实验结果,实验2,问题讨论,
5、通过本例,请大家 思考理论(原理)与实践(工程)的关系 体会教学实践环节(上机、实验)的重要性 同时,还请大家注意 大学的常规教学侧重理论(原理)的掌握 大家需要加强实践(实验)、积累实际经验,8.1.3 8253/8254的编程,8253加电后的工作方式不确定 8253必须初始化编程,才能正常工作 写入控制字 写入计数初值 读取计数值,1 写入方式控制字,00 计数器0 01 计数器1 10 计数器2 11 非法,00 计数器锁存命令 01 只读写低字节 10 只读写高字节 11 先读写低字节后读写高字节,000 方式0 001 方式1 *10 方式2 *11 方式3 100 方式4 101
6、 方式5,0 二进制 1 十进制,控制字写入控制字I/O地址(A1A011),示例,2 写入计数值,选择二进制时 计数值范围:0000HFFFFH 0000H是最大值,代表65536 选择十进制(BCD码) 计数值范围:00009999 0000代表最大值10000,计数值写入计数器各自的I/O地址,示例,3 读取计数值,对8位数据线,读取16位计数值需分两次 计数在不断进行,应该将当前计数值先行锁存,然后读取: 向控制字I/O地址:给8253写入锁存命令 从计数器I/O地址:读取锁存的计数值,读取计数值,要注意读写格式和计数数制,例题:读通道1的16位计数器,地址 40H43H。 编程如下:
7、 MOV AL,40H; OUT 43H,AL ;锁存计数值 IN AL,41H MOV CL,AL;低八位 IN AL,41H; MOV CH,AL;高八位,练习题,例1:设8253的端口地址为:04H07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。例2:设8253的端口地址为:F8HFBH,若用通道0工作在方式1,按BCD码计数,计数值为5080,进行初始化编程。例3:设8253的端口地址为:04H07H,若用通道2工作在方式2,按二进制计数,计数值为02F0H,进行初始化编程。,例题:用8253监视一个生产流水线,每通过100个工件。蜂鸣器响6s。频
8、率为1000HZ。,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,AL MOV A
9、L,20H ;计数初值高8位,低8位自动清零 OUT 42H,AL CALL DL6s ;延时6s MOV AL,02H ;通道1的GATE1置0,停止计数 OUT 86H,AL ;向8259A发中断结束命令 IRET,8.2 8253在IBM PC系列机上的应用,8.2.1 定时中断和定时刷新,从阅读初始化程序段 看计数器0作为定时中断的作用,将计数器1作为定时刷新 看如何编写初始化程序段,定时中断,mov al,36h;计数器0为方式3,采用二进制计数,;先低后高写入计数值out 43h,al ;写入方式控制字mov al,0 ;计数值为0out 40h,al ;写入低字节计数值out 4
10、0h,al ;写入高字节计数值,8253初始化,计数器0:定时中断,计数器0:方式3,计数值:65536,输出频率为1.19318MHz6553618.206Hz的方波 门控为常启状态,这个方波信号不断产生 OUT0端接8259A的IRQ0,用作中断请求信号 每秒产生18.206次中断请求,或说每隔55ms(54.925493ms)申请一次中断 DOS系统利用计数器0的这个特点,通过08号中断服务程序实现了日时钟计时功能,计数器1:定时刷新,需要重复不断提出刷新请求,门控总为高,选择方式2或3,2ms内刷新128次,即15.6s刷新一次,计数初值为18,定时刷新,mov al,54h;计数器1
11、为方式2,采用二进制计数,只写低8位计数值out 43h,al ;写入方式控制字mov al,18 ;计数初值为18out 41h,al ;写入计数值,8253初始化,8.2.2 扬声器控制,计数器2的输出控制扬声器的发声音调 计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声 扬声器还受控于并行接口(8255芯片) 必须使PB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音,频率设置,speaker procpush axmov al,0b6hout 43h,al ;写入控制字pop axout 42h,al ;写入低8位计数值mov al
12、,ahout 42h,al ;写入高8位计数值ret speaker endp,扬声器控制,扬声器开,speakon procpush axin al,61hor al,03h;D1D0PB1PB011B,其他位不变out 61h,alpop axret speakon endp,扬声器控制,扬声器关,speakon procpush axin al,61hand al,0fch;D1D0PB1PB000B,其他位不变out 61h,alpop axret speakon endp,扬声器控制,主程序,;数据段 freq dw 1193180/600;代码段mov ax,freqcall sp
13、eaker ;设置扬声器音调call speakon ;打开扬声器声音mov ah,1 ;等待按键int 21hcall speakoff ;关闭扬声器声音,扬声器控制,8.2.3 可编程硬件延时,利用日时钟每隔55ms中断一次不变的特点,可以编写一段不随系统时钟频率变化的固定延时程序 由于日时钟中断的时间单位是55ms,所以无法实现更短时间的延时 这时只有利用实时时钟中断,不过它的最短延时约是1ms(976 s),日时钟,;延时开始mov ah,0int 1ah add dx,90 ;加5秒(51890)mov bx,dx ;期望值送bx repeat: int 1ah ;再读日时钟cmp
14、bx,dx ;与期望值比较jne repeat ;不等,则循环 ;相等,延时结束,可编程硬件延时,实时时钟,;延时开始mov cx,0mov dx,1952;延时1.952ms2976smov ah,86hint 15h;功能调用返回时,定时时间到,可编程硬件延时,8.3 扩充定时计数器的应用,例题8.2 利用扩充定时计数器对外部事件的计数例题8.3 为A/D转换电路提供可编程的采样信号,例8.2,初始化程序段,mov dx,203h ;设置方式控制字mov al,10hout dx,al mov dx,200h ;设置计数初值mov al,64h ;计数初值为100out dx,al,例8.
15、2,输出:明确向哪个端口输出什么数据 输入:清楚从哪个端口输入什么数据,例8.3,初始化计数器0,mov al,14hout 76h,almov al,cnt0out 70h,al,例8.3,初始化计数器1,mov al,52hout 76h,almov al,cnt1out 72h,al,例8.3,初始化计数器2,mov al,96hout 76h,almov al,cnt2out 74h,al,例8.3,第8章教学要求,1. 掌握8253引脚,尤其是CLK、OUT、GATE引脚的功能 2. 掌握8253的六种工作方式、编程和在IBM PC系列机上的应用,实验3 计数器/定时器实验,不用实验
16、台,就可以实现发声程序:参考例题8.1如果要实现第项实验要求,应该利用中断实验的中断服务程序,提示,8253的控制字编程,例题:某个8253的计数器0、1、2端口和控制端口地址依次是40H43H设置其中计数器0为方式0,采用二进制计数,先低后高写入计数值,8253的计数初值编程,例题:某个8253的计数器0、1、2端口和控制端口地址依次是40H43H设置计数器0采用方式1,二进制计数,写入计数初值:1024(400H),8253/8254的I/O地址,0 1 0 0 0,0 1 0 0 1,0 1 0 1 0,0 1 0 1 1,0 0 1 0 0,0 0 1 0 1,0 0 1 1 0,功 能,对计数器0设置计数初值,A1,A0,对计数器1设置计数初值,对计数器2设置计数初值,设置控制字,从计数器0读出计数值,从计数器1读出计数值,从计数器2读出计数值,