南京邮电大学微机接口与原理课件第11章

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

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

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

资源描述

第11章可编程定时器/计数器8254定时器/计数器计算机中的定时和延时控制、对外部事件或信号的计数软件方法固定时间的硬件定时可编程的硬件定时计算机系统中采用可编程定时/计数器I8253和I82548254内部集成了3个16位的计数器,每个计数器有6种工作方式,计数初值可设定为二进制或BCD码。最高工作频率10兆。一.8254内部结构(24脚)数据总线缓冲器读写控制控制字寄存器0号计数器1号计数器2号计数器RDWRA0CSA1D7~0GATE0OUT0CLK0GATE1OUT1CLK1GATE2OUT2CLK2数据总线缓冲器读写控制控制字寄存器0号计数器1号计数器2号计数器RDWRA0CSA1D7~0GATE0OUT0CLK0GATE1OUT1CLK1GATE2OUT2CLK2数据总线缓冲器:完成和系统数据线的配接。对外有8条数据线D7~08254的内部结构数据总线缓冲器读写控制控制字寄存器0号计数器1号计数器2号计数器RDWRA0CSA1D7~0GATE0OUT0CLK0GATE1OUT1CLK1GATE2OUT2CLK2读写控制模块:选择芯片内部的控制寄存器和计数器,在读写命令的控制下对选中的端口进行读写操作。对外有5条引线。8254的内部结构CS计数初值写入计数器#000001操作计数初值写入计数器#100011计数初值写入计数器#200101向控制字寄存器写控制字00111读计数器#0当前计数值01000读计数器#1当前计数值01010读计数器#2当前计数值01100011101XXXX01XX1无操作无操作禁止表7.18254内部寄存器读/写操作RDWRA1A08254的内部结构数据总线缓冲器读写控制控制字寄存器0号计数器1号计数器2号计数器RDWRA0CSA1D7~0GATE0OUT0CLK0GATE1OUT1CLK1GATE2OUT2CLK2控制寄存器:寄存CPU对其初始化编程时写入的控制字,以决定计数器的工作方式和并设置读出命令。8254的内部结构数据总线缓冲器读写控制控制字寄存器0号计数器1号计数器2号计数器RDWRA0CSA1D7~0GATE0OUT0CLK0GATE1OUT1CLK1GATE2OUT2CLK2计数器:每个计数器对外有3条线GATE~控制信号CLK~计数脉冲输入OUT~计数器输出8254的内部结构口地址译码器A9A2AEND7~D0IORIOWA1A0D7~D0RDWRA1A0CS8254二.8254与系统总线的连接I/O口地址分2段A9~A2参加译码,译码输出负脉冲。使CS=0,选中8254A1,A0直接与芯片A1,A0相连,选择片内寄存器执行IN时从选中的内部寄存器读执行OUT时向选中的内部寄存器写三.8254内部寄存器/计数器口地址在CS=0前提下A1A0选中000#计数器011#计数器102#计数器11控制寄存器设8254与系统总线如上图联接:口地址=40H~43H,“选中”8254,则0#~2#计数器口地址=40H~42H,控制口地址=43H。口地址=2FCH~2FFH,“选中”8254,则0#~2#计数器口地址=2FCH~2FEH,控制口地址=2FFH。四.计数器内部结构示意图内部数据线计数初值寄存器(16位)减1计数器(16位)计数值锁存器(16位)锁存命令GATECLKOUT内部数据线初始化编程时:计数初值→计数初值寄存器→减1计数器内部数据线计数初值寄存器(16位)减1计数器(16位)计数值锁存器(16位)锁存命令GATECLKOUT内部数据线计数器的内部结构当GATA=1时,CLK的下降沿使计数器减1,当计数值减到0(或某个值—由工作方式确定)时,OUT有输出。内部数据线计数初值寄存器(16位)减1计数器(16位)计数值锁存器(16位)锁存命令GATECLKOUT内部数据线计数器的内部结构计数初值=fclk/fout收到锁存命令后,当前计数值→计数值锁存器(以便读出检查),而计数器仍然做减1计数内部数据线计数初值寄存器(16位)减1计数器(16位)计数值锁存器(16位)锁存命令GATECLKOUT内部数据线计数器的内部结构作用:选择一个计数器,确定工作方式,并规定初值的写入顺序和计数初值(一串0,1代码)的数制。五.8254命令字/状态字D7D6D5D4D3D2D1D0计数器选择读写方式选择工作方式选择数制选择D7D6=00选择0#计数器,=01选择1#计数器=10选择2#计数器,=11标志该命令字是“读出命令”1.方式选择命令字D5D4=00标志该命令为“锁存命令”=01初值写入时,只写低8位,高8位自动补0;计数值读出时,只能读低8位=10初值写入时,只写高8位,低8位自动补0;计数值读出时,只能读高8位。=11初值写入/计数值读出的顺序为先低8位,后高8位。D7D6D5D4D3D2D1D0计数器选择读写方式选择工作方式选择数制选择8254的命令字和状态字D3D2D1选中的计数器工作在000方式0001110211310041015D0=0,计数初值为二进制数,D0=1,初值为BCD码数。D7D6D5D4D3D2D1D0计数器选择读写方式选择工作方式选择数制选择8254的命令字和状态字2.锁存命令(D5D4=00标志该命令为“锁存命令”)D7D6为锁存对象。=00,锁存0#当前计数值=01,锁存1#当前计数值=10,锁存2#当前计数值计数器选择00D7D6D5D4D3D0D7D6≠11D5D4=008254的命令字和状态字3.读出命令读出命令是多通道的锁存命令,一条命令可以锁存3个计数器的计数值、计数器状态。110D7D6D00:锁存当前计数值0:锁存计数器状态1:选择0#计数器D7D6D0=110是读命令1:选择1#计数器1:选择2#计数器8254的命令字和状态字4.状态字与方式选择命令字相同D7D6D5D00:计数初值已装入计数器1:计数初值未装入计数器0:OUT脚为低电平1:OUT脚为高电平8254的命令字和状态字CPU对8254的初始化编程例:设8254的口地址为40H~43H,要求2#计数器工作在方式3,计数初值=4000,写出2#的初始化程序段。1.对8254一个计数器的初始化编程步骤:向控制寄存器写入方式选择命令字目的:选择一个计数器,并确定其工作方式和计数值(计数初值)的读/写顺序。向选择的计数器写入计数初值。注意:如果方式选择命令字D0=0,则初值应是二进制,否则初值应是BCD码数。解1:设初值为二进制,初值写入顺序为先低8位后高8位。MOVAL,10110110BOUT43H,ALMOVAX,4000OUT42H,ALMOVAL,AHOUT42H,AL解2:设初值为二进制,写入顺序为仅写高8位。MOVAL,10100110BOUT43H,ALMOVAL,40OUT42H,AL注意:解2是错误的,因为:4000=0FA0H,其低8位不等于0。8254的初始化编程解3:设初值为BCD码,写入顺序为先低后高。MOVAL,10110111BOUT43H,ALMOVAL,0OUT42H,ALMOVAL,40HOUT42H,AL解4:设初值为BCD码,仅写高8位。MOVAL,10100111BOUT43H,ALMOVAL,40HOUT42H,AL注意:4000的BCD码数应写成4000H,解3、解4是正确的。8254的初始化编程2.当计数初值≤9999时,“初值”选为二进制或BCD码都可以;当计数初值9999时,“初值”只能选二进制。3.程序中如何表示BCD码数?设初值=(1234)10则MOVAX,1234H是正确的写成MOVAX,1234是错误的4.方式选择命令,锁存命令,读出命令必须写入控制口。8254的初始化编程6.关于读出命令读出命令也是锁存命令,如果在锁存计数值的同时,也锁存状态,那么在随后对计数器读出时,先读出的是状态字,后读的是计数值。5.关于锁存命令当程序员要了解计数器的当前计数值时,先向控制口写入锁存命令,然后从选择的计数器端口读取当前计数值。8254的初始化编程六.8254工作方式有6种工作方式,均在CLK下降沿计数一次。有2种启动方式:软件启动,硬件启动。软件启动:GATA=1,初值写入后,开始计数。硬件启动:初值写入后,不计数。当GATE从0→1后开始计数。方式0:计数结束OUT引脚输出正跃变信号软件启动,计数值减到0,OUT从0→1。WR结束后,第一个CLK完成初值装入3210-1CLKWRN=3GATE=1OUT8254的工作方式方式1:(可重触发的)硬件启动的单脉冲发生器GATE由0→1,下一个CLK下降沿,使OUT由1→0,且装入计数值GATE再次从0→1之后,下一个CLK完成初值自动重装3232103210N×TCLKCLKWRN=3GATE=1OUTGATEOUTTOUT8254的工作方式硬件启动(由外部门控信号启动计数)初值写入后不计数,当GATE从0→1时,OUT从1→0。之后每个CLK下降沿计数值减1,计数值减到0时,OUT从0→1。所以:输出负脉冲的宽度=N×TCLK计数过程中,GATE再次从0→1,初值自动重装,从而使OUT输出的负脉冲加宽(即有可重触发的性能)。8254的工作方式方式2:分频器(脉冲发生器)软件启动减1计数,减到1时OUT从1→0,下一CLK初值自动重装。所以:OUT为周期性波形,输出负脉冲的宽度为一个TCLK,周期=N×TCLK321321CLKWRN=3GATE=1OUT周期=N×TCLK8254的工作方式方式3:方波发生器CLKWRN=4GATE=1OUT424242软件启动,减2计数,有初值自动重装功能。N=偶数时,计数值减到0时初值重装,输出1:1连续波形。8254的工作方式GATE=1WRN=5CLK42042420OUTN=奇数时:装入的及重新装入的初值均为写入的初值-1。输出正脉冲期间,减到-2时重新装初值输出负脉冲期间,减到0时重新装初值输出正脉冲宽度=TCLK×(N+1)/2输出负脉冲宽度=TCLK×(N–1)/28254的工作方式方式4:软件启动,单脉冲发生器软件启动,减1计数,减到0有输出,无初值自动重装功能。3210-1CLKN=3WRGATE=1OUT8254的工作方式方式5:硬件启动,单脉冲发生器硬件启动,减1计数,减到0有输出。CLKN=3WR3210-1OUTGATEGATE从0→1,下一个CLK下降沿装入计数初值开始计数8254的工作方式6种工作方式的比较:方式1方式4方式5功能都是单脉冲发生器启动方式硬件启动软件启动硬件启动输出负脉宽=NTCLK负脉宽=TCLK初值重装在计数过程中(OUT=0期间)GATE从0→1时初值重装计数过程中(OUT=1期间)GATE从0→1时初值重装8254的工作方式方式0方式2方式3功能计数结束,输出正跃变脉冲发生器方波发生器启动方式都是软件启动输出启动后延时(N+1)TCLK输出正跃变负脉宽=TCLK周期=NCLKN=偶数,输出1:1方波初值重装计数结束,初值自动重装8254的工作方式七.8254在PC机中的应用1.电路:主8259ACLK0OUT0CLK1CLK2GATE0OUT1GATE1GATE2OUT2fclk=1.193182MHZ+5V8254PB0PB18255B口IR0QD动态存储器刷新电路清“0”+5V与门滤波口地址61H3个计数器的时钟端都为1.193182MHZGATE0,GATE1固定接+5vGATE2,OUT2输出受8255的PB0、PB1控制2.系统8254口地址为40H~43H。3.系统加电后,由BIOS完成对3个计数器初始化。4.各计数器的使用现状如下:8254的应用工作在方式3,计数初值=0,OUT0=周期为55ms的方波信号。作用:每隔55ms通过中断系统提出一次日时钟中断请求。主8259ACLK0OUT0CLK1CLK2GATE0OUT1GATE1GATE2OUT2fclk=1.19

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

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

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

×
保存成功