保卫部下学期工作计划 保卫部下半年工作计划

2023-06-17 06:37:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的保卫部下学期工作计划 保卫部下半年工作计划,仅供参考,欢迎大家阅读!

保卫部下学期工作计划

一、概述

51单片机的片子上有两个16位的寄存器T0和T1,提供计数或定时功能。

这一功能是通过对脉冲源输入的脉冲信号进行计数(加1)实现的。

定时与计数功能的区别在于:从硬件角度讲,当脉冲源为等间隔脉冲序列时,为定时功能;当脉冲信号间隔不等时,为计数功能。从软件角度讲,T0或T1工作于定时还是计数状态,是由寄存器TMOD中相应的控制位C/T的值控制的。

二、时间常数的计算

要想使用一个计数器,最重要的问题就是它应该计多少。比方现在要让定时器定时1s,1s之后去完成一个什么操作。那么就要解决以下问题:应该让定时器计数几次,每一次计时持续的时间是多长,定时器可以装载的最大计数次数是否够用,计时完成后通过何种方式通知单片机计时结束……只有理解了以上问题,才能确定出应该装入计数器的时间常数,达到准确定时的目的。

1.时间常数的存储——特殊功能寄存器TL0,TH0;TL1,TH1

在51单片机上的特殊功能寄存器(Special Function Register,SFR)区,有两组寄存器是专门用来存放计数器的时间常数的。它们就是TL0,TH0和TL1,TH1,各自都是8位的。其中TL0和TH0分管时间常数的低8位和高8位,控制计数器0;TL1和TH1同理,控制计数器1。

为什么要把低8位和高8位分开存储呢?因为这样可以为计数器提供更多的工作方式。这4个寄存器既用来存放时间常数,同时也可看作4个定时计数器。51单片机的计数器有4种工作方式:方式0,方式1,方式2,方式3。(工作方式的设置是通过设定TMOD寄存器的M1和M0位来控制的)

方式0:13位寄存器,时间常数存储在TLx(x=0,1)的低5位和THx的8位。TLx的高3位无意义。

方式1:16位寄存器。时间常数存储在TLx的8位和THx的8位。

方式2:自动再装入的8位计数器。在方式2中,TLx作为8位计数器,THx负责存储计数初值。当计数溢出时,自动将THx中存储的时间常数送入TLx,使TLx从这一初值开始重新计数。再装入后,THx的值不变。

方式3(仅对计数器T0有效):8位计数器和8位定时器。此方式被称为“鸠占鹊巢”,因为在方式3中,TL0为8位计数器,计数器T0的所有控制位都只为它的低8位——TL0服务。而TH0只能用作定时器,但它此时借用了计数器T1的中断和控制位。当T0工作于方式3时,T1可工作于方式0,1,2,但因为中断标志被T1占用,因而此时T1不能使用中断控制。

2.时间常数值的确定与装载

在计算时间常数值以前,需要知道以下原理:

①1个机器周期=12个晶振周期。即T_M=frac{12}{f_{osc}}

②定时时间=计数值x机器周期。T_C=Xtimes T_M

③定时计数器以+1方式计数,故:计数值+时间常数=2^n

例 已知晶振频率6MHz,定时器工作于方式0,要求计时1ms。则时间常数为____。

解:6MHz对应的机器周期T_M=frac{12}{6times 10^6}=2mu s

计数值X=frac{1ms}{2mu s}=500

因为定时器是+1计数,方式0的计数位数n=13。

所以时间常数=2^{13}-500=7692=mathrm{1E0CH}

将时间常数赋给寄存器的程序代码如下:

MOV TL0,#0CH

MOV TH0,#1EH ;#号表示传递的是立即数而非地址

三、计数器的设置与启动

1.计数器的设置

计数器的设置通过对寄存器TMOD(Timer MODE)赋值而完成。TMOD的控制字结构叙述如下:

位 7 6 5 4 3 2 1 0

GATE C/T M1 M0 GATE C/T M1 M0

高位控制定时器1,低位控制定时器0。

GATE:中断控制位。如果要求只有在关中断的条件下才允许启动计数器,则使GATE=1.否则一般应使GATE=0.

C/T:Counter/Timer.高电平为计数器,低电平为定时器。

M1,M0:工作方式控制位。M1M0=00,01,10,11,分别对应方式0,1,2,3。

2.计数器的启动

计数器的启动通过对寄存器TCON(Timer Control)的赋值而完成。与TMOD不同,TCON允许位赋值,即可以对这个寄存器的每一位单独操作。值得指出的是,TCON的各位除了控制计数器以外,还有控制系统中断响应方式的重要作用。

TCON的控制字结构叙述如下:

位 7 6 5 4 3 2 1 0

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

后缀的0/1标志了它控制计数器0还是1.

TFx(Timer Flow x):溢出时自动置1

TRx(Timer Run x):手动置1时启动计数器(当GATE=1且INT=0时,无法启动)

注意:下面的ITx和IEx与计数器无关。x对应的是中断位INTx。即IT0和IE0控制INT0的中断响应方式,IT1和IE1控制INT1的响应方式。

ITx(Interrupt Trigger):决定系统响应何种中断触发方式。ITx=0为电平触发方式,ITx=1为边沿触发方式。

IEx(Interrupt Enable):这一位是为了从硬件原理上能够响应边沿触发而设定的。具体来说,如果ITx=0(x=0,1),亦即电平触发,那么只要INTx=0,系统立马就响应中断了,自不必说。但如果ITx=1,也就是边沿触发,这时候系统需要在INTx口检测一个高电平和紧接着的一个低电平,才能触发中断。为了记录这个顺序,当检测到一高一低时,系统硬件会把IEx置为1,这时候CPU只要检测IEx的电平高低就可以判断是否响应中断了。

换句话说,ITx=0时,IEx是没用的;当ITx=1时,系统硬件通过检测IEx的高低判定中断的响应。

回到计数器的话题,要想启动计数器,一般只需要将TRx置为1即可。

四、计数器的中断

1.系统中断的触发与控制

计数器计数溢出时会使标志位TFx(Timer Flow)置1。如果系统允许中断,则会触发中断。进入中断程序后,就可以完成用户希望进行的操作了。

要想使系统允许中断,需要对控制中断的寄存器IE(注意!与IE0,IE1不是一个东西。IEx是TCON里的一位,而IE是一个8位的特殊功能寄存器)进行设置。

IE的控制字格式叙述如下:

位 7 6 5 4 3 2 1 0

EA x x ES ET1 EX1 ET0 EX0

EA(Enable):系统中断的总控制位。只有EA=1时,才允许中断。EA=0时,禁止一切类型的中断。

例:程序 SETB EA 表示开中断。此指令执行完后,CPU便可接收中断响应请求。

ES(Enable Serial):串行通道中断允许位

ETx(Enable Timer x):计数器中断允许位

EXx(Enable External x):外部中断允许位

例:希望允许系统响应定时器1的中断,则应该先开定时器1中断,再开系统中断。这样写:

SETB ET1

SETB EA

2.中断服务程序地址

不同的中断触发源引起的中断程序段需要从指定的地址开始存储。若主程序从0000H开始,则定时器T0的中断程序入口地址为000BH,T1为001BH。CPU从此地址开始执行中断程序直到遇到RETI(Return Interrupt)为止。

程序格式为:ORG 000BH

..........(中断程序内容)

RETI

五、计数器程序编写举例

到现在为止,我们终于具备了编写单片机计数器程序的主要知识。下面将通过实例进一步分析计数器程序的编写。

题1设定时计数器T0工作在定时状态,方式1,定时时间2ms。每当2ms到时申请中断,中断程序中将累加器A的内容左环移一次送P1口。已知晶振频率为6MHz。编写程序实现上述功能。(累加器A的初值可给定为01H)

解:首先搭一个汇编程序框架

ORG 2000H ;程序起始地址

AJMP MAIN ;AJMP为绝对跳转指令,跳转至主程序入口MAIN

ORG 200BH ;中断程序起始地址

......

RETI ;中断返回

MAIN: ;主程序入口地址

......

接下来就可以往里面添功能了。依题意,机器周期为12/6MHz=2μs。计数值为2ms/2μ=1000.工作方式1的位数为16位,所以应装入的时间常数为2^16-1000=64536 =FC18H。

(1)主程序的编写

MAIN:

首先应指定堆栈区地址:MOV SP,#53H (虽然本程序堆栈没什么用,不过还是写上)

给定A的初值:MOV A,01H

给时间常数:MOV TL0,#18H

MOV TH0,#0FCH ;字母开头的立即数前面要加0

设定工作方式:MOV TMOD,#05H ;其实控制字就是00000001B

启动:SETB TR0 ;SETB是位寻址的专用指令,可以位寻址的位不能用MOV赋值

开计数器中断:SETB ET0

开系统中断:SETB EA

之后,就需要让程序循环执行,等待计数器溢出时,中断就会自动响应:

SJMP $ ;$表示本条指令地址,意即反复执行此条指令,直到中断来临为止

(2)中断程序的编写

ORG 200BH

中断程序完成的功能是将累加器A的内容左环移一次送P1口。这一功能通过如下指令完成:

RLC A

MOV P1,A

之后还需要对计数器重新置数,以便中断返回后重新计数。

MOV TL0,#18H

MOV TH0,#0FCH

RETI ;中断返回

至此,所有程序编写完成。总览如下:

ORG 2000H

AJMP MAIN

ORG 200BH

RLC A

MOV P1,A

MOV TL0,#18H

MOV TH0,#0FCH

RETI

MAIN:

MOV SP,53H

MOV TMOD,#01H

MOV A,#01H

MOV TL0,#18H

MOV TH0,#0FCH

SETB TR0

SETB ET0

SETB EA

SJMP $

------------------------------------------------------------------------------------------------------------------

题2 设定时计数器T0工作在方式2,TL0为8位计数器,TH0为数据缓冲器,可自动再装入时间常数,产生500μs定时中断。在中断服务程序中把A减1送P1口。晶振频率为6MHz。编写程序实现上述功能。

解:时间常数为6

ORG 2000H

AJMP MAIN

ORG 200BH

DEC A

MOV P1,A

RETI

MAIN:

MOV SP,#53H

MOV TMOD,#02H ;TMOD=00000010B=02H

MOV TL0,#06H

MOV TH0,#06H

SETB TR0

SETB ET0

SETB EA

SJMP $


相关文章

专题分类