定时与计数.docx

上传人:b****7 文档编号:10826340 上传时间:2023-02-23 格式:DOCX 页数:31 大小:621.58KB
下载 相关 举报
定时与计数.docx_第1页
第1页 / 共31页
定时与计数.docx_第2页
第2页 / 共31页
定时与计数.docx_第3页
第3页 / 共31页
定时与计数.docx_第4页
第4页 / 共31页
定时与计数.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

定时与计数.docx

《定时与计数.docx》由会员分享,可在线阅读,更多相关《定时与计数.docx(31页珍藏版)》请在冰豆网上搜索。

定时与计数.docx

定时与计数

第3章(5)可编程定时器/计数器

3.5.1概述

1)定时与计数

1.定时

定义:

提供的时间基准。

分类:

内部定时、外部定时。

2.计数

定时与计数本质上是一致的。

计数的信号随机,定时的信号具有周期性。

2)定时方法

1.软件定时

通过软件指令周期方法定时,如执行循环程序。

增加CPU负担,通用性差,一般用于短延时。

2.不可编程硬件定时

采用中小规模IC构成。

不增加CPU负担,成本低,定时值不可改变。

3.可编程硬件定时

采用可编程计数器完成,软件可改变计数值。

可编程定时/计数器:

实质上定时和计数本质上都是脉冲计数器,定时

计的是内部基准始终源产生的脉冲,计数是计外部脉冲。

3)定时/计数器工作原理

数据线

计数初值寄存器

输出脉冲

输入脉冲

减1计数器

1CPU将数值送入到初值寄存器及计数器中。

2输入一个脉冲计数器计数一次(计数器减1)。

3减到0时输出一个脉冲(输出时间间隔相同)。

4自动恢复预置数,返回第②步。

1.定时与计数

定时(输出脉冲间隔时间)=一个输入脉冲的周期时间*脉冲个数

计数初值N=输出脉冲时间/输入脉冲时间

2.定时与频率

每秒钟输出脉冲个数为定时器输出的频率。

改变定时器的预置数既可改变输出的频率,通过此频率可产生不同的音调。

计数初值N=输入频率/输出频率

3.5.28253/8254定时/计数器

基本功能

1.3个独立的16位定时/计数器(T/C);

每个T/C功能:

2.可按二、十进制(BCD)计数;

3.有6种不同的工作方式;

4.最高频率10MHz;(82801BA为14.31818MHz)

5.有读回状态/当前计数值功能。

(8253没有)

8253/8254引脚与内部结构

8253/8254含有三个独立的计数器,是一个可编程的接口芯片。

其内部结构如下:

⒈计数器

计数器内部逻辑:

每个计数器中:

一个16位初值寄存器。

一个16位减1计数器。

一个16位当前计数值锁存器。

CLK引脚:

计数脉冲。

GATE引脚:

计数控制。

OUT引脚:

计数为0输出。

⒉数据总线缓冲器

作用:

与CPU交换数据。

确定8253/8254工作方式。

预置计数初值。

读出当前计数值。

⒊读/写控制逻辑

/CS=0片选A1A0

/RD=0读00访问计数器0

/WD=0写01访问计数器1

10访问计数器2

11写控制寄存器

 

3.5.68253/8254工作方式控制字及其初始化操作

CPU操作功能及命令

I/O端口地址:

8253/8254提供四个端口(使用A1A0);

命令:

初始化—设置工作方式、设置计数器初值;

操作—重写计数器初值、取状态命令。

状态:

当前计数值、工作方式及当前状态。

I/O端口操作冲突时解决方法:

工作方式与读取状态命令采用特征位方法;

读取的当前计数值或状态采取时序方法。

8253/8254命令关系表

 

1.8253/8254的工作方式控制字(A1A0=11)

D0=0按二进制计数

=1按十进制计数

D3D2D1=000方式0

001方式1

010方式2

011方式3

100方式4

101方式5

D5D4=00计数器中数据送锁存器

=01仅访问初值寄存器低字节

=10仅访问初值寄存器高字节

=11先访问低字节再访问高字节

D7D6=00选择计数器0

=01选择计数器1

=10选择计数器2

2.计数初值

(1)不同通道的计数初值写到不同地址中;

(2)每次写入一个字节;

(3)根据控制字定义,决定高、低字节写入方法。

(4)初始值的范围是:

•二进制为65536(0000H)~1(0001H)

•十进制为10000(0000H)~1(00001H)

计算公式:

Ci=CLK/OUT或Tc=CLK/OUT

例:

MOVAL,01110101B;T/C1,先低后高字节,方式2,BCD

OUT43H,AL

OUT41H,00H;

OUT41H,20H;计数初值为2000

MOVAL,00010110B;T/C0,只低字节,方式3,二进制

OUT43H,AL

OUT41H,50H;计数初值为50H(80)

3.8253/8254的读操作(A1A0=00~10)

(1)读取当前计数值方法1

(a)锁存当前计数值或禁止计数

(b)读取当前计数值

例:

MOVAL,01000101B;T/C1,锁存,先低后高字节,方式2,BCD

OUT43H,AL

INAL,41H

MOVAH,AL

INAL,41H

XCHGAH,AL;AX为T/C1当前计数值

(2)读取当前计数值方法2—使用读回命令

特征位:

D7D6=11。

功能选择:

锁存计数值—D5D4=01;

锁存状态—D5D4=10。

计数器选择:

T/C0—D1=1,T/C1—D2=1,T/C2—D3=1。

特点:

控制字同时只能锁存单个通道,

读回命令可同时锁存多个通道。

例:

MOVAL,11010100B;T/C1,锁存计数值

OUT43H,AL

INAL,41H;

MOVAH,AL

INAL,41H

XCHGAH,AL;AX为当前计数值

MOVAL,11011010B;T/C0、T/C2锁存计数值

OUT43H,AL

INAL,40H;

MOVAH,AL

INAL,40H

XCHGAH,AL;AX为T/C0当前计数值

INAL,42H;

MOVAH,AL

INAL,42H

XCHGAH,AL;AX为T/C2当前计数值

(3)读取计数器当前状态—使用读回命令

状态字格式:

例:

MOVAL,11100100B;T/C1,锁存状态值

OUT43H,AL

INAL,41H;若AL=00110101,表示T/C1为方式2,BCD码,先低后高读/写,当前OUT为低电平

MOVAL,11100010B;T/C0,锁存状态值

OUT43H,AL

INAL,40H;若AL=00010110,表示T/C0;为方式3,

;二进制码,只有低字节,当前OUT为低电平

(4)使用硬件门控信号GATE

用门控信号GATE禁止计数过程后,直接使用IN指令读出当前计数值。

3.5.78253/8254的工作方式

PC机中8253/8254工作方式:

计数器0方式3

计数器1方式2

计数器2方式2

方式0:

计数结束时中断

特点:

一次计数;

GATE高允许、下降暂停、低禁止、上升继续计数;

重写后下一脉冲下降沿重新计数;

OUT在控制字或计数初值写完时变低、计数值为0时变高(N+1个低)。

 

方式一:

硬件可重触发单稳

方式二:

重复计数,计数为1时,OUT输出一个负脉冲。

GATE=0暂停计数GATE=1恢复计数。

 

方式三:

方波发生器。

重复计数,计数为零OUT前一半输出为高后一半输出为低(一半是对初值数而言)。

GATE=0暂停计数GATE=1恢复计数。

3.5.108253/8254的应用编程

例一、选择计数器2,方式3,初值为533H、二进制计数、接口地址为11000001XX。

MOVDX,307H;控制寄存器口地址

MOVAL,10110110B;D7—D0=10110110

OUTDX,AL

MOVDX,306H;选择计数器2

MOVAX,533H

OUTDX,AL

MOVAL,AH

OUTDX,AL

例二、选择计数器0、方式2、二进制计数、计数值在BYTEH、BYTEL

中接口同上。

MOVDX,307H

MOVAL,00110100B

OUTDX,AL

MOVDX,304H;选择计数器0

MOVAL,BYTEL

OUTDX,AL

MOVAL,BYTEH

OUTDX,AL

例3:

用8253监视一个生产流水线,要求每通过50个工件,扬声器响5秒,发声频率为

2000Hz.

设:

8253端口地址:

40H–43H

8255的A组工作方式为方式0,A口为输出口,其端口地址:

80H

 

编程:

MOVAL,00010101B;TC0,单字节传送,方式2,十进制计数

OUT43H,AL

MOVAL,50H;基值=50

OUT40H,AL

STI;开中断

LOP:

HLT;等待中断

JMPLOP;中断返回后,继续等待

:

;ISR代码

MOVAL,01H

OUT80H,AL;8255PA0置“1”,启动TC1

MOVAL,01110111B;TC1,双字节传送,方式3,BCD计数

OUT43H,AL

MOVAL,50H;计数基值=FIN/FOUT=1250

OUT41H,AL

MOVAL,12H

OUT41H,AL

CALLDL5S;延时

MOVAL,00

OUT80H,AL

IRET

例4:

在实时控制系统中利用8253实现采样周期发生器的应用

原理:

利用8253/8254的方式2(方式3)的固定输出频率,产生中断请求信号。

设:

8253/8254的端口地址为230H–233H

编程:

;8253/8254初始化

MOVDX,233H

MOVAL,00010100B;TC0,单字节传送,方式2,二进制计数

OUTDX,AL

MOVDX,230H

MOVAL,00H;TC0计数基值=65535

OUTDX,AL

MOVDX,233H

MOVAL,01110110B;TC1,双字节传送,方式3,二进制计数

OUTDX,AL

MOVDX,231H

MOVAL,TIME;送低字节

OUTDX,AL

MOVAL,TIME+1;送高字节

OUTDX,AL

8253/8254在PC系列微机中的应用

⒈接口地址

8253/8254的/CS接LS138的/Y2(/TCCS端)。

8253/8254接口地址为0040H~~005FH,通常使用口地址:

40H选择计数器0

41H选择计数器1

42H选择计数器2

43H控制寄存器

⒉计数器时钟输入

三个计数器使用同一种输入脉冲。

计数脉冲CLK0\CLK1\CLK2的频率为1.193M。

方波输出频率为fout=CLK/计数值=1.193MHz/65536=18.2H。

方波输出周期Tout=1/18.2x1000ms=54.945ms

⒊计数器0----日时钟定时

GATE0=1

OUT0输出:

连8259的IRQ0端作为“日时钟”计时中断请求。

工作在方式三、计数初值为0、即计数216产生一个中断信号。

1.193M/216=18.2Hz,

即每54.945ms产生一个“日时钟”请求。

PC机8253/8254-计数器0初始化:

MOVAL,36H;00110110b=0#计数器、读写一个字、工作方式3

OUT43H,AL

MOVAX,0

OUT40H,AL;先送低字节到计数器0

MOVAL,AH

OUT40H,AL;后送高字节到计数器0

PC系列微机日时钟工作过程:

8253/8254计数器每隔54.945ms产生一个8#硬中断,在中断服务程序中使双字变量TIMER+1(40:

6FH、40:

6EH、40:

6DH、40:

6CH)。

1秒钟=18.2(计时单位)

1分钟=1092(计时单位)

1小时=65543(计时单位)

1天=1573040(001800B0H)(计时单位)

当TIMER计到24小时将TIMER所在内存单元清零.

·每次开机时人工输入或自动设置当前日期和时间并换算成上述计时单位

存放在变量TIMER处。

·由当前TIMER的值很容易计算出当前日、时、分、秒日时钟。

·PC微机为用户提供软中断日时钟服务INT1AH

读TIMER值到CX/DX

MOVAH,00H;设置功能号为00H

INT1AH

读时分秒到CH/CL/DH

MOVAH,02H;设置功能号为02H

INT1AH

读年月日到CX/DH/DL

MOVAH,04H;设置功能号为04H

INT1AH

⒋1#-----计数器

GATE1=1

OUT1产生RAM动态刷新请求信号DRQ0。

输入频率fin=1.1931816MHzTin=1/(1.1931816x106)Hz=0.838ns

工作方式:

方式2计数值18(18X0.838ns=15us)

MOVAL,01010100B;通道1/仅低字节/方式2/二进制计数

OUT43H,AL

MOVAL,18

OUT41H,AL;1#计数器高字节自动清零

⒌2#----计数器

1.19M

CLK2

 

OUT2

 

GATE2

8254

 

D0~7

 

CPU

&

PB0PB1

 

8255

 

8255的PB0接GATE2控制2#计数器。

OUT2与8255的PB1经与门输出到扬声器。

由OUT2发声音:

PB0=1PB1=1则OUT2信号到扬声器。

举例:

由OUT2发出1000H声音(假设PB0、PB1=1)

MOVAL,10110110B;通道2/双字节/方式3/二进制计数

OUT43H,AL

MOVAX,4A9H;N=CLK/fout=(1.1931816x106)/1000

OUT42H,AL

MOVAL,AH

OUT42H,AL

 

例:

利用8253/8254编制歌曲程序

·七个低音频率:

175196221234262294330

·七个中音频率:

350393441467525589661

·七个高音频率:

700786882935104911781322

;filenamemusic.asm

.386

datasegmentuse16

tabfdw-1,262,350,352,350,441,393,350,393,441

dw350,352,441,525,589,588,589,525,441

dw440,350,393,350,393,441,350,293,294,262

dw350,589,525,441,440,350,393,350,393,589

dw525,441,440,525,589,700,525,441,440,350

dw393,350,393,441,350,294,292,262,350,0

tabtdb4,4,6,2,4,4,6,2,4,4

db6,2,4,4,12,1,3,6,2

db4,4,6,2,4,4,6,2,4,4

db12,4,6,2,4,4,6,2,4,4

db6,2,4,4,12,4,6,2,4,4

db6,2,4,4,6,2,4,4,12

dataends

codesegmentuse16

assumecs:

code,ds:

data

beg:

movax,data

movds,ax

open:

inal,61h;读8255-B口

oral,00000011b

out61h,al;接扬声器

aga:

leasi,tabf;SI频率指针

leadi,tabt;DI节拍指针

last:

cmpwordptr[si],0;曲尾?

Jzaga;是

movdx,12h

movax,34deh;DX&AX=1234DEH(1.193MHZ)

divwordptr[si];输入频率/输出频率

out42h,al;分频数低8位

moval,ah

out42h,al;分频数高8位

calldelay;延时

addsi,2;节拍表指针+2

incdi;频率表指针+1

movah,1

int16h;有键否?

Jzlast;无

close:

inal,61h

andal,11111100b

out61h,al;关扬声器

movah,4ch

int21h

delayproc

moveax,0

moval,[di];取节拍

imuleax,55000;15000(1us)X节拍

movdx,ax;乘积低16位送DX

roleax,16

movcx,ax;乘积高16位送CX

movah,86h;INT15H入口参数AH=86HCXDX延时时间参数

int15h

ret

delayendp

codeends

endbeg

五实时钟芯片介绍(MC146818)

24pin、+5v供电(可用后备电池)的RTC(RealTimerChip)

日时钟:

支持时、分、秒的更新。

实时钟:

支持年、月、日、星期、时、分、秒的更新。

若有后备电池关机后可继续走时。

MC146818实时钟特性:

1实时钟RAM区(00–0DH):

存放年、月、日、星期、时、分、秒更新的数据(BCD码)。

位移

信息内容

位移

信息内容

0

7

1

报警秒

8

2

9

3

报警分

10

寄存器A

4

11

寄存器B

5

报警时

12

寄存器C

6

星期几

13

寄存器D

32H

世纪

②系统配置数据RAM区(0FH~3FH)

③地址寄存器:

存放芯片内部的存储地址。

④读写过程:

先由地址选通信号将D0~D7线上地址数据送入地址寄存器中,再由数据选通信号、内部地址译码信号对某一内部单元进行读写。

⑤状态寄存器:

寄存器A:

输入/输出频率选择

D7(UIP):

时钟更新

D6(DV2):

D5(DV1):

分频器输入频率选择

D4(DV0):

D3(RS3):

D2(RS2):

分频器输出频率选择

D1(RS1):

D0(RS0):

寄存器B:

工作模式选择

D7(TE):

计时允许

D6(PIE):

周期中断允许

D5(AIE):

报警中断允许

D4(UIE):

更新结束中断允许

D3(SQWE):

方波输出允许

D2(DM):

信息格式选择

D1(M24):

24/12选择

D0(MSE):

夏令时允许

寄存器C:

中断请求(只读)

D7(IRF):

中断请求

D6(PF):

周期中断

D5(AF):

报警中断

D4(UF):

更新中断

寄存器D:

电源状态(只读)

D7(VRB):

掉电状态

D5--D0:

日期报警值

⑥微机的实时钟端口:

70H为地址选通端口,71H数据选通端口。

如读当前“小时”的数据:

MOVAL,04

OUT70H,AL;选择操作单元

NOP

NOP

INAL,71H;“小时”数以BCD码读入AL中

写“小时”数据:

MOVAL,04

OUT70H,AL;选择操作单元

NOP

NOP

MOVAL,3

OUT71H,AL;写数据

初始化程序段如下:

CMOS-PORTEQU070H;MC146818—RAM区地址端口

CALLINI

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1