第九章 可编程计数器8253.docx

上传人:b****3 文档编号:11088577 上传时间:2023-05-29 格式:DOCX 页数:22 大小:261.42KB
下载 相关 举报
第九章 可编程计数器8253.docx_第1页
第1页 / 共22页
第九章 可编程计数器8253.docx_第2页
第2页 / 共22页
第九章 可编程计数器8253.docx_第3页
第3页 / 共22页
第九章 可编程计数器8253.docx_第4页
第4页 / 共22页
第九章 可编程计数器8253.docx_第5页
第5页 / 共22页
第九章 可编程计数器8253.docx_第6页
第6页 / 共22页
第九章 可编程计数器8253.docx_第7页
第7页 / 共22页
第九章 可编程计数器8253.docx_第8页
第8页 / 共22页
第九章 可编程计数器8253.docx_第9页
第9页 / 共22页
第九章 可编程计数器8253.docx_第10页
第10页 / 共22页
第九章 可编程计数器8253.docx_第11页
第11页 / 共22页
第九章 可编程计数器8253.docx_第12页
第12页 / 共22页
第九章 可编程计数器8253.docx_第13页
第13页 / 共22页
第九章 可编程计数器8253.docx_第14页
第14页 / 共22页
第九章 可编程计数器8253.docx_第15页
第15页 / 共22页
第九章 可编程计数器8253.docx_第16页
第16页 / 共22页
第九章 可编程计数器8253.docx_第17页
第17页 / 共22页
第九章 可编程计数器8253.docx_第18页
第18页 / 共22页
第九章 可编程计数器8253.docx_第19页
第19页 / 共22页
第九章 可编程计数器8253.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第九章 可编程计数器8253.docx

《第九章 可编程计数器8253.docx》由会员分享,可在线阅读,更多相关《第九章 可编程计数器8253.docx(22页珍藏版)》请在冰点文库上搜索。

第九章 可编程计数器8253.docx

第九章可编程计数器8253

第九章可编程定时计数器8253

一概述

⒈定时器和计数器

定时控制在微机系统中极为重要

①定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间隔;

②计数电路如果记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为计数器。

⒉定时功能的实现方法

①软件延时——利用微处理器执行一个延时程序段实现;

②不可编程的硬件定时——采用分频器、单稳电路或简易定时电路控制定时时间;

③可编程的硬件定时——软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路。

二8253定时计数器的内部结构和外部特性

⒈概述

①3个独立的16位计数器通道;

②每个计数器有6种工作方式;

③按二进制或十进制(BCD码)计数。

⒉内部结构

 

内部结构图

①数据总线缓冲器

是8253与CPUDB连接的8位双向三态缓冲器,CPU通过它向8253写方式控制字到控制字寄存器中,写计数初值到计数通道,读取计数通道的当前计数值。

②读/写控制逻辑

控制8253内部操作。

无效,8253的DB处于高阻状态,当

有效,

和A1、A0、

组合,对3个计数通道、控制字寄存器进行读/写操作,见下表。

8253读写操作及端口选择表

注意:

CPU对控制字寄存器只能写,不能读;

CPU对计数通道写的是计数初值,读的是当前计数值。

③控制字寄存器

8253初始化编程时,CPU写控制字到控制字寄存器,以选择计数通道及相应的工作方式。

④数通道0~2

8253内部包括3个功能完全相同和操作完全独立的计数通道,每个计数通道由16位减法计数器、16位计数初值寄存器和16位计数值锁存器组成。

初始化时,向计数通道装入的计数初值,先送到计数初值寄存器中保存,然后送到减法计数器。

计数器启动后,减法计数器对CLK的下降沿进行减1计数,在未锁定时把结果送入16位计数值锁存器中。

当计数值减到0时,输出OUT信号,一次计数结束。

计数初值寄存器的内容,在计数过程中保持不变。

计数初值寄存器和计数值锁存器占用一个端口地址(即该计数通道口地址),CPU读取计数通道的当前计数值来自计数值锁存器。

各通道可工作在计数器方式,此时被计数的事件以脉冲方式从CLK输入;

各通道可工作在定时器方式,此时确定频率的时钟脉冲从CLK输入。

计数初值=定时时间÷CLK周期

各通道的启动、禁止、允许计数与门控信号GATE有关,GATE的作用OUT的输出波形随各通道工作方式不同而不同。

④计数器结构示意图

计数初值存于预置寄存器;

在计数过程中,减法计数器的值不断递减,而预置寄存器中的预置不变;

输出锁存器用于写入锁存命令时,锁定当前计数值。

 

 ⒊8253的引脚功能

①与CPU相连的引脚

D7~D0:

双向三态DB;

读,

写,低电平有效;

片选;

A1A0:

片内端口选择。

②计数通道引脚

CLK2~CLK0:

计数脉冲输入;

OUT2~OUT0:

当计数值减到0时,OUT有输出,输出波形取决于通道工作方式;

GATE2~GATE0:

门控信号输入,是控制计数器工作的一个外部信号,它的作用是用来禁止、允许或启动计数过程的。

每个计数通道均有6种不同工作方式,GATE信号的控制作用不同。

GATE信号总是在CLK的上升沿被采样。

三8253的工作方式

Intel8253的每个计数通道都有6种工作方式可供选用。

这6种工作方式主要有5点不同。

一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程不同。

上述五点不同,有相互关联,学习时应灵活运用。

⒈方式0—计数结束时中断

当写入控制字后,OUT立即变为低电平;启动计数方式:

软启动。

即仅当GATE为高电平时,在写入计数初值后的第一个CLK下降沿到来时,计数初值寄存器的内容装入到减法计数器中,此后减法计数器对每一个CLK下降沿作减法计数,直到计数结束。

在计数过程中,OUT一直维持低电平,直至减法计数器减到0时,OUT变高。

见图9.1~9.3。

图9.1方式0波形图

图9.2方式0时GATE信号的作用

图9.3方式0计数过程中改变计数值

具有以下特点:

 ①计数器只计一遍。

当计到0时,减法计数器不恢复计数初值,不开始重新计数,且OUT保持高电平。

只有重新写入计数初值后,OUT才变低,开始新的计数;

②启动计数方式:

软启动。

③GATE为低电平时,计数暂停,当GATE变高后就接着计数。

在计数过程中,GATE的变化不影响OUT的状态。

④计数过程中可重新写入计数初值。

如果是8位计数初值,在写入新的计数初值后,计数器将按新的计数初值重新开始计数;如果是16位计数初值,在写入第一个字节后,计数器停止计数,在写入第二个字节后,计数器按照新的计数初值开始计数。

⑤8253没有中断控制电路,也没有专用中断请求线。

若要中断,则可用OUT的正跳变作为中断请求信号。

⒉方式1—可重复触发的单稳态触发器

图9.4方式1波形图

当写入控制字后,OUT立即变高,计数初值写入后,计数器并不开始计数,启动计数方式是硬启动。

即要有GATE上升沿触发,在GATE信号上升沿之后的第一个CLK下降沿到来时将计数初值装入减法计数器,OUT立即变低,然后开始减1计数过程。

在整个计数过程中,OUT维持低电平,直至计到0,OUT变高。

因此OUT输出一个单拍负脉冲。

若想再输出一个单拍负脉冲,必须再次用GATE上升沿触发,否则OUT维持高电平。

见图9.4~9.6。

图9.5方式1时GATE信号的作用

图9.6方式1在计数过程中改变计数值

具有以下特点:

①启动计数方式是硬启动。

②若初值为N,则OUT输出的单拍负脉冲低电平宽度为N个CLK周期;

③当计到0后,可再次用GATE触动启动计数器计数,输出一个同样宽度的单负脉冲,而不必再次送计数初值;

④在计数过程中,若计数器没有减到0,又有GATE上升沿触发,则OUT仍为低,计数器重新计数,直至计到0,OUT变高,其作用使OUT输出的单负脉冲宽度加宽。

⑤在计数过程中,若写入一个新的计数初值,这时计数过程不受影响,要等GATE再次触发后,才按新的计数初值重新开始计数。

⒊方式2—频率发生器

当写入控制字后,OUT立即变高,写入计数初值后,如果GATE为高,则计数器立即开始计数。

在计数过程中,OUT维持高电平,对每个计数脉冲作减1计数直至计到1时,OUT由高变低,经过一个CLK周期,OUT恢复为高,若GATE仍为高,计数器又开始重新计数。

见图9.7。

图9.7方式2波形图

具有以下特点:

①启动计数方式是硬启动或软启动。

②能够连续工作。

若CLK为一定频率的时钟脉冲,计数初值为N,只要保持GATE为高电平,则OUT输出波形的周期为N个CLK周期,其中高电平宽度为N-1个CLK周期,低电平宽度为1个CLK周期,见图9.7。

③若在计数过程中,GATE变为低电平,则计数器立即停止计数。

在GATE变为高后的下一个CLK使减1计数器恢复计数初值,重新开始计数。

④在计数期间,如果向计数器写入新的计数初值,这对正在进行的计数过程没有影响,但在计到1输出一个CLK宽度的负脉冲后,计数器将按新的计数初值开始计数。

⒋方式3—方波发生器

与方式2基本相同,也具有自动装入计数初值的能力,OUT输出波形也是周期性的,唯一不同的是OUT输出波形占空比不同。

若初值N为偶数,在装入计数初值后,每一个CLK使减法计数器减2,当减到0,一方面OUT输出改变状态,另一方面又重新装入计数初值开始新的计数,OUT输出波形为方波,其重复周期为N个CLK周期;若初值N为奇数,则在装入计数初值后,第一个CLK使减法计数器减1,以后每个CLK使计数器减2,当计到0,OUT输出改变状态,同时重新装入计数初值,这以后第一个CLK使计数器减3,以后每一个CLK使计数器仍减2,直至计到0,OUT恢复高电平,重复上述过程。

OUT输出波形重复周期为N个CLK周期,其中高电平宽度为(N+1)/2个CLK周期,低电平宽度为(N-1)/2个CLK周期。

见图9.8、9.9。

图9.8方式3计数值为偶数时的波形图

图9.9方式3计数值为奇数时的波形图

具有以下特点:

和方式2类似,唯一不同的是OUT输出重复波形占空比不同。

⒌方式4—软件触发

当写入控制字后,OUT立即变为高电平,启动计数方式是软启动,启动计数后则计数器开始减1计数,当计到0时,OUT变低,经过一个CLK周期,OUT输出一个宽度为一个CLK周期的负脉冲,见图9.10。

图9.10方式4波形图

具有如下特点:

①启动计数为软启动;

②计数初值一次有效,只有再次输入计数初值,才开始新的计数;

③在计数过程中,若GATE变低,则停止计数,待GATE变高后,不是继续计数,而是恢复计数初值重新计数,GATE不影响OUT;

④若在计数过程中,写入一个新的计数初值,对本次计数过程无影响,而是等到计数过程结束,新初值才装入到减法计数器,使下一次计数按新的初值进行。

⒍方式5—硬件触发

当写入控制字后,OUT立即变为高电平,启动计数为硬启动,启动计数后,作减1计数,当计到0时,OUT变低,经过一个CLK周期,OUT又变高,停止计数,待到下一次GATE触发,才能再次从初值开始计数。

见图9.11。

图9.11方式5波形图

具有以下特点:

①启动计数为硬启动;

②输出波形与方式4相同;

③在计数过程中,若有GATE触发,则计数器重新从初值开始计数,但不影响OUT;

④在计数过程中,若写入一个新的计数初值,只要没有GATE触发,不影响计数过程。

现行计数计到0后,若有GATE触发,则按新的计数初值开始计数。

但在计数过程中,若写入一个新的计数初值后,有GATE触发,则立即按新的计数初值重新开始计数。

⒍各种方式下的输出波形

 

四8253编程

⒈方式控制字

写到控制字寄存器。

①格式

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC0

RL1

RL0

M2

M1

M0

BCD

②说明

SC1SC0:

计数器选择,00:

计数通道0;01:

计数通道1;

10:

计数通道2;11:

非法。

RL1RL0:

规定CPU向计数通道写入的计数初值格式或规定CPU读取计数通道锁存器当前计数值格式。

计数器可写入8位数据,也可写入16位数据,而写入的8位数据又可分为两种格式:

仅写低8位,则高8位自动置0,或仅写高8位,则低8位自动置0。

写入16位数据时,应先写入低8位,后写入高8位。

若RL1RL0=00,锁存计数器当前值,使锁存器不随计数器值变化而变化;

RL1RL0=01,只读/写低8位数据;

RL1RL0=10,只读/写高8位数据;

RL1RL0=11,读/写16位数据,先读/写低8位,后读/写高8位。

M2M1M0:

工作方式选择

若M2M1M0=000,方式0;

M2M1M0=001,方式1;

M2M1M0=×10,方式2;

M2M1M0=×11,方式3;

M2M1M0=100,方式4;

M2M1M0=101,方式5。

BCD:

BCD=1,计数器按BCD计数,计数初值0000~9999;

BCD=0,计数器按二进制计数,计数初值0000~FFFFH。

计数初值为0000时最大,对于BCD计数,0000代表10000;

计数初值为0000时最大,对于二进制计数,0000代表10000H。

注意:

计数初值必须跟在控制字之后,即先写控制字,后写计数初值。

说明:

8088中的8253的通道0、1、2和控制字寄存器端口地址为40H、41H、42H、43H。

五8253的初始化编程

初始化编程包括如下步骤:

①写入通道控制字,规定通道的工作方式

②写入计数值,若规定只写低8位,则高8位自动置0,若规定只写高8位,

则低8位自动置0。

若为16位计数值则分两次写入,先写低8位,后写高8位。

例1:

设8253的端口地址为:

04H~07H,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。

控制字为:

01010000B=50H

初始化程序:

MOVAL,50H

OUT07H,AL

MOVAL,80H

OUT05H,AL

例2:

设8253的端口地址为:

F8H~FBH,若用通道0工作在方式1,按BCD码计数,计数值为5080H,进行初始化编程。

控制字为:

00110011B=33H

初始化程序:

MOVAL,33H

OUT0FBH,AL

MOVAL,80H

OUT0F8H,AL

MOVAL,50H

OUT0F8H,AL

例3:

设8253的端口地址为:

04H~07H,若用通道2工作在方式2,按二进制计数,计数值为02F0H,进行初始化编程。

控制字为:

10110100B=0B4H

初始化程序:

MOVAL,0B4H

OUT07H,AL

MOVAL,0F0H

OUT06H,AL

MOVAL,02H

OUT06H,AL

六8253的应用举例 

例9.1用8253监视一个生产流水线,每通过100个工件。

蜂鸣器响6s。

频率为1000HZ。

①硬件连接:

硬件接口示意图如图9.1所示,工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一个脉冲,此脉冲作为8253计数通道0的计数脉冲,当通道0计数满100后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253计数通道1工作,由OUT1连续输出1000HZ的方波,持续6s后停止输出。

②控制字设置:

通道0计数器工作于方式2,采用BCD计数,因计数初值为100,采用RL1RL0=10(读/写计数器的高8位),则方式控制字为00100101B。

通道1计数器工作于方式3,CLK1接2MHZ时钟,要求产生1000HZ的方波,则计数初值应为2000000÷1000=2000,采用RL1RL0=10(只读/写高8位),BCD计数,则方式控制字为01100111B。

例9.1图8253的应用

③程序编制:

假设8253通道0的地址为40H,通道1的地址为42H,控制口地址为46H。

8255A的A口地址为80H。

则主程序为:

MOVAL,01H;置PC0为1

OUT86H,AL

MOVAL,25H;通道0初始化

OUT46H,AL

MOVAL,01H;计数初值高8位,低8位自动清零

OUT40H,AL

STI;开中断

LOP:

HLT;等待中断

JMPLOP

中断服务程序为:

MOVAL,03H;置PC1为1,使通道1的GATE1置1,启动计数

OUT86H,AL

MOVAL,67H;通道1初始化

OUT46H,AL

MOVAL,20H;计数初值高8位,低8位自动清零

OUT42H,AL

CALLDL6s;延时6s

MOVAL,02H;通道1的GATE1置0,停止计数

OUT86H,AL

┇;向8259A发中断结束命令

IRET

例9.28253在IBMPC系列机上的应用

扬声器控制:

⏹计数器2的输出控制扬声器的发声音调

⏹计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声

⏹扬声器还受控于并行接口(8255芯片)

⏹必须使PB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音

8255A的PC口(62H)

7

6

5

4

3

2

1

0

8253计数器2

(43H)

放大器

AND

8255A的PB口(61H)

7

6

5

4

3

2

1

0

扬声器与系统的连接

说明:

各计数器的时钟频率均为1.19318MHz

模拟电话铃程序如下:

CSEGSEGMENTASSUMECS:

CSEG

RINGPROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVBP,8;循环计数值,响铃8次

AGAIN:

MOVCX,30;产生600和1500Hz的声音30次

NEXT:

MOVDX,600;频率=600Hz

MOVAX,30;时间=30ms

MOVBL,3;允许产生声音

CALLSOUND

MOVDX,1500;频率=1500Hz

MOVAX,30;时间=30ms

CALLSOUND

LOOPNEXT;循环

MOVDX,100;频率100Hz

MOVBL,1;不允许产生声音

MOVAX,2000;时间2S

MOVBL,1

CALLSOUND

DECBP

JNZAGAIN;循环8次

RET

RINGENDP

SOUNDPROC

PUSHCX

PUSHSI

MOVSI,DX;频率送SI

MULDX;频率×时间=周期数

MOVCX,1000

DIVCX

MOVCX,AX;周期数作为循环计数送CX

MOVAL,10110110B;将8253计数器2设置为方式3

OUT43H,AL

MOVDX,0012H;1193180的低位

MOVAX,34DCH;1193180的高位

DIVSI;1193180/频率=计数值

OUT42H,AL;送计数值的低位

MOVAL,AH;送计数值的高位

OUT42H,AL

INAL,61H读8255A的B口

ANDAL,11111100B;清掉最低2位

ORAL,BL;根据BL设置是否产生声音

OUT61H,AL

ZERO:

INAL,61H;读8255A的C口

TESTAL,00100000B;8253计数器2的输出变高?

JZZERO没有,等待

ONE:

INAL,61H;

TESTAL,00100000B;8253计数器2的输出变低?

JNZONE;没有,等待

LOOPZERO;周期数减1,不为0继续

POPSI

POPCX

RET

SOUNDENDP

CSEGENDS

ENDRING

例9.3读取8253通道中的计数值

8253可用控制命令来读取相应通道的计数值,由于计数值是16位的,而读取的瞬时值,要分两次读取,所以在读取计数值之前,要用锁存命令,将相应通道的计数值锁存在锁存器中,然后分两次读入,先读低字节,后读高字节。

当控制字中,D5、D4=00时,控制字的作用是将相应通道的计数值锁存的命令,

锁存计数值在读取完成之后,自动解锁。

如要读通道1的16位计数器,编程如下:

地址40H~43H。

MOVAL,40H;

OUT43H,AL;锁存计数值

INAL,41H

MOVCL,AL;低八位

INAL,41H;

MOVCH,AL;高八位

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2