微机原理与接口技术_CH8.2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

21:22微机原理与接口技术第十九讲21:222第八章可编程计数器/定时器8253及其应用8-18253工作原理内部结构与引脚信号初始化编程步骤和门控信号的功能8253的工作方式8-28253的应用举例定时功能计数功能内容提要21:223§8-28253的应用举例一、8253定时功能的应用例子1.用8253产生各种定时波形在某个以8086为CPU的系统中使用了一块8253芯片,通道的基地址为310H,所用的时钟脉冲频率为1MHz。要求3个计数通道分别完成以下功能:⑴通道0工作于方式3,输出频率为2kHz的方波;⑵通道1产生宽度为480us的单脉冲;⑶通道2用硬件方式触发,输出单脉冲,时间常数为26。21:2241.用8253产生各种定时波形§8-28253的应用举例A4A3A0A5M/IOA7A6A9A8A2A1RDWRD7~D08086CPU74LS138GATE0OUT0CLK0CLK1CLK2GATE1OUT1GATE2OUT2A1A0RDWRD7~D0CS1MHz方波5V2KHz方波480ms宽脉冲单脉冲G1G2BG2ACBAY4825321:2251.用8253产生各种定时波形§8-28253的应用举例①8253片选信号CS由74LS138构成的地址译码电路产生,只有当M/IO=0,A9A8A7A6A5=11000时,译码器才能工作,当A4A3A0=100时,Y4=0,使8253的片选信号CS有效,选中偶地址端口,端口基地址为310H。CPU的A2A1分别与8253的A1A0相连,用于8253芯片内部寻址,使8253的4个端口地址分别为310H、312H、314H和316H。8253的8根数据线D7~D0必须与CPU的低8位数据总线D7~D0相连。另外,8253的RD、WR脚分别与CPU的相应引脚相连。3个通道的CLK引脚连在一起,均由频率为1MHz(周期为1µs)的时钟脉冲驱动。21:2261.用8253产生各种定时波形[续]②通道0:工作于方式3,即构成一个方波发生器,它的控制端GATE0须接+5V,为了输出2kHz的连续方波,应使时间常数:N0=1MHz/2kHz=500。③通道1:工作于方式1,即构成一个单稳态电路,由GATE1的正跳变触发,输出一个宽度由时间常数决定的负脉冲。此功能一次有效,需要再形成一个脉冲时,不但GATE1脚上要有触发,通道也需重新初始化。需输出宽度为480us的单脉冲时,应取时间常数:N1=480us/1us=480。④通道2:工作于方式5,即由GATE2的正跳变触发减1计数,在计到0时形成一个宽度与时钟周期相同的负脉冲。此后,若GATE2脚上再次出现正跳变,又能产生一个负脉冲。这里假设预置的时间常数为26。§8-28253的应用举例21:227对3个通道的初始化程序如下:;通道0初始化程序MOVDX,316H;控制口地址MOVAL,00110111B;通道0控制字,先读写低字节,;后高字节,方式3,BCD计数OUTDX,AL;写入方式字MOVDX,310H;通道0口地址MOVAL,00H;低字节OUTDX,AL;先写入低字节MOVAL,05H;高字节OUTDX,AL;后写入高字节§8-28253的应用举例21:228通道1初始化程序MOVDX,316H;控制口地址MOVAL,01110011B;通道1控制字,先读写低字节,;后高字节,方式1,BCD计数OUTDX,AL;写入方式字MOVDX,312H;通道1口地址MOVAL,80H;低字节OUTDX,AL;先写入低字节MOVAL,04H;高字节OUTDX,AL;后写入高字节§8-28253的应用举例21:229通道2初始化程序MOVDX,316H;控制口地址MOVAL,10011011B;通道2控制字,只读写低字节,;方式5,BCD计数OUTDX,AL;写入方式字MOVDX,314H;通道2口地址MOVAL,26H;低字节OUTDX,AL;只写入低字节§8-28253的应用举例21:22102.控制LED的点亮或熄灭用8253来控制一个LED发光二极管的点亮和熄灭,要求点亮10秒钟后再让它熄灭10秒钟,并重复上述过程。加上适当的驱动电路后,便可以用在交通红绿灯控制和灯塔等场合。§8-28253的应用举例CLK0GATE0OUT0OUT1RDWRD7~D0CS2MHz方波5V400HzI/O译码A7~A08253GATE1CLK1A1A0A2A1RDWRM/IOD15~D821:22112.控制LED的点亮或熄灭①假设这是一个8086系统,8253的各端口地址为81H、83H、85H和87H。8253的8根数据线D7~D0与CPU的高8位数据线D15~D8相连,这样选中奇地址端口。②通道1的OUT1与LED相连,当它为高电平时,LED点亮,低电平时LED熄灭。只要对8253编程,使OUT1输出周期为20秒,占空比为1:1的方被,就能使LED交替地点亮和熄灭10秒钟。若将频率为2MHz(周期为0.5us)的时钟直接加到CLK1端,则OUT1输出的脉冲周期最大只有32.768ms,达不到20秒的要求。为此,需用几个通道级连的方案来解决问题。§8-28253的应用举例21:22122.控制LED的点亮或熄灭③将频率为2MHz的时钟信号加在CLK0输入端,并让通道0工作于方式2。若选择计数初值N0=5000,则从OUT0端可得到序列负脉冲,其频率为2MHz/5000=400Hz,周期为2.5ms。再把该信号连到CLK1输入端,并使通道1工作于方式3。为了使OUT1输出周期为20秒(频率为1/20=0.05Hz)的方波,应取时间常数N1=400Hz/0.05Hz=8000。§8-28253的应用举例CLK0GATE0OUT0OUT1RDWRD7~D0CS2MHz方波5V400HzI/O译码A7~A08253GATE1CLK1A1A0A2A1RDWRM/IOD15~D821:2213初始化程序如下:MOVAL,00110101B;通道0控制字,先读写低字节,;后高字节,方式2,BCD计数OUT87H,AL;写入方式字MOVAL,00H;低字节OUT81H,AL;先写入低字节MOVAL,50H;高字节OUT81H,AL;后写入高字节MOVAL,01110111B;通道1控制字,先读写低字节,;后高字节,方式3,BCD计数OUT87H,AL;写入方式字MOVAL,00H;低字节OUT83H,AL;先写入低字节MOVAL,80H;高字节OUT83H,AL;后写入高字节§8-28253的应用举例21:22141.硬件电路设计假设一个自动化工厂需要统计在流水线上所生产的某种产品的数量,可采用8086微处理器和8253等芯片来设计实现这种自动计数的系统。这种自动计数系统的电路和控制软件的设计如下:二、8253计数功能的应用例子§8-28253的应用举例21:22151.硬件电路设计【说明】①这个自动计数系统由8086CPU控制,用8253作计数器。此外,还要用到一片8259A中断控制器芯片和若干其它电路。图中仅给出了计数器部分的电路图,8086和8259A未画在图上。②电路由一个红外LED发光管、一个复合型光电晶体管、两个施密持触发器74LS14及一片8253芯片等构成。用8253的通道1来进行计数。③工作过程如下:当LED发光管与光电管之间无工件通过时,LED发出的光能照到光电管上,使光电晶体管导通,集电极变为低电平。此信号经施密持触发器驱动整形后,送到8253的CLK1,使8253的CLK1输入端也变成低电平。当LED与光电管之间有工件通过时,LED发出的光被它挡住,照不到光电管上,使光电管截止,其集电极输出高电平,从而使CLK1端也变成高电平。待工件通过后,CLK1端又回到低电平。§8-28253的应用举例【计数功能】21:22161.硬件电路设计【说明】§8-28253的应用举例【计数功能】这样,每通过一个工件,就从CLK1端输入一个正脉冲,利用8253的计数功能对此脉冲计数,就可以统计出工件的个数来。两个施密持触发反相器74LS14的作用,是将光电晶体管集电极上的缓慢上升信号,变换成满足计数电路要求的TTL电平信号。④8253的片选输入CS端接到I/O端口地址译码器的一个输出端,RD和WR端分别与CPU的RD和WR信号相连。8253的数据线D7~D0与CPU的低8位地址线相连,这时I/O端口地址必须是偶地址,所以把A1和A0分别与CPU地址总线的A2和A1相连。8253通道1的门控输入端GATE1接+5V高电平,即始终允许计数器工作。通道1的输出端OUT1接到8259A的一个中断请求输入端IR0。21:22172.初始化编程①编程时,可选择计数器1工作于方式0,按BCD码计数,先读/写低字节,后读/写高字节,根据图9-3可得到控制字为01110001B。②如选取计数初值n=499,则经过n+1个脉冲,也就是500个脉冲OUT1端输出一个正跳变。它作用于8259A的IR0端,通过8259A的控制,向CPU发出一次中断请求,表示计满了500个数,在中断服务程序中使工件总数加上500。中断服务程序执行完后,返回主程序,这时需要由程序把计数初值499再次装入计数器1,才能继续进行计数。§8-28253的应用举例【计数功能】21:22182.初始化编程设8253的4个端口地址分别为F0H,F2H.F4H和F6H,则初始化程序为:MOVAL,01110001B;控制字OUT0F6H,ALMOVAL,99HOUT0F2H,AL;计数值低字节送计数器1MOVAL,04HOUT0F2H,AL;计数值低字节送计数器1§8-28253的应用举例【计数功能】21:22193.计数值的读取(1)在读计数器现行值时,计数过程仍在进行,而且不受CPU的控制。因此,在CPU读取计数器的输出值时,可能计数器的输出正在发生改变,即数值不稳定,可能导致错误的读数。为了防止这种情况发生,必须在读数前设法终止计数或将计数器输出端的现行值锁存。可采用下面两种方法:方法一:在读数前用外部硬件切断计数脉冲信号,或者使门控信号变为低电平,迫使8253停止计数。这种方法的缺点是需要硬件电路配合。此外,由于外部事件源被切断或正常的计数过程被禁止,干扰了实际的计数过程。方法二:先用计数器锁存命令锁存现行计数值,然后将它读出。由于每个计数通道都有一个16位输出锁存器,可在任何时刻将计数器的现行值锁住。§8-28253的应用举例【计数功能】21:22203.计数值的读取(2)当需要读取计数器的现行值时,先向8253送一个控制字,并使控制字中的RL1RL0=00,现行计数值立即被锁存起来。该控制字中的SC1SC0用来确定要锁存的是3个计数器中的哪一个。控制字的低4位对锁存命令无影响,可以将它们置为0。读取计数值的方法由对8253进行初始化编程时所写入的控制字中的RL1RL0位来确定,当RL1RL0=01时,只读取计数器的低字节,RL1RL0=10时,只读取计数器的高字节,RL1RL0=11时,先读写计数器低字节,后读写高字节。比较起来,第二种方法完全由软件实现,并可随时读取计数值,而且不会干扰正常的计数过程和引起错误,是常用的方法。§8-28253的应用举例【计数功能】21:22213.计数值的读取(3)上例中,在要读取箱子中的现行工件数时,可执行下面的程序段:MOVAL,01000000B;锁存计数器1命令MOVDX,0F6H;控制口OUTDX,AL;发锁存命令MOVDX,0F2H;计数器1INAL,DX;读取计数器1的低8位MOVAH,AL;保存低8位数INAL,DX;读取计数器1的低高位XCHGAH,AL;将计数值置于AX中§8-28253的应用举例【计数功能】21:22223.计数值的读取(4)在计数器的锁存命令发出后,锁存的计数值将保持不变,直至被读出为止。计数值从锁存器读出后,数值锁存状态即被自动解除,输出锁存器的值又将随计数器的值而变化。利用这种方法读取8253

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功