单片机基础(第3版)_第1页
单片机基础(第3版)_第2页
单片机基础(第3版)_第3页
单片机基础(第3版)_第4页
单片机基础(第3版)_第5页
已阅读5页,还剩53页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机基础(第3版)李广弟等编著北京航空航天大学出版社2007年6月第5章

80C51单片机的中断与定时5.1中断概述当CPU正在处理某事件的时候,CPU暂时中止当前的工作,转到中断服务处理程序处理所请求的事件。处理完该事件后,再回到原来被中止的地方继续原来的工作,这称为中断。中断技术为计算机提供了资源共享。5.2

80C51单片机的中断系统5.2.1

中断源与中断向量中断源:产生中断的请求源称为中断源。 80C51的中断系统具有5个中断源:2个外部中断、2个定时器中断、1个串行中断。中断向量:中断服务程序的入口地址。表5.1 5个中断入口地址中断名称中断向量外部中断00003H定时器0中断000BH外部中断10013H定时器1中断001BH串行中断0023H5.2.2中断控制中断控制:提供给用户使用的中断控制手段80C51单片机关于中断的控制包括四项:中断允许控制中断请求控制中断优先控制外中断触发方式控制涉及四个特殊功能寄存器中断允许控制寄存器IE定时器控制寄存器TCON

串行口控制寄存器SCON

中断优先级控制寄存器IP1.中断允许控制寄存器IEIE(A8H)位地址AFHAEHADHACHABHAAHA9HA8HESET1EX1ET0EX0①EA位—符中号断允E许A总控-制位。-EA=0,屏蔽所有的中断请求;EA=1,中断总允许,各中断的禁止与允许取决于各自允许控制位。②EX0和EX1—外部中断的中断允许控制位。EX0(EX1)=0,禁止外部中断;EX0(EX1)=1,允许外部中断。③ET0和ET1—定时器中断允许控制位。ET0(ET1)=0,禁止定时器中断;ET0(ET1)=1,允许定时器中断。④ES—串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。2.定时器控制寄存器TCON位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)①TF0和TF1—定时器(T0和T1)计数溢出标志位。②IE0和IE1—外部中断请求标志位。③IT0和IT1—外中断触发方式控制位。IT0(IT1)=0时,为电平触发方式,低电平有效;IT0(IT1)=1时,为脉冲触发方式,下降沿有效。3.串行口控制寄存器SCON位地址9FH9EH9DH9CH9BH9AH99H98H位符号SM0SM1SM2RENTB8RB8TIRISCON(98H)①TI—串行发送中断请求标志位。②RI—串行接收中断请求标志位。4.中断优先级控制寄存器IP位地址BFHBEHBDHBCHBBHBAHB9HB8H位符号---PSPT1PX1PT0PX0IP(B8H)①PX0—外部中断0优先级设定位;②PT0—定时器0中断优先级设定位;③PX1—外部中断1优先级设定位;④PT1—定时器1中断优先级设定位;⑤PS—串行中断优先级设定位。【例】若允许外部中断0和定时器1的中断,外部中断0采用脉冲触发方式,并设置为高级中断,其它中断源为低级中断。也可以写为如下程序段:MOV IE,

#89HMOV IP,

#01HMOV TCON,

#01H在主程序中编写如下程序段:SETB

EA ;CPU开中断SETB EX0;允许外中断0中断SETBET1;允许定时器1中断SETB PX0

;外中断0为高级中断

SETB

IT0 ;外中断0为脉冲触发方式5.2.3中断优先级控制中断优先级定义原则中断优先原则在中断响应时的体现当高、低优先级中断请求同时出现时,高优先级中断请求被响应;如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应。查询次序是:外部中断0

定时器0中断

外部中断1

定时器1中断

串行中断图5.180C51中断系统控制逻辑3.中断嵌套80C51具有两个优先级,中断嵌套只能一层,其原则是:高优先级中断请求可以打断低优先级的中断服务,进行中断嵌套;同优先级的中断不能嵌套;低优先级中断请求不能对高优先级的中断进行嵌套。5.2.4中断响应过程1.外部中断请求采样每个机器周期的S5P2对INT0(P3.2)和INT1(P3.3)引脚进行采样,采样结果在TCON中的IE0、IE1位进行设置。2.中断查询CPU每个机器周期的S6进行中断查询,逐个检测TCON、SCON中六个中断标志位的状态。查询按优先级顺序进行,即先高级、后低级。同级中断按“外部中断0 定时器0中断

外部中断1 定时器1中断 串行中断”。3.中断响应中断响应的主要内容由硬件自动生成一条长调用指令“LCALL

addr16”。中断响应的封锁:①同级的或高级的中断正在发生;②查询中断请求的机器周期不是当前指令的最后一个机器周期;③当前指令是返回指令(RET、RETI)或访问IE、IP的指令。这类指令执行完还应再执行一条指令才能响应中断。4.中断响应的快慢中断响应的时间为3~8个机器周期。5.2.5中断服务程序1.主程序中的中断初始化ORG

0000HAJMP

MAIN;系统复位后转向主程序ORG

0003HAJMP

EXINT0 ;转向外部中断0服务程序MAIN:外中断0允许MOV

TCON,#01H;脉冲触发方式MOV

IE,#81H ;中断开发,MOV

IP,#01H ;外中断0为高优先级EXINT0:MOV

SP,#03FH ;设置堆栈┇;外中断0服务程序2.中断服务流程①现场保护和现场恢复②关中断和开中断③中断处理④中断返回图5.2中断服务程序流程图执行主程序执行一条指令有中断请求?取下一条指令中断返回保护现场和断点开中断中断服务关中断恢复现场开中断Y关中断N中断服务程序主程序用AT89S51的P1口接8个LED发光二极管,由

P3.2(INT0)引脚接一消抖按键开关。开始接P1.0的LED亮,以后每按键一次引发一次中断,则下一个LED亮。顺序下移,且每次只一个LED亮,周而

复始。请编制程序。+5V红黄绿P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.2AT89S51+5V红黄绿P1.0P1.1P1.2P1.3P1.4P1.5P1.4P1.5P3.2AT89S51ORG

0000HLJMP

MAINORG

0003HRLAMOV

P1,

ARETIORG

0030HMAIN:MOV

IE,

#81HSETB

IT0MOV

A,

#0FEHMOV

P1,

ASJMP

$END5.3

80C51单片机的定时器/计数器5.3.1

定时器/计数器的计数和定时功能计数功能外部计数脉冲由T0(P3.4)和T1(P3.5)引脚引入。每个机器周期的S5P2拍节对计数脉输入引脚进行采样。计数脉冲负跳变有效,若前一机器周期采样为高电平,后一机器周期采样为低电平,即为一个计数脉冲。计数频率不能高于振荡脉冲频率的

1/24。定时功能计数脉冲来自单片机内部,每个机器周期计数一次。计数频率为振荡频率的1/12。5.3.2

用于定时器/计数器控制的寄存器位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT01.定时器控制寄存器(TCON)TCON(88H)①TR0和TR1—定时器(T0和T1)运行控制位。TR0(TR1)=0,停止定时器/计数器工作;TR0(TR1)=1,启动定时器/计数器工作。②TF0和TF1—定时器(T0和T1)计数溢出标志位。2.定时器方式选择寄存器(TMOD)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0TMOD(89H)①GATE—门控位。GATE=0,仅由定时器启动位TR0控制定时器的启动;GATE=1,以外中断请求输入引脚(INT0或INT1)和定时器启动位TR共同决定定时器的启动。②C/T—定时方式或计数方式选择位。C/T=0,定时工作方式;C/T=1,计数工作方式。③M0和M1—工作方式位。M1M0=00时,工作方式0;M1M0=01时,工作方式1;M1M0=10时,工作方式2;M1M0=11时,工作方式3。5.3.3定时器工作方式0电路逻辑结构启停控制图5.3定时器/计数器0的工作方式0逻辑结构3.定时和计数范围计数功能时,计数范围是1~8192(213)。定时功能时,定时时间的计数公式为:(213—计数初值)×晶振周期×12或

(213—计数初值)×机器周期若晶振频率为6MHz,则最小定时时间为:[213-(213-1)]×2us=2us最大定时时间为:[213-0]×2us=16384us4.应用举例【例5.1】设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500us的等宽方波连续脉冲,并由P1.0输出。计算计数初值(213-X)×2us=250us求解得:X=8067,表示为二进制为11111100

00011.高8位放入TH1,即TH1=0FCH;低5位放入TL1,即TL1=03H。TMOD寄存器初始化M1M0=00,C/T=0,GATE=0,则TMOD寄存器初始化为00H。参考程序:MOV

TMOD,#00H;设置T1为工作方式0MOV

TH1,#0FCH;设置定时器初值MOV

TL1,#03HMOV

IE,

#00HSETB

TR1;禁止中断;启动定时LOOP:LOOP1:JBC TF1,LOOP1;查询溢出标志AJMP

LOOPMOV

TH1,#0FCH;重置定时器初值MOV

TL1,

#03HCPL

P1.0AJMP

LOOP;输出取反;重复循环5.3.4定时器工作方式1方式1为16位计数结构的工作方式,计数器由寄存器TH0、TL0(或TH1、TL1)的全部共16位构成T0(或T1)。计数功能时,计数范围是1~65536(216)。定时功能时,定时时间的计数公式为:(216—计数初值)×晶振周期×12或

(216—计数初值)×机器周期若晶振频率为6MHz,则最小定时时间为:[216-(216-1)]×2us=2us最大定时时间为:[216-0]×2us=131072us≈131ms【例】设单片机晶振频率为6MHz,使用定时器1以方式1产生周期为100ms的等宽方波连续脉冲,并由P1.0输出。计算计数初值(216-X)×2us=50

000us求解得:X=40536,表示为二进制为9E58H。高8位放入TH1,即TH1=9EH;低8位放入TL1,即TL1=58H。TMOD寄存器初始化M1M0=01,C/T=0,GATE=0,则TMOD寄存器初始化为10H。参考程序:MOV

TMOD,#10H;设置T1为工作方式0;设置定时器初值MOV

TH1,

#9EHMOV

TL1,

#58HMOV

IE,

#00HSETB

TR1;禁止中断;启动定时LOOP:JBC TF1,LOOP1;查询溢出标志LOOP1:;重置定时器初值AJMP

LOOPMOV

TH1,

#9EHMOV

TL1,

#58HCPL

P1.0AJMP

LOOP;输出取反;重复循环5.3.5定时器工作方式21.电路逻辑结构图5.4定时器/计数器0工作方式2的逻辑结构2.循环定时应用【例5.2】使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲。已知晶振频率为6MHz。计算计数初值(28-X)×2us=100us求解得:X=206D=11001110B=0CEH.TH0和TL0分别存入0CEH,即TH0=TL0=0CEH。TMOD寄存器初始化

M1M0=10,C/T=0,GATE=0,则TMOD寄存器初始化为02H。参考程序:MOV IE,#00H ;禁止中断MOV

TMOD,#02H;设置定时器0为方式2MOV

TH0,#0CEH;保存计数初值MOV

TL0,

#0CEHSETB

TR0;预置计数初值;启动定时LOOP:JBC TF0,LOOP1;查询计数溢出LOOP1:AJMP

LOOPCPL

P1.0AJMP

LOOP;输出方波;重复循环3.循环计数应用【例5.3】用定时器1以工作方式2实现计数,每计100次进行累加器加1操作。按查询方式编

程。计算计数初值28-100=156D=9CH,则TH1=TL1=9CH。TMOD寄存器初始化

M1M0=10,C/T=1,GATE=0, 则TMOD=60H。参考程序:MOV

IE,#00H ;禁止中断MOV

TMOD,#60H;设置定时器1为方式2MOVTH1,

#9CH;保存计数初值MOVTL1,

#9CH;预置计数初值DEL:

JBC;启动定时;查询计数溢出LOOP:SETB

TR1TF1,

LOOPAJMP

DELINC

AAJMP

DEL;累加器加1;重复循环5.3.6定时器工作方式31.工作方式3下的定时器/计数器0图5.5定时器/计数器0工作方式3的逻辑结构2.

当定时器0工作方式3下的定时器/计数器1图5.6工作方式3下定时器/计数器1的使用【例】假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。T0工作方式的确定定时时间较长,采用哪一种工作方式?方式0最长可定时16.384ms;方式1最长可定时131.072ms;方式2最长可定时512

s。选方式1,每隔100ms中断一次,中断10次为1s。计算计数初值因为:(216-X)×2us=100

000us所以:X=15536=3CB0H,因此:TH0=3CH,TL0=0B0H(3)10次计数的实现采用循环计数法。4)程序设计(查询方式)TMOD,#01H;设T0工作在方式1;给T0设初值MAIN:

MOVMOVMOVMOVTH0,#3CHTL0,#0B0HB,#0AHSETB

TR0;设循环次数10次;启动T0;100ms定时是否到;重装T0初值;判断T0定时溢出10次是否到LOOP:JNBCLRMOVMOVDJNZCLRTF0,$TF0TH0,#3CHTL0,#0B0HB,LOOPTR0SJMP

$4)程序设计(中断方式)ORG

0000HLJMP

MAIN ;上电转主程序入口MAINORG000BH;T0的中断入口MOVTH0,#3CHMOVTL0,#0B0H;T0重装初值DJNZB,LOOP;判断T0是否中断10次CLRTR0;1s定时时间到,停止T0工作LOOP:RETIORGMAIN:

MOV0030HTMOD,#01H;设T0工作在方式1MOVTH0,#3CH;给T0设初值MOVTL0,#0B0HMOVIE,#82H;允许T0中断MOVB,#0AH;设循环次数10次SETBTR0;启动T0SJMP$;等待一次次中断【例】设MCS-51单片机系统时钟频率为6MHz,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序。1、主程序任务:1)T0工作方式的设定:选择方式1(16位方式),最大定时131ms,本题拟定时时长为100ms。因此TMOD为01H。2)定时常数的设定:X=216-100ms/2us

=15536=3CB0H即:TH0应装3CH,TL0应装0B0H。3)中断管理:允许T0中断,开放总中断即:IE应装10000010B。4)启动定时器T0:SETB

TR0设置软件计数器初值:(如使用R7) 即R7应装0AH动态停机:SJMP

$主程序如下:TMOD,#01H;设定T0为方式1定时

TH0,#3CH;装入定时常数高8位TL0,#0B0H;装入定时常数低8位MAIN:MOVMOVMOVMOVSETBMOVSJMPIE,#82HTR0R7,#0AH$;开放T0中断;启动T0;设置软件计数器;等待一次次中断2、中断服务程序任务:恢复T0计数初值;软件计数器R7减1,并判断是否为0。若为0时,则改变P1.0状态,并恢复R7初值,中断返回;若不为0,则直接中断返回。中断服务程序如下:T0INT:MOVMOVDJNZTH0,#3CHTL0,#0B0HR7,NEXT;恢复定时常数CPLP1.0MOVR7,#0AH;重装R7初值NEXT:RETIORG

0000HAJMP

MAINORG

000BHAJMP

T0INT0030HTMOD,#01H;设定T0为方式1定时TH0,#3CH

;装入定时常数高8位TL0,#0B0H;装入定时常数低8位ORGMAIN:

MOVMOVMOVMOVIE,

#82HSETB

TR0MOV

R7,

#0AH;开放T0中断;启动T0;设置软件计数器SJMP

$T0INT:MOV

TH0,

#3CH;恢复定时常数MOV

TL0,

#0B0HDJNZ

R7,

NEXTCPL

P1.0MOV

R7,

#0AHNEXT:RETIEND完整程序如下:例:已知8051单片机的fosc=6MHz,请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽200μs。采用查询方式编程实现。MOV

TMOD,#02HMOV

TL0,#231SETB

P1.0SETB

TR0LOOP:JNBTF0,$CLR

TF0CLR

P1.0MOV

TL0,#156JNB

TF0,$CLR

TF0SETB

P1.0MOV

TL0,#231SJMP

LOOP例:已知8051单片机的fosc=6MHz,请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽200μs。采用中断方式编程实现。ORG

0HLJMP

MAINORG

0BHJB

P1.0,LOWMOV

TL0,#231SETB

P1.0RETILOW:

MOV

TL0,#156CLR

P1.0RETIMAIN:

MOV

TMOD,#02HMOV

TL0,#231MOV

IE,#82HSETB

TR0SETB

P1.0SJMP

$END例:已知8051单片机fosc=12MHz,用T1定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。采用查询方式编程。MN:

MOV

TMOD,#20HMOV

TL1,#6MOV

TH1,#6MOV

R7,#4SET

TR1LOOP:JNBTF1,$CLR

TF1CPL

P1.1DJNZ

R7,EDCPL

P1.0MOV

R7,#4ED:

SJMP

LOOP例:已知8051单片机fosc=12MHz,用T1定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。采用中断方式编程。ORG

0H

LJMP

MN

ORG

1BHCPL

P1.1DJNZ

R7,EDCPL

P1.0MOV

R7,#4ED:

RETIMN:

MOV

TMOD,#20HMOV

TL1,#6MOV

TH1,#6MOV

IE,#82HMOV

R7,#4SETB

TR1

SJMP

$【例】以定时器1对外部外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式,定时10ms后,又转为计数方式,如此循环不止。假定单片机晶振频率为6MHz,请编程实现。分析:确定工作方式及初值定时器1计数时的工作方式设置:TMOD=50H定时器1计数1000次的初值:TH1=0FCH,TL1=18H定时器1定时时的工作方式设置:TMOD=10H定时器1定时10ms的初值设置:TH1=0ECH,TL1=78HORG

0HMAIN:MOV

TMOD,

#50HMOV

TH1,

#0FCHMOV

TL1,

#18HMOV

IE,

#88HSETB

TR1JNB

TF1,$CLR

TF1MOV

TMOD,

#10HMOV

TH1,

#0ECHMOV

TL1,

#78HJNB

TF1,$CLR

TF1SJMP

MAINEND例:以定时器1对外部外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式,定时10ms后,又转为计数方式,如此循

环不止。假定单片机晶振

频率为6MHz,请编程实现。定时器1计数1000次的设置:TMOD=50H,TH1=0FCH、TL1=18H;定时器1定时10ms的设置:TMOD=10H,TH1=0ECH,TL1=78H。查询方式编程TM:MAIN:ORG

0HLJMP

MAIN

ORG

1BHMOV

A,

TMODJB

ACC.6,

TMMOV

TMOD,

#50HMOV

TH1,

#0FCHMOV

TL1,

#18HRETIMOV

TMOD,

#10HMOV

TH1,

#0ECHMOV

TL1,

#78HRETIMOV

TMOD,

#50HMOV

TH1,

#0FCHMOV

TL1,

#18HMOV

IE,

#88HSETB

TR1SJMP

$END例:以定时器1对外部外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式,定时10ms后,又转为计数方式,如此循

环不止。假定单片机晶振

频率为6MHz,请编程实现。定时器1计数1000次的设置:TMOD=50H,TH1=0FCH、TL1=18H;定时器1定时10ms的设置:TMOD=10H,TH1=0ECH,TL1=78H。中断方式编程【例】利用定时器T0确定P3.2引脚上出现的正脉冲的宽度,将检测到的机器周期的个数存入30H、31H中(假定计数值小于216)。P3.2INT0被测脉冲宽度分析:T0定时器工作于方式1,计数初值取0。当外部引脚P3.2/INT0变为高电平时,采用软件查询方式启动T0定时;当P3.2/INT0引脚变为低电平时,停止

T0定时。这时TH0和TL0中的值就是引脚为高电平期间所经过的机器周期数。参考程序:ORG

0000HMAIN:MOV

TMOD,

#01HMOVTL0,

#00HMOVTH0,

#00HCLRTR0WAIT1:JNB

P3.2,

WAIT1SETB

TR0WAIT2:JB

P3.2,

WAIT2CLR

TR0MOV30H,

TL0MOV31H,

TH0SJMP

$END被

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论