资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
PC机接口芯片的连接图,3.2 定时/计数器,3.2.1 定时技术概述 定时器: 事先设定一个时间长度,当“定时时间到”时,向CPU输出触发信号 计数器:统计某事件发生的次数。当累计的次数达到事先设定的次数时,输出触发信号。 计算机定时控制的应用场合 定时数据采集:对被控参数的瞬间值进行检测,并输入计算机; 实时决策:对采集到的参数进行比较分析,并按相应的控制规律决定下一步的控制过程; 实时控制:根据决策,适时地对控制机构发出控制信号。 计算机中采用的定时方式 (1) 软件定时 (2) 硬件定时: 单稳态定时器(RC电路) (3) 可编程定时/计数器: Intel8253,定时/计数器,3.2.2 8253工作原理,18253主要功能 一片上有3个独立的16位计数器通道,最大计数范围为065535; 每个计数器都可以按照二进制或二十进制(BCD码)计数; 每个计数器的计数速度可高达2MHz; 每个通道有6种工作方式,可通过程序设置来改变; 所有的输入和输出都与TTL兼容。,2内部结构及引脚功能 8253内部可分为6个模块,如图所示。,与CPU接口的信号,计数器内部结构,计数初值存于初值寄存器; 在计数过程中,减1计数器的值不断递减,而初值寄存器中的预置不变。 输出锁存器用于写入锁存命令时,锁定当前计数值,(1)8253的内部寄存器 计数器 8253有3个计数通道,每个通道有一个16位计数器; 工作前,CPU先将一个初值写入; 工作时,每来一个CLKx脉冲,对应的计数值 -1 ; 当计数值减到0时,OUTx发出信号脉冲。 控制字寄存器 8253的各计数通道都可按6种方式工作; 控制字用于选择工作方式,初始化时由CPU写入; 地址,(2) PC/XT机中8253与8088的连接,I/O地址: 控制寄存器 43H 计数器02#的初值寄存器 40H42H,3. 8253的控制寄存器,控制字寄存器存储的信息控制每个计数器的工作方式和计数方式,控制字寄存器的信息只能写入,不能读出。,3.2.3 8253的工作方式,两个周期: 时钟周期:CLK周期 输出周期:OUT输出波形周期 6种工作方式的区别: 启动计数方式不同(软件、硬件) 计数结束方式不同 Gate的作用不同,方式0 WR启动,单次计数 写入初值,立即开始计数; 计数期间,GATE=0暂停; 再次写入初值又开始计数。 在计数过程中,若改变初值,计数器将重新开始计数;,MOV AL,00010001B OUT 43H,AL MOV AL,5 OUT 40H,AL MOV AL,4 OUT 40H,AL,单次计数,方式1 GATE启动,单次计数 写入初值,由GATE=1启动计数; 计数期间,GATE=0不会停止; GATE上升沿,从初值开始重新计数 在计数过程中,若改变初值,计数器不受影响。若再次由GATE触发,则以新的计数值开始计数(即计数值是下次有效)。,MOV AL,00010010B OUT 43H,AL MOV AL,5 OUT 40H,AL,程序可控单拍脉冲,方式2 WR启动,自动重复计数 写入初值,启动计数; 计数完成,又重新从初值开始计数; GATE=0,暂停计数 不用重新设置计数初值,就能够连续计数,输出固定频率的脉冲;,MOV AL,00010100B OUT 43H,AL MOV AL,5 OUT 40H,AL,速率发生器,方式3 WR启动,自动重复方波计数 写入初值,启动计数; 计数完成,又重新从初值开始计数, 计数期间,前半期OUT=1,后半期OUT=0; 计数期间,GATE=0暂停计数,MOV AL,00010110B OUT 43H,AL MOV AL,5 OUT 40H,AL,CLK,WR,N=5,GATE,OUT,5,4,3,2,1,5,4,3,2,1,启动计数,再次启动计数,5,4,暂停计数,方波速率发生器,方式3: 例:计数器工作模式3,计数器初值15,时钟脉冲频率为2MHz,确定OUT端输出方波的特性。 解:TCLK=1/2MHz=500ns 计数器初值15为奇数,输出高电平宽度 TCLK(N+1)/2=4s 输出低电平宽度 TCLK(N-1)/2=3.5s,方式4 WR启动,单次计数(一次性,不重载) 写入初值,启动计数; 计数完成,停止计数,OUT一直为高, 除非重新送初值 计数期间,GATE=0,暂停计数。 GATE=1,从初值开始计数(不是恢复计数),MOV AL,00011000B OUT 43H,AL MOV AL,4 OUT 40H,AL,软件触发选通,方式5 GATE启动,单次计数 写入初值,暂不计数; GATE上升沿启动计数; 计数完成,OUT变低1CLK后又变为高电平,停止计数 计数期间,由GATE上升沿加载初值 新的GATE上升沿启动新一次计数。,MOV AL,00011010B OUT 43H,AL MOV AL,4 OUT 40H,AL,硬件触发选通,提问:,8253有几种工作方式? 什么是软件触发?什么是硬件触发? 可重装初值的工作方式是哪些?,8253计数/定时器编程,GATE的控制作用,6种工作方式的比较,6种工作方式的比较,返回,触发方式:,输出波形:,方式1和方式5为硬件触发;其余为软件触发,四、8253初始化,分2步: (1)向命令寄存器写入方式命令 以选择计数器(3个计数器之一) 确定工作方式(6种方式之一) 指定计数器计数初值的长度和装入顺序以及计数值的码制(BCD或二进制码)。 (2)向已选定的计数器按方式命令的要求写入计数初值。 计数初值n =时钟频率fc/输出频率fout =定时时间Tout/时钟脉冲周期Tc,五、8253的编程举例,1)初始化,1)写入控制字 2)按控制字要求写入计数初值,例1:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器0,工作模式2,仅使用低8位,初值为100,计数值使用二进制,MOV AL, 14H OUT 73H, AL ;设定方式 MOV AL, 100 OUT 70H, AL ;置初值,例2:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器1,工作模式1,使用16位,初值为1234,计数值使用BCD。,MOV AL, 73H OUT 73H, AL ;设定方式 MOV AX, 1234H OUT 71H, AL ;置初值低位 MOV AL, AH OUT 71H, AL ;置初值高位,8253的编程命令,2)读计数器命令,1)发出锁存命令,使当前计数值锁存在OL中 2)读OL,获得当前计数值,例:设8253三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。读出计数器0的当前计数值,放在BX中,MOV AL, 0H OUT 73H, AL ;发锁存命令 IN AL, 70H MOV BL, AL ;读低位 IN AL, 70H MOV BH, AL ;读高位,六、8253的应用,1. PC机中8253的应用,计数器0:向系统日历时钟提供定时中断 模式3,控制字36H,计数器初始值0 计数器1:动态RAM刷新 模式2,控制字54H,计数器初始值18(12H) 计数器2:控制扬声器发声 模式3,控制字B6H,计数器初始值1331(533H),PC机中,8253的端口地址为40H43H,2. 扬声器控制,设计一个程序,使扬声器发出600Hz频率的声音,按下任意键声音停止,PC机的发声系统以计数器2为核心。CLK2的输入频率1.19MHz, 改变计数器初值可以由OUT2得到不同频率的方波输出 对于600Hz,计数初值1.19MHz/600Hz=1983,发声系统受8255芯片B口的两个输出端线PB0、PB1的控制: PB0为1,使GATE2为1,计数器2能正常计数 PB1为1,打开输出控制门,PC机扬声器发声控制代码,CODE SEGMENT ASSUME CS:CODE START: IN AL, 61H ;PB0,1置1 OR AL, 03H OUT 61H, AL MOV AL,0B7H ;初始化定时器2 OUT 43H,AL MOV AX, 1983 ;写计数初值 OUT 42H, AL MOV AL, AH OUT 42, AL MOV AH, 01H ;等待按键 INT 21H IN Al, 61H ;恢复PB0,1 AND AL, 0FCH OUT 61H, AL MOV AH, 4CH ;退出 INT 21H CODE ENDS END START,void main() _asm in al,0x61 or al,03 out 0x61, al mov al,0xb7 out 0x43,al mov ax,1983 out 0x42,al mov al,ah out 0x42, al mov ah,01 int 0x21 in al,0x61 and al,0xfc out 0x61, al ,3 PC机在启动时,对8253的设置程序如下: MOV AL,00110110B OUT 43H,AL MOV AL,O OUT 40H,AL OUT 40H,AL 试分析8253的工作情况。 控制字分析: 00 11 011 0 B,设置计数器0,写入16位初值,方式3,方波发生,初值为二进制数,初值分析: 0000H ,写入后,减1得0FFFFH,再减65535次才输出一次方波。 方波周期:高、低电平期均为32768次CLK, CLK的周期=1/(1.19 106) 秒 方波周期=65536CLK的周期=55.072毫秒55毫秒,4 已知PC机中,8253的OUT0接到8259的IRQ0,即:每55ms发出 一次中断。 试编程,截取此中断,得到一个秒计数器。 注: IRQ0的中断类型号为9.,5 Windows定时器,m_nTimer = SetTimer(1,1000,0); KillTimer(m_nTimer ) void CTimerView:OnTimer(UINT nIDEvent) switch(nIDEvent) case 1: MessageBeep(0xFFFFFFFF); / Beep break; CView:OnTimer(nIDEvent); ,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号