版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章中断系统和定时/计数器本章学习目标:理解中断概念,能正确描绘单片机中断响应过程熟记89C51单片机的5个中断源及其中断入口地址能按要求正确设置特殊功能寄存器IE、IP、TCON、SCON和TMOD熟悉中断优先控制的方法能正确描绘定时/计数器的4种工作方式,重点掌握方式1、方式2的应用学会定时/计数初值的计算能读懂教材中的控制实例,学会编写同等难度的中断、定时/计数程序5.1中断系统5.1.1中断系统的基本概念
某人看书——某人正在处理一件事A电话铃响——出现另一件须立即解决的事B暂停看书——中止A 书中作记号——记录断点,便于接续电话谈话——处理B 继续看书——继续A的工作 保护断点中断响应中断请求中断返回1.中断的概念(1)现实生活中的中断:
中断原因:
一个人不可能同时完成两项任务。
单片机只有一个CPU,一旦面临多任务,它也会中断吗?先接电话,然后再继续看书,这样效率最高!(2)单片机中的中断CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生或中断请求);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。中断请求→中断响应→中断服务→中断返回中断过程事件B的处理过程事件A事件B什么是中断?2.中断技术的应用并行处理
CPU可以与多台外设并行工作,并分时与他们进行信息交换,提高了CPU的工作效率。实时控制
单片机应用系统可能随机请求CPU提供服务。有了中断系统,CPU就可以立即响应并予以处理。故障处理
单片机系统在工作时可能会出现一些突发故障,如电源断电,存储器出错,程序执行错误(如除数为0)等,一旦出现故障,CPU就可及时转去执行故障处理程序,而不必停机。3.中断系统
为实现中断功能而配置的硬件和编写的软件就是中断系统。中断由谁来实施?中断功能由中断系统来执行。图5-1中断系统的结构框图5.1.2中断源—中断的申请方能够向CPU发出中断申请的部件称为中断源。89C51单片机有5个中断源。见下表
那些部件可以向CPU申请中断呢?中断源
说明
外部中断从P3.2引脚引入的外部中断申请定时器T0中断定时器T0溢出时引发中断申请外部中断从P3.3引脚引入的外部中断申请定时器T1中断定时器T1溢出时引发中断申请串行口中断一次串行发送或接收完成后,发出中断申请“五源中断,两级管理”
五个中断源:入口地址
外部中断0(/INT0)0003HT0溢出中断000BH
外部中断1(/INT1)0013HT1溢出中断001BH
串口中断
0023H
“五源中断”大家应当明白,为什么前面有一些程序一始我们这样写:ORG0000HLJMPSTARTORG0030HSTART:。。外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H这样写的目的,就是为了让出中断源所占用的向量地址。当然,在程序中没用中断时,直接从0000H开始写程序,在原理上并没有错,但在实际工作中最好不这样做。中断服务入口地址它们的自然优先级由高到低排列。5.1.3中断控制——中断的控制“工具”中断允许寄存器IE中断优先级寄存器IP定时/计数器及外部中断控制寄存器TCON串口控制寄存器SCON
单片机通过对4个特殊功能寄存器实施中断控制:1.中断允许寄存器IE功能:
控制单片机是否接受中断申请,以及接受哪一种中断申请字节地址:
A8H
其格式和每位的含义如下,可以位寻址:图5-2IE的格式由位操作指令或数据传送指令实现。例:同时打开外部中断0和串行口中断,可设置为:法1:MOVIE,#10010001B
法2:SETB
ESSETBEX0SETBEA
〈想一想〉还可以怎样实现?如何对IE进行设置?
IE的设置方法:2.中断优先级寄存器IP功能:
对89C51单片机进行高级别或低级别中断的设置,IP的字节地址:
B8H
格式和每位的含义如下:
图5-3IP的格式
举例例:令串行口为高优先级中断,外部中断0为低优先级中断。设置方法:法1:
MOVIE,#10010001B
;开中断
MOVIP,#00010000B
;设优先级法2:
MOVIE,#10010001B
SETBPS说明:此时串口的优先级高于外部中断0的优先级答案:
此时CPU按自然优先级顺序确定该响应哪个中断请求。如果几个同级别的中断源同时申请中断,CPU如何响应?注意:
自然优先级由硬件决定,用户不能更改。排列见表5-2同一级中的5个中断源的优先顺序是:
/INT0中断
T0溢出中断
/INT1中断
T1溢出中断
串口中断
高低出厂前已由厂家固化顺序——事先约定中断优先原则:(概括为四句话)1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。
例:设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了XXXPSPT1PX1PT0PX000000110因此,最终,IP的值就是06H例:在上例中,如果5个中断请求同时发生,求中断响应的次序。响应次序为:定时器0->外中断1->外中断0->实时器1->串行中断。3.定时/计数器及外部中断控制寄存器TCON功能:
字节地址:
88H可设置外部中断申请的形式:低电平触发还是下降沿触发控制定时/计数器的计时开始或停止是各中断源(串口中断除外)是否申请中断的标志位格式如下,各位含义见表5-3TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0形式符号位地址功能说明中断控制IT088H外部中断0的触发控制位IT0=0:低电平触发
IT0=1:下降沿触发IT0的状态由用户通过初始化程序定义IE089H外部中断0请求标志位。CPU采样到外部中断0的中断请求时,IE0=1CPU响应该中断时,IE0=0IE0的状态由单片机自动设置
IT18AH外部中断1的触发控制位IT1=0:低电平触发IT1=1:下降沿触发IT1的状态由用户通过初始化程序定义IE18BH外部中断1的中断请求标志位CPU采样到外部中断1的中断请求时,IE1=1CPU响应该中断时,IE1=0IE1的状态由单片机自动设置
表5-3TCON的功能说明形式
符号
位地址
功能
说明
定时/计数控制
TR08CHTR0=1:启动定时/计数器T0TR0=0:停止定时/计数器T0
TR0的状态由用户通过初始化程序定义TF08DH定时/计数器T0溢出中断请求位T0定时或计数完成时TF0=1,同时申请中断CPU响应该中断时,TF0=0TF0的状态由单片机自动设置
TR18EHTR1=1:启动定时/计数器T1TR1=0:停止定时/计数器T1
TR1的状态由用户通过初始化程序定义TF18FH定时/计数器T1溢出中断请求位T1定时或计数完成时TF1=1,同时申请中断CPU响应该中断时,TF1=0TF1的状态由单片机自动设置
续表5-3
例1编程设定TCON为低电平触发的高优先级中断源。分析:
这是典型的中断初始化问题,方法一般如下:1)对TCON的相关位赋值2)设定所用中断源的优先级——赋值IP3)开中断——置位IE解:
法1:CLRIT1SETBPX1SETBEX1SETBEA例1
法2:CLRIT1MOVIP,#04HMOVIE,#84H4.串口控制寄存器SCON功能:
只有D1和D0位用于中断,作为串口中断请求标志,即串口中断请求寄存器字节地址:
98H
格式如下:RI为接收中断请求标志位。当串口接收完一帧串行数据时,RI自动置1;CPU响应中断后,用软件对RI清0。TI为串行口发送中断请求标志。当串口发送完一帧串行数据时,TI自动置1,请求中断。CPU响应中断后,由软件对TI清零。其他几位的含义及用法见第5章。日常生活中的中断与单片机中断的比较:某同学 单片机过程说明正在看书 执行主程序有人找出去 中断信号
中断请求暂停看书
暂停执行主程序
中断响应书中作记号当前PC入栈
保护断点出去做事 执行中断程序
中断服务回来继续看
返回主程序
中断返回5.1.4中断响应无同级或高级中断正在服务有中断请求信号相应的中断源已打开,即EA=1,中断源对应中断允许位也为1。当前的指令周期已经结束如果当前指令为RETI或访问IE和IP的指令,至少还要再执行完一条指令。1.中断响应条件中断响应和中断返回1、中断响应的条件:我们人可以响应外界的事件,是因为我们有多种“传感器“――眼、耳可以接受不同的信息,计算机是如何做到这点的呢?MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。在下列三种情况之一时,CPU将封锁对中断的响应:ACPU正在处理一个同级或更高级别的中断请求。B
现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。
C
当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才可以响应中断。MCS-51的中断响应过程:2、中断响应过程这些工作都是由硬件来完成的,不必我们去考虑。这里还有个问题,大家是否注意到,每个中断向量地址只间隔了8个单元,如0003-000B,在如此少的空间中如何完成中断程序呢?很简单,你在中断处安排一个LJMP指令,不就可以把中断程序跳转到任何地方了吗?一个完整的主程序看起来应该是这样的:ORG0000HLJMPSTARTORG0003HLJMPINT0;转外中断0ORG000BHRETI;没有用定时器0中断,在此放一条RETI,万一“不小心“产生了中断,也不会有太大的后果。CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将相应的中断入口地址送入PC,PC是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。2.中断响应过程图5-4中断响应过程将当前寄存器内容压入堆栈,如PUSHACC在中断服务程序中实现,解决单片机中断后要干什么的问题。把保存在堆栈中的寄存器内容取出,送回原来的位置,如POPACC☆5.1.5中断嵌套答案:CPU要进行分析判断,决定是否响应:当CPU正在执行中断服务程序时,又有新的中断源发出中断申请,响应吗?情况1:
同级或低级中断源申请中断,CPU不予理睬情况2:高级别中断源申请中断,若无中断屏蔽CPU就要响应。待执行完高级别中断服务程序后再转回低级中断服务程序继续执行,这就是中断嵌套。图5-5二级中断嵌套的执行过程软件构成:主程序+中断服务程序程序编制的关键点:
要对题目要求进行精确分析,明确哪些环节应该安排在主程序中,哪些环节应该安排在中断服务程序中,再分别编制主程序和中断服务程序。5.2中断的应用4.2.1中断应用指导
1.中断系统的程序编制
1.中断系统的程序编制
(1)编制主程序
第一部分:主程序初始化
功能:第二部分:须由主程序完成的其它功能。此部分必须编写用于设置堆栈位置;定义触发方式(低电平触发或脉冲下降沿触发)对IE和IP赋值等;(2)选择中断服务程序的入口地址。(3)编制中断服务程序。
1.中断系统的程序编制即明确中断服务程序的起始位置注意1:一般要保护断点,即保护进入中断时累加器A、进/借位标志CY和SFR的状态,并在退出中断之前将其恢复;注意2:必须在中断服务程序中设定是否允许再次中断(即中断嵌套),由用户对EX0(或EX1)位置位或清0决定。
说明:一般在中断服务程序中涉及到关键数据的设置时应关中断,即禁止嵌套。2.中断应用举例——三相交流电的故障检测电路
例2
图5-6是三相交流电的故障检测电路。当A相缺电时,发光二极管LEDA亮;当B相缺电时,发光二极管LEDB亮;当C相缺电时,发光二极管LEDC亮。硬件特点:
①外部中断由3个交流继电器的触点和一个或非门扩展而成;
②3个220V的交流继电器的线圈ZA、ZB、ZC分别接在A、B、C各相和交流地之间。图5-6三相交流电的故障检测电路(1)检测原理①三相电正常情况下3个线圈同时得电3个常开触点全都闭合0001不申请外部中断②故障情况下(假设A相掉电)(1)检测原理线圈ZA失电常开触点ZA断开0申请外部中断,在外部中断服务程序中读取P1.0引脚状态0011产生A相掉电状态信号送入P1.01在中断服务程序中对该引脚输出1A相故障指示灯亮线圈ZB、ZC有电常开触点ZB、ZC闭合B、C相故障指示灯不亮(2)软件设计
ORG0000H LJMPMAIN ;跳至主程序
ORG0013H ;的中断入口地址
LJMPTEST ;转至中断服务程序
ORG0100H MAIN:MOVP1,#15H;P1.0、P1.2、P1.4作输入;P1.1、P1.3、P1.5输出0 SETBEX1 ;开中断
CLRIT1;为低电平触发
SETBEA ;CPU开中断
SJMP$ ;等待中断TEST: JNBP1.0,LB ;A相正常,转测B相
SETBP1.1 ;A相掉电,点亮LEDALB: JNBP1.2,LC ;B相正常,转测C相
SETBP1.3 ;B相掉电,点亮LEDBLC: JNBP1.4,LL ;C相正常,返回
SETBP1.5 ;C相掉电,点亮LEDCLL:RETIEND5.2.2课题与实训
中断控制流水灯一.实训目的学习外部中断的基本用法掌握中断处理程序的编程方法二.课题要求在程序正常运行时P1口的8个LED灯作单灯左移8次而后单灯右移7次,如此循环;中断时(即按键按下)则P1口的8个LED闪烁3次(即全亮全灭3次)。三.背景知识
1.中断程序的设计主要涉及开中断、设定优先级,外中断还
涉及触发方式的设定。
2.在软件设计中,首先要对主程序和中断服务程序所完成的
任务进行划分。根据该课题提出的要求,在主程序中应该
完成的任务是8个LED循环左移右移;在中断服务程序中
应该完成的功能是8个LED闪烁3次。四.硬件电路硬件结构如图,12引脚的按键点动表示有中断请求发出。
图5-7实训7电路五.参考程序
ORG0000H LJMPSTART ORG0003H LJMPINT0 ORG0100H START:MOVSP,#60HMOVIE,#81H;开INT0中断
SETBIT0;INT0下降沿触发
L1:MOV
A,#0FFH;设初值
MOV
R0,#8;设定左移八次
CLR
C;将CY清0L2:RLC
A;带进位位循环左移一位
MOV
P1,A;送P1口,P1.0灯亮
ACALL
DELAY;延时0.2秒
DJNZR0,
L2;判断是否左移8次
MOV
R0,#7;移动7次L3:RRC
A;带进位位循环右移
MOV
P1,A;送P1口
ACALL
DELAYDJNZ
R0,L3;是否右移7次?
AJMP
L1;重新开始DELAY:MOV
R5,#4;延时0.2秒
D1:MOV
R6,#200D2:MOV
R7,#123NOPDJNZ
R7,$
DJNZ
R6,D2DJNZ
R5,D1RETINT0:PUSHPSW;保护PSW,ACC值
PUSHACCMOVA,#00H;使8个LED全亮
MOVR2,#6;闪烁3次(全亮全灭各3次)
L4:MOVP1,A;A值送出
LCALLDELAY;延时0.2秒
CPLA;A值取反
DJNZR2,L4;闪烁3次?
POPACC;恢复保护的A值
POPPSW;恢复保护的PSW值
RETI;返回主程序
END
六.总结与提高
1.总结:中断服务程序与子程序对比共同点:格式相近,执行过程大体相同子程序执行时刻是确定的,CPU只要执行LCALL、ACALL等调用指令就会转去执行子程序中断服务程序中断申请往往是随机发生的。中断服务程序的发生可能是在开中断后的任意时刻,也可能不发生,2.提高
编写一个由两个中断(外部中断0、外部中断1)控制的流水灯程序。要求:主程序不变,中断0可使P1.0~P1.3的LED闪烁5次,中断1可使P1.4~P1.7的LED闪烁5次,设定中断1的优先级比中断0高。中断系统应用举例要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。解:INT0输入按键信号,P1.0输出改变LED状态。1.跳变触发:每次跳变引起一次中断请求。
ORG 0000H;复位入口 AJMPMAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序MAIN:MOVP1,#0FFH;
SETB EA ;开总允许开关
SETB EX0 ;开INT0中断
SETB IT0 ;负跳变触发中断H: SJMP H ;执行其它任务PINT0:CPLP1.0 ;改变LED RETI ;返回主程序单片机INT0P1.01+5V处理外部中断
ORG 0000H;复位入口 AJMPMAIN ORG 0003H ;中断入口 AJMP PINT0
MAIN:
MOVP1,#0FFH; SETB EA ;开总允许开关
SETB EX0 ;开INT0中断
CLR IT0 ;低电平触发中断H: SJMP H ;执行其它任务PINT0:CPLP1.0 ;改变LEDWAIT:JNB P3.2,WAIT;等按键释放
RETI ;返回主程序1.软件等待按键释放。2.硬件清除中断信号。2.电平触发:避免一次按键引起多次中断响应。单片机INT0P1.01+5V5.6实践训练
任务:工业顺序控制
1.实现任务工业顺序控制,由P1.0~1.6控制注塑机的7道工序,现模拟控制7只发光二极管的点亮,低电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警声音输出,设定6道工序只有1位输出,第七道工序3位有输出。
2.任务目标
(1)掌握中断的初始化步骤。
(2)了解中断的处理过程。
(3)了解中断服务子程序与普通子程序的异同。
3.知识点分析
(1)中断的入口地址。
(2)中断源的产生、中断的控制、优先级的处理、中断的响应和返回。
4.实施过程
(1)硬件设计
P3.4接K1,P3.3接K2(外中断1),P1.0~P1.6分别接发光二极管D1~D7,P1.7接LM386正向输入端,通过LM386功率放大后5脚输入接扬声器,由它发出报警声音。硬件设计如图5-12所示。图5-12工业顺序控制2) 软件设计
ORG 0000H LJMP PO10 ORG 0013H ;外部中断1的入口地址
LJMP PO16 ORG 0080HPO10:MOV P1,#7FH ORL P3,#00HPO11:JNBP3.4,PO11 ;开工吗?
MOV IE,#84HMOV IP,#04H MOV PSW,#00H ;初始化
MOV SP,#53HPO12:MOV P1,#7EH ;第一道工序
ACALL PO1B MOV P1,#7DH ;第二道工序
ACALL PO1B MOV P1,#7BH ;第三道工序
ACALL PO1B MOV P1,#77H ;第四道工序
ACALL PO1B MOV P1,#6FH ;第五道工序
ACALL PO1B MOV P1,#5FH ;第六道工序
ACALL PO1B MOV P1,#0FH ;第七道工序
ACALL PO1B SJMP PO12PO16:MOV B,R2 ;保护现场PO17:MOV P1,#7FH ;关输出
MOV 20H,#0A0H ;振荡次数 PO18: SETB P1.7 ;振荡
ACALL PO1A ;延时
CLR P1.7 ;停振
ACALL PO1A ;延时
DJNZ 20H,PO18 ;不为0转
CLR P1.7 ACALL PO1A ;停振
JNB P3.3,PO17 ;故障消除吗?
MOV R2,B ;恢复现场
RETIPO19: MOV R2,#10H
ACALL DELY ;延时1 RETPO1A: MOV R2,#06H ACALL DELY ;延时2 RETPO1B: MOV R2,#30H ACALL DELY ;延时3 RETDELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET END5.3定时/计数器
1.日常生活中定时、计数的例子:如闹钟、画“正”统计选票、家用水表对水量的计数。
2.单片机应用系统中定时计数的需求:如用单片机控制的打铃器、空调的定时开关、啤酒自动生产线上对酒瓶的计数装置等。
3.89C51单片机片内的定时/计数器:
两个16位可编程的定时/计数器:T0和T1,都能定时和对外部事件进行计数。此外,T1还可以作为串行接口的波特率发生器。5.3.1定时/计数器的结构1.定时和计数的原理(1)计数
定时/计数器的实质是加1计数器(16位),其原理类似于古代用来计时的水钟:假设计满一小时需要100,000,000滴,这称为水钟的计数容量16位定时/计数器的计数容量是65536单片机是对脉冲个数计数,计数器每接收到一个脉冲,计数值加1,当接收满65535个脉冲后,再来一个脉冲,计数值清0表明这一轮计数结束,同时将标志位TF0或TF1置1。
(2)定时
单片机内部的计数器用作定时器时,是对标准的时钟进行了计数,每来一个时钟脉冲,计数器加1,只要保证计数脉冲的间隔相等,则计数值就代表了时间的流逝。计数器如何能作为定时器使用呢?单片机中的定时器和计数器其实是一个器件:计数器:是对外部发生的事件进行计数,定时器:是对单片机内部的标准时钟脉冲进行计数。单片机内部的标准时钟脉冲是如何获得的呢?
见图5-9,它是由单片机的晶振经过12分频后得到。由于晶振的频率很准,所以这个时钟脉冲的时间间隔也很准。不难算出,当单片机采用12MHz的晶振时,它提供给计数器的脉冲频率是12MHz/12=1MHz,脉冲周期就是1微秒。图5-9定时/计数器T0的结构示意图
单片机内部的16位定时/计数器由高8位和低8位两个寄存器组成:
T0由TH0和TL0组成,
T1由TH1和TL1组成,定时/计数器的计数值就存放在这里面。定时/计数器T1的结构与T0相同。图9-9定时/计数器T0的结构示意图
2.定时/计数器的结构再以水钟为例,当水不断落下,下面容器中的水不断变多,最终总有一滴水使得容器完全充满。这时如果再有一滴水落下,就会发生“溢出”。与此类似,16位定时/计数器计满65536个脉冲时,也会发生溢出。
定时/计数器溢出后标志位TF0(或TF1)由0变1,由此能够引发定时中断(在中断定时方式下),这就像定时的时间一到,闹钟就会响一样。如果采用12MHz的晶振,对应的脉冲周期是1微秒,计满65536个脉冲所对应的时间就是65.536ms。
3.定时/计数值的设置现实生活中,如何满足计数值少于65536的需要?如牛奶包装线上24盒装箱一次。再回到水钟的例子上去:刚才假设下面容器滴入100,000,000滴水才会满,现在我们在开始滴水之前先放入一勺水,这样问题就解决了。
计数器的道理是一样的,只要用预置数的方法先在计数容器内存入一个初值
(通常称为时间常数),如我们要计100,那就存入65436,只要再来100个脉冲,就刚好会溢出,引发中断。计数器初值的设置在主频为12MHz的情况下,每个时钟脉冲是1微秒,则计满65536个脉冲需65.536毫秒,如要定时10毫秒则存入初值55536,(10毫秒是10000微秒,需计数10000个脉冲)。可见,
定时器的定时时间长短与系统时钟和定时器初值有关。
说明
1.当定时/计数器用作计数器时,通过引脚P3.4(P3.5)对外部输入脉冲计数。
2.定时/计数器T0(T1)启动运行后,会按设定的工作方式独立进行计数,不再占用CPU时间。当计数器T0(T1)计满溢出时,TF0(TF1)置1,向CPU发出中断请求信号。定时器初值的设置5-10定时/计数器的控制关系
5.3.2定时/计数器的控制
在单片机中有两个特殊功能寄存器与定时/计数有关,它们就是TMOD和TCON,定时/计数器T0、T1就由它们来控制:
TMOD用于设置工作方式;
TCON用于控制其启动、停止和中断申请。
1.定时器工作方式寄存器TMOD
TMOD用于设置T0和T1的工作方式,字节地址为89H,不能按位寻址。其格式和各位的含义如下:
2.定时/计数器控制寄存器TCON
TCON的低4位用于控制外部中断,高4位用于控制定时/计数器的启动和中断申请。
TF0(或TF1)
当计数溢出时,TF0(或TF1)会自动由0变1,告诉我们计数已满,我们可以通过查询TF0(或TF1)位的状态来判断计时时间是否已到;
如果采用定时中断方式,则TF0(或TF1)由0变1时,能自动引发中断。
TR0(或TR1)
由图4-11可知,只有当TR0(或TR1)为1时,开关1才能闭合,计数脉冲才能进入计数器,故TR0(或TR1)称为运行控制位,可用指令“SETBTR0(或TR1)”来置位以启动定时/计数器运行;或用指令“CLRTR0(或TR1)”来关闭定时/计数器的工作,一切全靠编程人员控制。图5-11定时/计数器T0方式0的逻辑结构示意图
5.3.3定时/计数器的工作方式
80C51单片机定时/计数器T0有4种工作方式(方式0、1、2、3),T1有3种工作方式(方式0、1、2)。
1.方式0
当TMOD的M1M0=00时,定时/计数器工作于方式0。方式0为13位定时/计数器,由TL0的低5位和TH0(8位)共同完成计数功能(TL0的高3位可忽略)。
当TL0的低5位溢出时,向TH0产生进位;TH0溢出时,将定时器中断请求标志位TF0置1,可申请中断,也可对TF0进行查询。
图5-11定时/计数器T0方式0的逻辑结构示意图2.方式1
当M1M0=01时,定时/计数器工作于方式1。方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位共同构成。其余操作同方式0。图5-12定时/计数器T0方式1的逻辑结构示意图3.方式2
当M1M0=10时,定时/计数器工作于方式2。这是自动重装初值的8位计数方式,它省去了方式0和方式1在多次重复计数状态下必须重新设定计数初值的麻烦,但是却付出了减小定时时间的代价。图5-13定时/计数器T0方式2的逻辑结构示意图特别适合于制作比较精确的脉冲信号发生器。4.方式3
方式3只适用于定时/计数器T0。当T1被设定为方式3状态时,将停止计数。
当M1M0=11时,T0工作于方式3。此时TL0和TH0作为两个相互独立的8位定时/计数器使用。TL0既可定时又可计数,它使用T0的各控制位、引脚和中断源,即C/、GATE、TR0、TF0、T0(P3.4引脚)、(P3.2引脚);TH0此时只能用作内部定时功能,它借用了定时/计数器T1的控制位TR1和T1的中断标志位TF1,其启动和停止只受TR1控制。图5-14定时/计数器T0方式3的逻辑结构示意图
定时器T1无工作方式3,当定时器T0工作在方式3时,定时器T1可设置为方式0、方式1和方式2。
5.4.1应用指导
1.定时/计数器的定时/计数范围
定时/计数器工作于不同方式下的位数不同,它所具有的计数范围也不一样:
工作方式0:13位定时/计数方式,因此,最多可以计到213,也就是8192次。工作方式1:16位定时/计数方式,因此,最多可
以计到216,也就是65536次。工作方式2和工作方式3:都是8位定时/计数方
式,因此,最多可以计到28,也就是256次。<想一想>如果我们需要超过计数器计数范围的定时或计数功能,应该怎样做?5.4定时/计数器应用与训练
2.时间常数初值的计算定时/计数器只要预设一个时间常数初值,就可以完成不超过其计数范围的任意大小的计数。算法如下:定时时间常数初值X:方式0X=8192-t(fosc/12)
方式1X=65536-t(fosc/12)
方式2、方式3X=256-t(fosc/12)
其中t是需要定时的时间,单位是微秒;fosc是晶振计数时间常数X:方式0X=8192-S
方式1X=65536-S
方式2、方式3X=256-S
说明:式中S是需要计数的次数
假设流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,应当预置的计数初值是多少呢?对了,就是8192-12=8180。3.定时/计数器的初始化对80C51单片机的定时/计数器编程的初始化方法:①对TMOD赋值,以确定T0和T1的工作方式;②计算时间常数初值,并将其写入TH0、TL0或TH1、
TL1;③采用中断定时方式时,需对IE赋值开中断;④置位TR0或TR1,启动定时/计数器。
5.4.2基本训练—初始化训练例3:某牛奶生产线上一个包装是12盒,要求每生产12盒就执行装箱操作,用89C51单片机来控制,请编写初始化程序。
1.思路与计算:要确定定时器(T0或T1),选择其工作方式。我们以T0的工作方式2为例,计算时间常数并赋值给TH0、TL0。
X=256-S=256-12=244=0F4H
2.初始化程序:
MOVTMOD,#06H;T0作计数器,工作于方式2MOVTH0,#0F4H;装入时间常数初值
MOVTL0,#0F4H;自动重装时间常数
MOVIE,#00H;用查询方式确定计满12盒?(或MOVIE,#82H);使用T0中断,计满12盒后,;自动申请中断
SETBTR0;启动T0波特率发生器
3.总结:对计数过程是否结束有查询和中断两种方法,要合理选择,并在程序设计中正确体现。
5.4.3应用实例
1.
定时/计数器用于外部脉冲宽度的测量(1)测量原理可以利用定时/计数器方式寄存器TMOD中的门控位GATE与引脚配合使用,控制定时/计数器的启动与停止:当GATE=1时,要求TR1=l,且为高电平,才能启动定时器T1计数工作;如果出现低电平,则T1停止计数;当GATE=0时,只要TR1=1就可以启动定时器,而与的输入状态无关。
可以利用定时/计数器方式寄存器TMOD中的门控位GATE与引脚配合使用,控制定时/计数器的启动与停止:
当GATE=1时,要求TR1=l,且为高电平,才能启动定时器T1计数工作;如果出现低电平,则T1停止计数;
当GATE=0时,只要TR1=1就可以启动定时器,而与的输入状态无关。
利用上述特点,将被测脉冲信号从(P3.3)引入,在T1的程序初始化中令GATE=1,同时“SETBTR1”,这样脉冲信号的上升沿就能启动T1计数,脉冲信号下降沿能使T1停止计数。利用定时器T1的计数值m乘以机器周期就可以得到被测脉冲信号的宽度TW。(2)硬件电路硬件电路简图如图4-15。
(3)程序设计
利用89C51的内部RAM30H、31H单元保存被测脉冲宽度对应的计数值。参考程序如下:
ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#60H;设堆栈指针
MOVTMOD,#90H;设置控制字,T1工作于方式
;1,GATE=1MOVTH1,#00H;设定计数初值为00H
MOVTL1,#00HL1:JBP3.3,L1;等待输入变为低电平
SETBTR1;预置TR1=1,准备启动T1L2:JNBP3.3,L2;等待上升沿,以便开始计数L3:JBP3.3,L3;是高电平则计数继续
CLRTR1;低电平则停止计数
MOVA,TL1 ;读低位计数值
MOV30H,A ;低位计数值存于30HMOVA,TH1 ;读高位计数值
MOV31H,A ;高位计数值存于31HEND(4)总结与思考定时/计数器还可用于测量脉冲信号的频率、周期等。本实例是利用定时/计数器的门控位(GATE)测量脉冲宽度。但要注意,在晶振12MHz的情况下,被测脉冲宽度范围最大为65535×1μs=65.536ms。
<想一想>,如果要测量脉冲信号的周期,该如何去做?
2.计数器用于绕线机的控制绕线机常用于对电机或变压器的绕组进行绕制,图4-16是绕线机的控制电路。当按下工作按钮以后,机器启动,绕线机在直流电机和减速齿轮的带动下开始工作。当绕线架上的线圈绕到规定的圈数时,绕线机会自动停止绕线。如果再次按下工作按钮,绕线机会重复以上过程。图5-16绕线机的控制电路控制说明:1.软件控制P1.0=0时,绕线机开始绕线;P1.0=1时,绕线机不绕线。
2.绕线机每绕一圈,绕线机脉冲产生电路就产生一个脉冲信号。
(1)工作原理
由于单片机复位后P1口的输出状态全部为1,所以系统上电后,P1.0输出高电平“1”绕线机不工作。
当按下工作按钮以后,P1.1输入低电平“0”,当程序检测到P1.1=0时,在程序指令的控制下从P1.0输出低电平“0”。绕线机开始绕线。绕线机每绕一圈,定时/计数器T1的输入引脚上就会产生一个负跳变的输入脉冲。因此,只要用定时/计数器T1的计数功能控制好输入脉冲的个数,就等于控制了绕线机的绕线圈数。
当绕线机缠绕到指定的圈数时,定时/计数器T1引发计数中断,在程序指令的控制下,P1.0将输出的高电平“1”,使电机停转,制动器恢复制动,于是系统回到最初的停机状态。
我们假设绕线架的规定匝数是5000圈,为控制这个圈数,可以设定定时/计数器T1用作计数器且工作在方式1,于是确定其计数初值为:
初值=65536-5000=60536=0EC78H所以(TH1)=0ECH,(TL1)=78H(2)控制程序参考程序如下:
ORG0000HAJMPMAINORG001BHAJMPCOUNTORG0100H
MAIN:MOVTMOD,#50H;设置T1为计数器,工作于方式1MOVTH1,#0ECH;设定计数初值
MOVTL1,#78HMOVSP,#60H;设堆栈指针
SETBET1;开T1中断
SETBEA ;CPU开中断
CLRF0 ;用户标志F0清0WAIT:MOVC,P1.1 ;等待启动
JCWAIT ;P1.1=1,等待
CLRP1.0 ;启动设备
SETBTR0 ;T1开始计数LOOP:JNBF0,$ ;等待计数5000中断
SETBP1.0 ;绕线机停止工作
CLRTR0 ;T1停止计数
CLRF0 ;清0SJMPWAIT ;等待重新启动
ORG0200H ;T1中断服务程序起始地址COUNT:MOVTH1,#0ECH ;重新设定计数初值
MOVTL1,#78HSETBF0 ;用户标志置1RETI ;中断返回
END5.4.4课题与实训
简易方波发生器一.实训目的掌握定时器初值的计算方法学习定时器的使用及定时中断程序的设计方法掌握方波信号发生器的设计方法二.课题要求
1.基本要求:利用定时/计数器T1,工作于方式0,采用查询方式,在P1.0引脚输出频率为500Hz的方波,并用示波器进行观察(晶振采用12MHz)。
2.较高要求:
利用定时/计数器T1,工作于方式0,采用中断方式,在P1.0引脚输出频率为500Hz的方波,并用示波器进行观察(晶振采用12MHz)。三.背景知识
1.方波产生原理使P1.0引脚的输出状态定时翻转,则该端口能输出一定频率的方波。
2.方式0的时间常数初值
定时/计数器工作于方式0状态下,定时/计数的长度是13位。应用前面给出的时间常数初值的计算公式
X=8192-t(fosc/12)
我们可以很方便地计算出时间常数初值,但在将其装入定时/计数器的TH、TL寄存器时,必须要注意:将计算结果的高8位装入TH1(或TH0)、低5位装入TL1(或TL0),这一环节是非常容易出错的。
以该实训T1方式0产生500Hz的方波(周期是2ms)为例,需要进行1ms的定时,时间常数初值
X=8192-1×10-3×(12×106/12)=8192-1000=7192=1C18H=0001110000011000B
以13位二进制数表示,是1110000011000B,则(TL1)=00011000B=18H,(TH1)=00011100B=1CH
定义TMOD=00000000B四.硬件电路该实训硬件电路十分简单,见图5-17。图5-17简易方波发生器的硬件电路五.参考程序(1)P1.0输出500Hz方波——查询方式
ORG0000H LJMPMAIN ;跳至主程序
ORG0100H MAIN:MOVTMOD,#00H ;置T1工作于方式0 MOVTH1,#1CH ;装入时间常数初值
MOVTL1,#18H SETBTR1 ;启动T1LOOP:JNBTF1,LOOP ;查询等待
CLRTF1;清TF1 CPLP1.0 ;P1.0取反
MOVTH1,#01CH ;重新装入时间常数初值
MOVTL1,#18HAJMPLOOP;继续生成波形
END
(2)P1.0输出500Hz方波——中断方式
ORG0000H LJMPMAIN ;跳至主程序
ORG001BH ;T1的中断入口地址
LJMPFANGBO ;转至中断服务程序
ORG0100H MAIN:MOVTMOD,#00H ;置T1工作于方式0 MOVTH1,#0E0H ;装入时间常数初值
MOVTL1,#18H SETBET1 ;允许T1中断
SETBEA ;CPU开中断
SETBTR1 ;启动T1
SJMP$ ;等待中断FANGBO:CPLP1.0 ;P1.0取反
MOVTH1,#0E0H ;重新装入时间常数初值
MOVTL1,#18H RETI ;中断返回
END六.总结与提高
1.总结
本实训利用定时器T1的定时功能,以两种形式输出频率为500Hz方波。在实际应用中,方波的频率可能要根据现场测量参数、给定参数或按照某种函数关系而变化。因此输出波形的频率在编程时还是未知的。2.提高定时/计数器的计时范围有限,当晶振采用12MHz时,方式1的计时时间最长,也只有65.536ms。当需要定时的时间超出了定时/计数器的计数范围,如需定时2秒,这时可以采用以下两种方法来处理:⑴定时器+软件计数的方法
思路是:利用定时/计数器T1,工作于方式1,实现50ms/次的定时,只要定时40次即可实现2s定时。可以算出定时/计数器T1工作于方式1时,时间常数初值为
X=65536-t(fosc/12)=65536-50×10-3×(12×106/12)=15536=3CB0H
于是(TH1)=3CH,(TL1)=0B0H。
定义TMOD=00010000B,此处只给出延时2s的查询方式子程序。DELAY:MOVR3,#40;设置定时器溢出次数
SETBTR1 ;启动T1开始计时
D1:MOVTH1,#3CH;装入时间常数初值
MOVTL1,#0B0H D2:JBCTF1,D3;TF1为1否?是则跳至D3,并清TF1,
AJMPD2;否,则跳至D2D3:DJNZR3,D1;R3=0?不是,跳到D1CLRTR1;是,则停止计数
RET⑵采用两个定时器串联的方法思路是:
将两个定时器中的一个(如T0)设置为定时方式,另一个(T1)设置成计数方式;将定时器T0计满产生的输出,通过一根I/O口线(如P1.0)连接到计数器T1的计数脉冲输入端P3.5,从而实现更长时间的定时。5.5中断与定时/计数器综合应用举例
5.5.1概述定时/计数功能与中断一样,都是单片机的常用功能。两者常常同时使用。如实训7就是简单的中断、定时综合应用实例。在这类程序的编制过程中,要注意这样几个问题:
选择合适的中断和定时/计数方式。如外部中断是采用电平触发还是脉冲下降沿触发;定时/计数是用自动重装方式还是每次定时结束后用软件重装。确定定时结束的判别方法,用中断还是查询。如采用中断,与其它中断的优先级如何确定,是否会影响系统功能。正确初始化。合理分配控制功能。
☆5.5.2课题与实训
音乐门铃一.实训目的
1.掌握中断与定时/计数综合程序的设计方法
2.学习音乐门铃的设计过程二.课题要求在单片机P1.0引脚外接扬声器,唱出《祝你生日快乐》歌。三.背景知识
1.音频脉冲的产生声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或“低”电平,则在该口线上就能产生一定频率的方波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。例如,要产生中音1。从表4-5可知,中音1的频率为523Hz,周期T=1/523=1912μs,其半周期为1912/2=956μs,因此只要在P1.0引脚产生半周期为956μs的方波,即可听到持续的1音。C调各音符频率与计数初值的对应表如下:注:不发音的简谱码用“0”表示
2.音乐节拍的生成要唱出一首歌,只产生出音频脉冲还不够,还要考虑节拍。
定义:每个音符占用一个字节,字节的高4位代表音符的高低,低4位表示该音符的节拍,如果一拍为0.4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可以设1/4拍为1个DELAY,则1拍应该是4个DELAY,只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。见表
表5-6节拍与节拍码对照表
3.建立音乐的步骤:
先把谱的音符找出,然后由上表建立时间常数初值T的顺序表,标号为TABLE1。建立音符和节拍表,标号为TABLE,将构成发音符的计数值放在其中。
TABLE表的结构为:简谱码(代表音符)为高4位,节拍码(表示节拍数)为低4位,在唱歌程序中对每一个有节拍的音符能通过设计共同生成音符节拍码,本程序的音符节拍码表见表4-5。(1)1/4拍的延迟时间=187毫秒DELAY:MOVR5,#02D1:MOVR4,#187D2:MOVR3,#248DJNZR3,$DJNZR4,D2DJNZR5,D1DJNZR6,DELAYRET
(2)歌谱生日快乐歌
C3/4︱5.565︱7-︱5.565︱-︱ 祝你生日快乐祝你生日快乐︱5.5︱76︱︱-︱ 我们高声歌唱祝你生日快乐四.硬件电路图5-18音乐的应用电路
五.参考程序
ORG0000H LJMPMAIN ;跳至主程序
ORG001BH ;T1的中断入口地址
LJMPTIM1 ;转至中断服务程序
ORG0100H MAIN:MOVTMOD,#10H ;置T1工作于方式1 SETBET1 ;开T1中断
SETBEA ;CPU开中断
MAIN1:MOV60H,#00H;取简谱码指针
NEXT:MOVA,60H;简谱码指针装入AMOVDPTR,#TABLE;指向简谱码TABLE表地址
MOVCA,@A+DPTR;简谱码存入AMOVR1,A;简谱码暂存R1JZSTOP;是否取到结束码00?
ANLA,#0FH;没有,则取低4位的节拍码
MOVR6,A;取到的节拍码存入R6MOVA,R1;将取到的简谱码再装入ASWAPA;高低4位交换
ANLA,#0FH;取低4位的音符码
JNZSING;取到的音符码是否为0?
CLRTR1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语文工作计划
- 电商工作计划范文
- 十一国庆节七天假期安全教案
- 工作前安全分析管理规定
- 2025年AE活性酯市场调查报告
- 买卖合同五篇
- 七年级班务工作计划
- 制定班级德育个人工作计划
- 企业培训心得体会
- 九年级上学期语文期末考试试卷
- 【飞科电器公司基于杜邦分析法的财务分析案例(7700字论文)】
- 多器官功能障碍综合征MODS诊疗及护理试题
- 儿童呼吸道合胞病毒感染临床诊治试题
- 2021-2022学年广东省广州市花都区六年级(上)期末英语试卷
- 2024年人教版八年级生物(上册)期末试卷及答案(各版本)
- A股上市与借壳上市详细流程图
- 2024年美国家用WiFi路由器市场现状及上下游分析报告
- 《橡皮障的应用方法》幻灯片课件
- 锡冶炼工业副产品利用与价值提升
- 2019教科版《三年级科学上册》分组实验报告单
- 人教版5年级上册音乐测试(含答案)
评论
0/150
提交评论