芯片解析学习.pptx
学 习 目 的通过对本章的学习,您应该能够达到下列要求:了解定时基本概念熟悉可编程计数器/定时器8253的外部特性熟悉可编程计数器/定时器8253工作模式熟悉可编程计数器/定时器8253初始化第1页/共56页重 点8253的外部特性8253工作模式8253初始化第2页/共56页8.1 定时基本概念一.定时与计数二.微机中的定时方法软件定时延迟子程序硬件定时用计数器/定时器82538.1:定时基本概念定时基本概念第3页/共56页例8.1:软件定时的例子:编写一个软件定时程序,要求定时20ms.假设:8086的时钟=8MHz,一个时钟周期T=1/8MHz=0.125us延时20ms,执行PUSHF,POPF指令:需要循环次数:N=20000/(12+14+17)*0.125 =37209参考程序:MOV CX,37209PUSHF ;时钟数:14TPOPF ;时钟数:12TLOOP ;时钟数:17/5T8.1:软件定时的例子软件定时的例子第4页/共56页误差修正:(15+12+19)*0.125=5.75ms 写成子程序:写成子程序:DELAY:PUSH CX MOV CX,37209 L:PUSHF POPF LOOP L POP CX RETPUSH CX ;15TPOP CX ;12TRET ;时钟数时钟数:19T8.1:软件定时的例子软件定时的例子第5页/共56页主要程序片段LP:CALLDELAY MOVDL,30H MOVAH,02H;DOS调用,显示一个字符 INT21H INCDL LOOPLP MOVAH,4CH INT21HDELAYPROCNEAR;软件延时子程序PUSHAXMOVCX,0FFFFHL:PUSHFPOPFLOOPLDO:POPAXRETDELAYENDP8.1:软件定时的例子软件定时的例子第6页/共56页8.2 可编程计数器/定时器8253/8254PIT(Programmable Interval Timer)8253:最高计数速率:2.6Mhz8254:最高计数速率:8.0Mhz8253与8254引脚相同,用法相同8.2:可编程计数器可编程计数器/定时器定时器8253第7页/共56页8.2.1 8253外部特性与内部编程结构计数器/定时器8253特点三个独立1616位计数器6 6种工作方式二进制计数与BCDBCD码计数单一5V5V供电最高计数速率2.6Mhz(8253),8Mhz(8254)2.6Mhz(8253),8Mhz(8254)片内寻址 A1 A0=00、01、10、11 对应:通道0、1、2和控制口地址第8页/共56页一.外部特性1、8253、8254引脚8.2:8253外部特性外部特性第9页/共56页与CPU相连的信号:数据线D7D0,读RD,写WR,片选CS,地址线A0,A18253GATE0 OUT0 CLK05V8088CPU1KHzD078253运行原理图译码地址M/IOCSWRRDA0A1A0A1WRRD8.2:8253外部特性外部特性第10页/共56页1).数据总线缓冲器 往计数器设置计数初值;从计数器读取计数值;往控制寄存器设置控制字。2).读/写逻辑电路 A1 A0:端口选择 0 0:通道0(0号计数器)0 1:通道1(1号计数器)1 0:通道2(2号计数器)1 1:控制字寄存器8.2:8253外部特性外部特性第11页/共56页3).控制命令寄存器(8位)4).定时器/计数器:三个16位独立通道:计数器0,计数器1,计数器2每个通道包含:计数初值寄存器(16位)减一寄存器(16位)当前计数初值锁存器(16位)8.2:8253外部特性外部特性第12页/共56页二、编程结构:二、编程结构:1、8253定时器原理定时器原理8086控制寄存器存放控制字计数初值寄存器存放计数初值或定时常数减一计数器输出锁存器8.2:8253编程结构编程结构第13页/共56页读写控制地址控制片选控制控制寄存器三个独立通道脉冲输入门控信号输出2、8253编程结构编程结构8.2:8253编程结构编程结构第14页/共56页提问:8253有几个定时通道?8253每个计数通道与外设接口有哪些信号线,每个信号的用途是什么?定时/计数器芯片Intel8253占用几个端口地址?各个端口分别对应什么?8.2:提问提问第15页/共56页 3.计数器计数器/定时器的工作特点 1)门脉冲控制时钟输入;2)用门脉冲来重新启动计数;3)用门脉冲停止计数;4)单一计数;5)循环计数.8.2:工作特点工作特点第16页/共56页4.4.计数初值计数初值计数初值n =时钟频率fc/输出频率fout =定时时间Tout/时钟脉冲周期Tc5.5.编程命令编程命令方式命令字对8253初始化方式命令字的格式 8.2:8253编程命令编程命令第17页/共56页8.2.2 8253控制字格式8.2:8253控制字格式控制字格式 SC1 SC0 RW1 RW0 M2 M1 M0 BCD1-计数值为BCD码格式0-计数值为二进制格式M2 M1 M0 模式选择 0 0 0 模式0 0 0 1 模式1 /1 0 模式2/1 1 模式3 1 0 0 模式4 1 0 1 模式50 0-对计数器进行锁存0 1-只读/写低8位字节 1 0-只读/写高8位字节1 1-先读/写低8位字节,再读/写高8位字节.0 0-选计数器00 1-选计数器11 0-选计数器21 1-无意义第18页/共56页8253初始化方法:设置控制字;确定计数初值。例8.2:使2号定时器,工作在方式3,计数初值=533h,二进制计数.试写出8253初始化程序段.8253端口地址:40H,41H,42H,43HMOVAL,10110110B;2号定时器,方式3OUT43H,ALMOVAX,0533HOUT42H,AL;2号数据口MOVAL,AHOUT42H,AL8.2:8253控制字格式控制字格式第19页/共56页 9.2.3 8253的工作模式方式0计数结束产生中断一次定时或计数,重写初值,启动新一轮的计数 方式1可编程的单脉冲(单稳)触发器 GATE边沿触发,启动新一轮计数方式2分频器(速度波发生器)具有计数初值重装能力方式3方波发生器具有计数初值重装能力 方式4软件触发的选通信号发生器 一次定时,重写初值,启动新一轮的计数 方式5硬件触发的选通信号发生器 GATE边沿触发新一轮计数8.2:8253工作模式工作模式第20页/共56页方式0计数结束产生中断(一次定时或计数,重写初值,启动新一轮的计数)8.2:8253工作模式工作模式0第21页/共56页例8.3:使1号定时器,工作在方式0,计数初值=0FF5h,二进制计数.试写出8253初始化程序段.8253端口地址:40H,41H,42H,43HMOV AL,01110000B ;1号定时器,方式0OUT 43H,ALMOV AX,0FF5H OUT 41H,AL ;1号数据口 MOV AL,AHOUT 41H,AL8.2:8253工作模式工作模式0第22页/共56页高方式1_单脉冲触发器(GATE边沿触发,启动新一轮计数)8.2:8253工作模式工作模式1第23页/共56页方式2-分频器(具有计数初值重装能力)8.2:8253工作模式工作模式2第24页/共56页方式3-方波发生器(具有计数初值重装能力)8.2:8253工作模式工作模式3第25页/共56页例8.4:使0号定时器,工作在方式3,计数初值N=1000,二进制计数,试写出8253初始化程序段.8253端口地址:40H,41H,42H,43HMOV AL,10110110B ;2号定时器,方式3OUT 43H,ALMOV AX,1000 OUT 40H,AL ;0号数据口 MOV AL,AHOUT 40H,AL8.2:8253工作模式工作模式3第26页/共56页方式4-软件触发的选通信号发生器8.2:8253工作模式工作模式4第27页/共56页方式5-硬件触发的选通信号发生器8.2:8253工作模式工作模式5第28页/共56页例8.5:读当前计数值:由于在计数过程中,减1计数器不断变化,当前计数值必须先锁存到输出锁存器中,方可读出。要锁存,必须再次设置控制字。MOVAL,10000110B ;2号定时器,锁存命令OUT43H,ALINAL,42H;先读低字节MOVBL,AL;存低字节到BLINAL,42H;后读高字节MOVBH,AL;存高字节到BH8.2:读当前计数值读当前计数值第29页/共56页提问:8253有几种工作方式?什么是软件触发?什么是硬件触发?可重装初值的工作方式是哪些?8.2:8253工作模式工作模式第30页/共56页8.3 8253应用举例【例8.8】设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据。在系统中,采用8253定时器0来实现这一要求。将8253芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8253的端口地址为210H213H,如图8.14所示。第31页/共56页(1)定时器工作在方式2(2)确定计数初值已知=10kHz,则=0.1ms,计数初值:n=/=100ms/0.1ms=1000=03E8H第32页/共56页MOV DX,213HMOV AL,34H;计数器0,16位计数,方式2,二进制计数OUT DX,AL;写入方式控制字到控制字寄存器MOV DX,210HMOV AL,0E8H;计数初值低8位OUT DX,AL;写入计数初值低8位到计数器0MOV AL,03H;计数初值高8位OUT DX,AL;写入计数初值高8位到计数器0第33页/共56页【例8.10】已知某8253占用I/O空间地址为40H43H,设定时器0、定时器1工作于方式3,外部提供一个时钟,频率f=2MHZ。要求定时器1连续产生5ms的定时信号,定时器0连续产生5秒的定时信号。1).一个定时器的最大定时时间:65536/(2*106)=0.032768s=32.768ms因此一个定时器不能完成5s定时!解决办法:将定时器0与定时器1串连使用,定时器1方式3。8.3:8253应用举例应用举例第34页/共56页8.3:8253应用举例应用举例地址译码CPUD7D0AB8253两个定时器串连使用每每5ms产生一个脉冲产生一个脉冲第35页/共56页2).将定时器将定时器1的的CLK1接接2MHZ时钟,计数初值:时钟,计数初值:3).将定时器将定时器1的的OUT1端接到定时器端接到定时器0的的CLK0端端,定时器定时器0的计数初值的计数初值:第36页/共56页8253初始化程序:MOV AL,00110110B ;0号定时器,方式3OUT 43H,ALMOV AX,1000OUT 40H,ALMOV AL,AHOUT 40H,AL MOV AL,01110110B ;1号定时器,方式3OUT 43H,ALMOV AX,10000OUT 41H,ALMOV AL,AHOUT 41H,AL8.3:8253应用举例应用举例第37页/共56页8.3.2 8253在微机系统中的应用第38页/共56页【例8.11】利用PC机的硬件定时8253编制稳定延时5秒的定时程序。(1)分析系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率f=1.1931816MHz。定时器0输出方波的频率:fout=1.1931816/65536=18.2Hz输出方波的周期Tout=1/18.2=54.945ms可用55945ms作基本计时单位.1天=24*60*60*1000ms/54.945=1573040(计时单位)=001800B0H同理:1小时=65543(计时单位)1分钟=1092(计时单位)1秒=18.2(计时单位)系统提供1CH中断,作为用户引用定时器中断的中断类型码。第39页/共56页 PC机在BIOS中开辟了两个双字变量,用于记录中断次数,即每次中断,就使双字变量加一。当累计满001800B0H个计时单位时,刚好是24小时。而BIOS功能调用INT 1AH/00H提供了读取当前计时单位的方法,其中计时单位(54.945ms)的计数在DL中。(2)设计 要取得计时单位,利用BIOS功能调用INT 1AH/00H,可以获得计时单位(中断次数)。现在我们要取得5秒定时,需要5000/54.945=91个计时单位。用INT 21H/02H模拟显示5秒的变化,为简单起见,在屏幕上以5秒间隔从0到9循环显示。参考程序如下:DATA SEGMENTSED DB 0DATA ENDS STACK SEGMENT STACK DW 64 DUP(0)STACK ENDS 第40页/共56页CODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART:MOV AX,DATAMOV DS,AXGOT:MOV AH,00HINT 1AH;BIOS调用,取计时单位(55ms),在DXADD DL,91 ;定时5s,需要91个计时单位 MOV BL,DLLOP:MOV AH,00HINT 1AHCMP DL,BL;是否累计到5秒?JNZ LOP;没到,继续读MOV DL,SED;到5秒,准备显示MOV AH,02H ;DOS调用,显示一个字符INT 21HINC SEDCMP SED,9JNA GOT MOV SED,0JMP GOTMOV AH,4CHINT 21HCODE ENDSEND START第41页/共56页8.3.2 时钟原理82538259GATE0OUT0CLK05V8086IR01.1931816MHzINTINTRINTAD07D078号中断图2 时钟运行原理图8.3:8253应用举例应用举例第42页/共56页系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率f=1.1931816MHz。定时器0输出方波的频率:fout=1.1931816/65536=18.2Hz输出方波的周期Tout=1/18.2=54.945ms可用55945ms作基本计时单位.1天=24*60*60*1000ms/54.945=1573040(计时单位)=001800B0H同理:1小时=65543(计时单位)1分钟=1092(计时单位)1秒=18.2(计时单位)系统提供1CH中断,作为用户引用定时器中断的中断类型码。8.3:8253应用举例应用举例第43页/共56页例8.7:假设8253输出OUT0接中断控制器8259的输入端IR0,写出8253初始化程序,参考时钟中断服务程序框架。COUNT DB 0 ;累计1秒所需计时单位S1 DW 0 ;秒单元M1 DW 0;分单元8253定时器0工作于方式3,初始化程序:CW0 DB 00110110BMOVAL,CW0OUT43H,AL;初始化8253MOVAX,0OUT40H,AL;送计数初值65536MOVAL,AHOUT40H,AL第44页/共56页定时器0中断服务程序框架:TIMER:INC COUNT CMP COUNT,18 JNZ EXIT ;不满1秒转 INC S1;秒单元加1 MOV COUNT,0 ;清秒计数单元 CALL 更新显示秒 CMP S1,60 ;满60秒?JNZ EXIT ;不满60秒转 MOV S1,0;清S1 INC M1 ;分单元加1 CALL 更新显示分 EXIT:IRET ;退出中断 9.3:8253应用举例应用举例第45页/共56页例8.8:利用1CH中断号,编写程序,以秒为单位交叉显示0,1。DATA SEGMENTOFF_0 DW?;中断向量偏移地址SEG_0 DW?;中断向量段地址DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAstart:MOV AX,DATA ;Initial MOV DS,AX;取原IR0中断向量 MOV AX,351CH ;取原中断向量 INT 21H MOV SEG_0,ES ;保存原中断向量 MOV OFF_0,BX 8.3:8253应用举例应用举例第46页/共56页;设置新中断向量 CLI PUSH DS MOV DX,OFFSET NEWIR0 MOV AX,SEG NEWIR0 MOV DS,AX MOV AH,25H MOV AL,1CH INT 21H POP DS STIMOV BX,3031H;准备显示字符MOV CX,0;计数设为0 W1:NOP JMP W1 ;转W1,等待中断 8.3:8253应用举例应用举例第47页/共56页;恢复原中断 cli MOV DX,OFF_0 PUSH DS MOV DS,SEG_0 MOV AX,251CH INT 21H POP DS STI MOV AX,4C00H ;返回DOS INT 21H 8.3:8253应用举例应用举例第48页/共56页;新中断服务程序NEWIR0 PROC FAR ;新IRQ0中服程序 PUSH AX ;保护现场 INC CL ;1/18S,CMP CL,18 ;满1秒?,否,继续累计 JB L1 MOV CL,0 XCHG BH,BL;满1秒,交换显示0,1 MOV AL,BL ;要显示字符送AL MOV AH,0EH ;BIOS调用,显示一个字符 INT 10HL1:POP AX IRETNEWIR0 ENDPCODE ENDS END START8.3:8253应用举例应用举例第49页/共56页 提问:CPU怎样寻找中断服务程序的入口地址?中断向量如何设置?第50页/共56页本章小结定时方法8253的外部特性,与CPU的连接8253的工作方式8253的初始化编程8253的应用本章小结第51页/共56页本章作业1,3,5,6,7第52页/共56页习题88.1定时和计数有哪几种实现方法?各有什么特点?8.2试说明定时器/计数器芯片Intel8253的内部结构。8.3设8253计数器02和控制字的I/O地址依次为F8HFBH,说明如下程序的作用。MOVAL,33HOUT0FBH,ALMOVAL,80HOUT0F8H,ALMOVAL,50HOUT0F8H,AL8.48253每个计数通道与外设接口有哪些信号线,每个信号的用途是什么?第53页/共56页8.5定时/计数器芯片Intel8253占用几个端口地址?各个端口分别对应什么?8.68253每个通道有6种工作方式可供选择。若设定某通道为方式0后,其输出引脚为低电平;当通道开始计数,信号端每来一个脉冲就减1;当减到0,则输出引脚输出高电平,表示计数结束。8253的CLK0接1.5MHZ的时钟,欲使OUT0产生频率为300kHZ的方波信号,则8253的计数值应为_,应选用的工作方式是3。n=1500000/300000=58.7试按如下要求分别编写8253的初始化程序,已知8253的计数器02和控制字I/O地址依次为04H07H。(l)使计数器11作在方式0,仅用8位二进制计数,计数初值为128。(2)使计数器O工作在方式1,按BCD码计数,计数值为3000。(3)使计数器2工在方式2,计数值为02F0H。第54页/共56页8.8设一个8253的计数器0产生20ms的定时信号,试对它进行初始化编程。8.9让一个计数器3工作在单稳态方式,让它产生脉冲宽度为15ms(设输入频率为2MHz)。8.10请把一个8253与8086CPU相连,地址为2FF02FF3H。第55页/共56页感谢您的欣赏第56页/共56页