资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本教案内容,第,9,章,定时/计数器8253应用设计,8253,的引脚功能及特点,8253的原理结构及工作原理,8253的控制字及工作方式,8253与系统总线的接口方法,8253的应用设计,在采用8253进行定时/计数器设计时,首先应该将它与,CPU,正确连接,在已经设计好8086系统总线情况下,可以直接利用系统总线中的信号与8253连接。,这里给出三种系统总线情况下8253的连接方法:,8086的最小方式,8086的最大方式,IBM PC,系统机,。,8253与系统总线的接口方法,8253与系统总线的接口方法,图,8086最小方式系统总线与8253的连接框图,在8086最小方式总线下,系统总线与8253连接框图如右图所示。图中译码电路根据给定的8253端口地址确定,这里,和,A0,均为低电平有效,而且约定采用,A2、A1,作为8253的内部地址线。图中给出使用偶地址的情况,当采用奇地址时,只需要将图中的地址信号,A0,换成 ,并且将8086总线的,D7D0,换成,D15D8。,图 8086最大方式系统总线与8253的连接框图,在8086最大方式总线下,系统总线与8253连接框图如图9.15所示。与图9.14类似,只是将读写信号变成为 和 。图中给出使用偶地址的情况,当采用奇地址时,只需要将图中的地址信号,A0,换成,并且将8086总线的,D7D0,换成,D15D8。,8253与系统总线的接口方法,在,IBM PC,机系统中,采用8088的最大方式,而且由于系统中包含,DMA,机构,因此,设计端口和存储器的译码电路时,必须是非,DMA,操作模式,即,AEN=0,,这样,,IBM PC,机系统总线与8253连接框图如右图所示。应该注意,系统的数据总线只有8位,故没有,信号。,图,IBM PC,机系统总线与8253的连接框图,8253与系统总线的接口方法,8253的应用设计,例9.1,在以8086构成的最大方式系统中,有一片8254的端口地址分别为301,H、303H、305H,和307,H,,给定的外部时钟为512,kHz。,要求:,(1)利用计数器0产生周期为1,ms,的周期信号,请编写初始化程序;利用这一计数器能产生的最低信号频率为,,这时的时常数,CR0=,。,(2),利用计数器1和2产生如下图所示的周期信号,并编写初始化程序。,(3)画出8253的端口译码电路(地址线只使用,A0A9),及其连接图。,图 8253所要产生的周期信号,解:设给定的外部时钟为,CLK,,其周期,T=1/512kHz=1.953125s。,(1),为了得到1,ms,的周期信号,因此计数器0应该采用方式2或方式3,其时常数,CR0=1ms/1.953125s=512。,利用这个计数器分频时,其最大的分频次数为62256,这时得到最低的频率为512,kHz/62256,,即约为8.22,Hz。,(2),为了产生如图9.17所示的周期信号,应该采用方式2,但在方式2下,其低电平时间仅为一个时钟周期,因此,利用一个计数通道无法实现这个任务。现在采用计数器1和计数器2联合,先利用计数器1产生周期为1.5,ms,的周期信号,然后将输出,OUT1,信号作为计数器2的时钟输入,CLK2,,这样可以实现题目的要求。,对于计数器1,工作方式可以选用方式2或方式3,一般采用方式3,这样可以使产生的信号(近似)对称,其时常数,CR1=1.5ms/1.953125s=768,,需要采用16位的时常数表示。对于计数器2,工作方式只能选用方式2,其时常数,CR2=(3s+1.5ms)/1.5ms=3001,也需要采用16位的时常数表示。,8253的应用设计,8253的应用设计,8253的初始化程序段如下:,MOVDX,307H;,写计数器1方式控制字,MOV AL,0111 0110B,OUT DX,AL,MOV DX,303H;,写计数器1时常数,MOV AX,768,OUT DX,AL,XCHG AL,AH,OUT DX,AL,MOV DX,307H;,写计数器2方式控制字,MOV AL,1011 0100B,OUT DX,AL,MOV DX,305H;,写计数器2时常数,MOV AX,3001,OUT DX,AL,XCHG AL,AH,OUT DX,AL,(3)根据上面分析和题目给定的条件,可以画出8253的地址译码电路和连接图,如下图所示。,8253的应用设计,图9.18 8253的地址译码电路及其连接图,8253的应用设计,例9.2 设8253的端口地址为260,H263H,,外部时钟信号为1,MHz,,要求产生如下图所示的周期波形,画出8253的连接图,并编写初始化程序段。,图 8253所要产生的周期信号,解:本题仅采用8253的三个计数通道来实现。分两步实现:(1)由于要产生周期信号,因此必定包含方式2或方式3,我们采用方式3产生周期为1,s+12ms=1012ms,的方波信号,题目给定的外部时钟为1,MHz,,这时需要的分频系数(即时常数)为:1012,ms/1s=1012000,,显然,通过一个计数通道无法实现,所以,采用计数器0和计数器1联合产生,CR0=1000,CR1=1012,,这样,OUT1,的周期为1,ms。,(2),利用计数器2的方式1实现单脉冲形成,以此作为要求产生信号的低电平,其时常数,CR2=1s/1ms-1=999,计数器0的,OUT0,信号作为计数器2的时钟输入信号,,OUT1,作为计数器2的硬件触发信号,确保周期为1012,ms。8253,的连接图如图9.20所示,各个,OUT,端产生的信号如下图所示。,图,OUT,端产生的信号,8253的应用设计,图 8253的连接图,例9.3 有一个未知频率的对称周期信号,s(t)(,频率范围在100,Hz2kHz,之间),现在8086最小系统中已经设计了一片8253,其端口地址为380,H、382H、384H,和386,H,,外部可以使用的标准信号源为1,MHz,,设计测量输入,s(t),信号的频率,并将结果保存在,SFR,字单元中。,8253的应用设计,解:测量信号频率的方法有两种:计数法和测周期法,所谓计数法是指在一个确定的时间,t,内测出,s(t),的脉冲个数,N,,这样,s(t),的周期约为,t/N,,要求,t,足够长,使,N100。,所谓测周期法是指在,s(t),的一个周期内测出已知标准周期信号(设周期为,T0),周期数,N,,则,s(t),的周期约为,NT0,,这种方法也要求,N100,,即基准频率信号的周期足够短。,根据题目给定的信号,这里应该采用测周期法,基准频率信号为1,MHz,T0=1 s。,由于题目给定被测信号,s(t),为对称的周期信号,因此只需要测量半个周期,Th,,,根据给定的频率范围可以计算出250,s,Th,5000s,,这样可以保证测出的周期数250,N5000,,确保测量的精度要求。,利用计数器0实现输入信号,s(t),频率的测量,将基准信号1,MHz,加到,CLK0,端,,s(t),加到,GATE0,端,并同时将,s(t),连接到8259的中断请求,TR0,端,8253的连接图如图9.22所示。信号频率测量关系如图9.23所示。计数器采用方式2,时常数取最大值,这样当,GATE0,端有上升沿查询时,可以启动计数器进行“减1”计数,当,GATE0,出现低电平时,暂停计数,并一直保留到,CPU,产生中断,在中断服务子程序中可以读取计数值,与初值相减后再加1就可以得到,s(t),半周期内所包含的基准周期数。,图 信号频率测量关系,8253的应用设计,图 信号频率测量连接图,8253的初始化程序段如下:,MOVDX,386H ;,写计数器0方式控制字,MOV AL,0011 0100B,OUT DX,AL,MOV DX,380H ;,写计数器0时常数,MOV AL,0,OUT DX,AL,OUT DX,AL,STI ;,开中断,中断服务子程序的主要内容为:,PUSH AX,PUSH BX,PUSH DX,MOV DX,386H;,发计数器0的锁存命令,MOV AL,0000 0000B,OUT DX,AL,MOV DX,380H;,读计数值,IN AL,DX,XCHG AL,AH,IN AL,DX,XCHG AL,AH,NEG AX,INC AX,MOV BX,AX ;,计算信号频率,MOV DX,000FH,MOV AX,4240H,DIV BX,MOV SFR,AX ;,保存信号频率,POP DX,POP BX,POP AX,IRET,例94 利用8253产生可变频率的时钟信号,y(t),,外部基准时钟为1,MHz,,要求根据键盘输入的2位十进制数,产生100种时钟信号,其分频系数分别是基准信号的2分频101分频。,解:这里只需要一个计数器,设采用计数器0,其,CLK0,接外部基准时钟1,MHz,GATE0,接+5,V,OUT0,即为产生的时钟信号,y(t)。,工作方式设置成方式3,其时常数为输入十进制数加2。,设在数据段已经定义好键盘缓冲区,KB_BUFF:,KB_BUFF DB 10,DB?,DB 10 DUP(?),设8253的控制字寄存器地址为,COUNTD,,计数器0的端口地址为,COUNTA,,则8253的应用程序段如下:,MOVDX,COUNTD ;,写计数器0方式控制字,MOV AL,0001 0110B,OUT DX,AL,8253的应用设计,INPUT:,MOV AH,0AH;,输入2位十进制数,LEA DX,KB_BUFF,INT 21H,MOV CL,KB_BUFF+1;,取出输入个数,CMP CL,2,JA INPUT;,输入个数超出2个时,无效,MOV AL,KB_BUFF+2;,取出十位,SUB AL,30H,JC INPUT ;,非数字时,无效,CMP AL,9,JA INPUT ;,非数字时,无效,MOV CL,KB_BUFF+3;,取出个位,SUB CL,30H,JC INPUT ;,非数字时,无效,CMP CL,9,JA INPUT ;,非数字时,无效,MOV BL,10;,十进制数变换成二进制数,MUL BL,ADD AL,CL,ADD AL,2;,修正,MOV DX,COUNTA;,写计数器0时常数,OUT DX,AL,JMP INPUT,例95 在一个由8086构成的最小方式系统中,周期执行某一段程序(设用子程序,MAIN_PROC,表示),设,MAIN_PROC,子程序的执行时间为15,ms,,要求设计一片8253(端口地址为20,H27H,中的偶地址),外部基准时钟为100,kHz,,完成当程序执行异常时,自动进行复位操作。,解:当程序正常执行时,每次执行,MAIN_PROC,子程序的时间为15,ms,,如果一旦程序执行异常,则执行,MAIN_PROC,子程序的时间必定会超过15,ms,,根据这一点可以判定程序执行是否正常。,8086,CPU,的,RESET(,复位)端为高电平时,可以使,CPU,得到复位,为此可以采用8253计数器的方式0实现程序执行异常的检测。,8253的应用设计,图 8253的连接图,图 程序执行异常的检测时序示意图,如图所示。我们在每次调用子程序,MAIN_PROC,之前都写入计数器的时常数,这样,两次写时常数的时间间隔为15,ms。,然后计数器0工作在方式0,其时常数确定的定时时间为18,ms,,即时常数为 18,ms/0.1ms-1=179。,这样,在程序执行正常情况下,写入时常数后执行,MAIN_PROC,子程序,还没有达到定时的时间,又会写入时常数,从而确保,OUT0,端一直为低电平;当程序执行异常情况下,写入时常数后执行,MAIN_ PROC,子程序,由于程序执行异常,未能按时返回到主程序,当达到18,ms,时(如图虚线表示),就会在,OUT0,产生上升沿,通过处理后,可以
展开阅读全文