第八章定时器/计数器接口2011/10东北大学计算机系统研究所第八章8.1什么是定时和计数8.28253/8254可编程定时/计数器8.3MC146818CMOSRAM/实时时钟钟习题•定时:CPU通过接口电路产生时间符合要求的信号的过程称为定时。该接口电路称为定时器。•计数:CPU通过接口电路对外部事件的数量进行统计的过程称为计数。该接口电路称为计数器。8.1什么是定时和计数•软件定时:MOVCX,XXXXHlp:NOP…….NOPLOOPlp或调用定时子程序,如INT指令、其它高级语言中的子程序。•硬件定时:采用TTL或CMOS集成电路,如NE555、计数器等,或晶振、阻容电路等。•可编程定时器:如8253/8254,CTC等。8.1什么是定时和计数三种定时方法第八章8.28253/8254可编程定时/计数器8.1概述8.3MC146818CMOSRAM/实时时钟钟习题8.2.18253的引脚信号8253D0~D7CH0RDWRCSA0A1CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2CH1CH28.28253/8254可编程定时器/计数器8.2.28253的内部结构8253CLK0GATE0OUT0控制寄存器计数初值寄存器计数器当前计数值寄存器通道1通道2计数初值=参考时钟频率输出频率8.28253/8254可编程定时器/计数器8.2.38253的控制字0/1二进制BCD码通道号0~2工作方式0~5读写锁存器00=锁存计数值01=读/写LSB10=读/写MSB11=先读写LSB,后读写MSB8253的初始化:先写控制字再写计数初值8.28253/8254可编程定时器/计数器8.2.48253的工作方式方式0:计数,电平触发(软触发)CLKGATEOUTWRCWn=5计数值写入计数器43停止计数21058.28253/8254可编程定时器/计数器方式1:计数,上升沿触发(硬触发)CLKGATEOUTWRCWn=543532105重新计数48.28253/8254可编程定时器/计数器8.2.48253的工作方式(续)8.2.48253的工作方式(续)方式2:定时,电平触发,上升沿也触发CLKGATEOUTWRCWn=3计数值写入计数器3210/3210/3210/312NNN分频器8.28253/8254可编程定时器/计数器8.2.48253的工作方式(续)方式3:定时,电平触发,上升沿也触发CLKGATEOUTWRCWn=43210/43210/443212+2或3+28.28253/8254可编程定时器/计数器8.2.48253的工作方式(续)方式4:计数,电平触发(软触发)CLKGATEOUTWRCWn=4计数值写入计数器43210NNN8.28253/8254可编程定时器/计数器8.2.48253的工作方式(续)方式5:计数,上升沿触发(硬触发)CLKGATEOUTWRCWn=432104计数值写入计数器8.28253/8254可编程定时器/计数器mode012345Gate=“0”Gate=“1”Gate=“”停止计数计数不受影响停止计数,输出高电平停止计数,输出高电平停止计数计数不受影响开始计数,一个时钟周期后输出低电平开始计数,重设初始值开始计数开始计数进行计数计数不受影响进行计数进行计数进行计数8.2.48253的工作方式(续)8.28253/8254可编程定时器/计数器*8253的初始化利用通道2控制扬声器发声。选择工作方式3,声音频率为4kHz(存放在DX中)。端口地址为40H~43H。MOVSI,DXMOVAL,10110110BOUT43H,ALMOVDX,0012HMOVAX,34DCHDIVSIOUT42H,ALMOVAL,AHOUT42H,AL8.28253/8254可编程定时器/计数器8.2.58253在IBMPC系列机中的应用(在PC/XT中为8253,在PC/AT中为8254)通道0:方式3,CLK=1.19MHz,GATE=“1”,OUT接IRQ0,计数初值为0(65536),即每隔55ms一个中断请求信号,中断程序据此维护系统的日历时钟。通道1:方式2,CLK=1.19MHz,GATE=“1”,OUT接DREQ0,计数初值为18,即每隔15vs一个DMA请求信号,使DMA周期性地进行DRAM刷新。通道2:方式3,CLK=1.19MHz,GATE接8255APB0,OUT接扬声器的驱动器输入端,即产生不同频率的方波,发出不同的声音。8.28253/8254可编程定时器/计数器8.2.58253在IBMPC系列机中的应用(8253时钟中断的使用)8253通道0每55ms产生一次类型为8的中断,在INT8中断服务程序中,修改系统时间,从而维护系统的日历和时钟。为利用INT8中断,在其中断程序中有一条指令:INT1CH。因此它与INT8同步,而且不必在结束时执行EOI命令,因为在INT1CH中执行了。用户可以利用INT1CH编写自己的定时程序。例:编写一个驻留程序,每隔1s在屏幕的右上角显示一个数字,在0~9之间变化。MAIN:MOVDX,OFFSETINT1C;中断程序入口MOVAX,251CH;INT21H;设置中断向量表MOVDX,OFFSETMAIN;驻留程序的长度INT27H;8.28253/8254可编程定时器/计数器8.2.58253在IBMPC系列机中的应用(8253时钟中断的使用)8253通道0每55ms产生一次类型为8的中断,在INT8中断服务程序中,修改系统时间,从而维护系统的日历和时钟。为利用INT8中断,在其中断程序中有一条指令:INT1CH。因此它与INT8同步,而且不必在结束时执行EOI命令,因为在INT1CH中执行了。用户可以利用INT1CH编写自己的定时程序。例:编写一个驻留程序,每隔1s在屏幕的右上角显示一个数字,在0~9之间变化。MAIN:MOVDX,OFFSETINT1C;中断程序入口MOVAX,251CH;INT21H;设置中断向量表MOVDX,OFFSETMAIN;驻留程序的长度INT27H;8.28253/8254可编程定时器/计数器1)子程序名:SOUND;2)子程序功能:启动8253计数器2产生指定频率的声音并持续指定的时间3)入口条件:DX=产生方波的频率;AX=持续(延时)的时间(ms);4)出口条件:无;5)受影响的寄存器:AX,DX,F。SOUNDPROCPUSHCX;保存CX、SI寄存器PUSHSIPUSHAXMOVSI,DX;频率送SI8.28253/8254可编程定时器/计数器8253在IBMPC系列机中的应用(8253时钟中断的使用)MOVAL,10110110B;将8253计数器2设置为方式3OUT43H,ALMOVDX,0012H;1193180的低位MOVAX,34DCH;1193180的高位DIVSI;1193180/频率=计数值OUT42H,AL;送计数值的低位MOVAL,AH;送计数值的高位OUT42H,ALINAL,61H;读8255A的B口ORAL,03H;允许产生声音OUT61H,AL8.28253/8254可编程定时器/计数器8253在IBMPC系列机中的应用(8253时钟中断的使用)POPAX;恢复延时的时间(ms)MOVDX,1000;变为μsMULDXMOVCX,DXMOVDX,AXMOVAH,86HINT15H;延时POPSIPOPCXRETSOUNDENDP8.28253/8254可编程定时器/计数器8253在IBMPC系列机中的应用(8253时钟中断的使用)*8253的应用练习-多个通道级联,任意周期的方波CLK0OUT0GATE0CLK1OUT1GATE1CLK2OUT2GATE2+5VOUT0OUT11MHz10μs1000μs4ms1000ms8.28253/8254可编程定时器/计数器500ms*8253的应用练习-多个通道级联,占空比可调CLK0OUT0GATE0CLK1OUT1GATE1CLK2OUT2GATE2+5VSRQQOUT0OUT2Q1KHz4ms6ms10ms4ms10ms8.28253/8254可编程定时器/计数器*8253的应用练习-多个通道级联,任意脉宽CLK0OUT0GATE0CLK1OUT1GATE1CLK2OUT2GATE2+5VOUT0OUT11KHz30ms3ms3ms方波8.28253/8254可编程定时器/计数器3ms…..任意脉宽负脉冲第八章8.3MC146818CMOSRAM/实时时钟钟8.1概述习题8.28253/8254可编程定时/计数器8.3.1MC146818的功能•64B的静态存储器,前14个字节用于保存秒、分、小时、星期、日、月、年,及一些状态、控制寄存器。还保存硬件配置参数。(通过程序或BIOS修改其内容)•定时功能,可任意设定时间间隔为30.517us~1天的中断申请。8.3MC146818CMOSRAM/实时时钟MC146818的特点•采用CMOS工艺,功耗小,可用电池供电。•MC146818中数据的存取•利用INT1AH:只能存取时钟信息。例如,将时间设置为12:45,不使用夏时制:movah,03h;movcl,45h;movch,12h;movdh,0;movdl,0;int1ah;•利用汇编语言:如在DEBUG下,O7010/O7110即可删除CMOS的口令。8.3MC146818CMOSRAM/实时时钟*CMOS参数(1)OnboardFDDControler:主板上的软驱控制器,如使用IDE卡上的控制器,则置Disable。OnboardPCIIDEEnable:主板上的IDE控制器,同上。IDEHDDBlockMode:硬盘块传输模式,设置扇区数或Disable。IDEPIOMode:5种模式,代表不同的速度1,2,….,AUTO。OnboardSerialPort或UART:主板上的串形通信接口COM1和COM2,若有内置MODEM,则将相应的串口置Disable。OnboardParallelPort:主板上的打印机接口(378H/IRQ7)。OnboardParallelMode:主板上的并行口工作模式,Normal,EPP,ECP,EPP+ECP模式。USBController:置abled或disabled。*CMOS参数(2)PCIslotIRQ:Auto/Manual(注意不要冲突)PCIIDEIRQ:Auto/Manual(注意不要冲突)PCIIDETriggerType:PCI总线中断控制信号的设置,Edge/Level,若接口无特殊要求则设置为Level。ResourcesControlledBy:设置系统资源(IRQ,DMA)的分配方式,Auto/Manual。PCIIDEIRQMapTo:若主板上插有非PCI总线的IDE卡时设为ISA。PrimaryIDEINTR#:A/SecondaryIDEINTR#:B:设置IDE接口的中断优先级,A优于B。IRQxxUsedByISA:设置某个IRQ(3~15)给ISA总线使用。DMAxUsedByISA:设置某个DMA(1,3,5等)给ISA总线使用。PCILatencyTimer:PCI总线的响应时间(32,64,128等)。与主板有关。第八章习题8.1概述8.3MC146818CMOSRAM/实时时钟钟8.28253/8254可编程定时/计数器1.什么是定时器?什么是计数器?它们之间有何区别?2.8253与8254有何区别?每个通道的3根信号的作用?3.8253有几个通道?这几个通道在PC/XT中各有什么用途及采用什么工作方式?4.INT15H的86号功能实现的延时程序在PC/XT上能否正常运行?为什么?5.利用8253编写一个在PC/XT上能通用的延时程序。习题6.编写能发出音符1、2、3、4、5、6、7的音响程序。7.8253/8254的计数值最大为多少?8.设计一个能为8250产生参考时钟的