单片微机原理及应用.docx
- 文档编号:6431093
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:66.03KB
单片微机原理及应用.docx
《单片微机原理及应用.docx》由会员分享,可在线阅读,更多相关《单片微机原理及应用.docx(18页珍藏版)》请在冰豆网上搜索。
单片微机原理及应用
单片微机原理及应用教案
东北电力大学电气工程学院
单片微机原理及应用课程组
第五章
80C51单片机中断系统
〖课前复习:
〗
1、查表指令的功能
2、查表程序设计的步骤
〖新课内容:
〗
一、中断(Interrupt)概述
1.中断的概念
所谓中断是指CPU正在处理某件事时,外部发生了某一事件(如定时器溢出),请求(Requle)CPU迅速处理(Process),CPU暂时中断当前的工作,转入处理所发生的事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
实现这种功能的部件称为中断系统,产生中断的请求源称为中断源。
2.中断的调用过程
二、与中断系统有关的SFR
a)定时/计数器控制寄存器TCON(88H)
IE1
IT1
IE0
IT0
8BH
8AH
89H
88H
TCON(TimeControl)的字节地址为88H,表明该寄存器的每一位可位寻址。
其中:
IT0:
外部中断0的触发方式选择位,当IT0=0时为电平触发(LeverTriggering),IT0=1时为边沿触发(EdgeTriggering)。
IE0:
为外部中断0的标志位。
IT1:
同IT0类似。
IE1:
同IE0类似。
CPU是怎么知道中断请求的尼?
CPU会在每个机器周期的S5P2采样外部中断引脚,根据以下两种情况置中断标志:
i.当IT0=0时,CPU查到外引脚为低电平,置“1”中断标志,外引脚为高电平时清“0”中断标志。
ii.当IT0=1时,CPU是根据前后两次检查外引脚的情况判断是否有中断请求,当前一次为高,后一次为低,置“1”中断标志。
其他情况不置中断标志。
CPU响应(Respond)中断,转向执行中断服务程序时会自动由硬件清“0”中断标志。
b)中断允许控制寄存器IE(A8H)
IE的地址末位为8,说明它也可位寻址。
EA
ES
ET1
EX1
ET0
EX0
AFH
ACH
ABH
AAH
A9H
A8H
EA:
所有中断总的控制位。
(E:
EnableA:
All)
ES:
串行口中断允许位。
(E:
EnableS:
Series)
ET1:
定时/计数器1中断允许位。
EX1:
外部中断1中断允许位。
ET0:
定时/计数器0中断允许位。
EX0:
外部中断0中断允许位。
c)中断优先级控制寄存器IP(I:
Interrupt,P:
Priority)(B8H)
也可位寻址。
PS
PT1
PX1
PT0
PX0
BCH
BBH
BAH
B9H
B8H
通过对相应位设置可以改变该中断的优先级。
MCS-51中断系统只有两级优先级,在同优先级内中断的优先顺序为:
外部中断0、T0、外部中断1、T1、串行口。
低级中断可以被高级中断所打断。
MCS-51中断嵌套如下图所示:
三、中断的处理过程
中断的处理过程包括:
中断请求、中断响应、中断服务和中断返回。
1.中断请求
当某个中断源要求CPU服务时,必须发出中断请求信号。
内部中断源和外部中断源请求的方式不同。
(1)若是外部中断源,需要将请求信号加到该中断的外部引脚上,CPU会在执行指令的每个机器周期内检查外部中断引脚,有请求信号时置“1”该中断标志位。
分为两种情况。
具体上面已详细讲过。
(2)若是内部中断源,CPU内部的硬件电路会自动置位该中断标志位,具体内容我们学习定时器和串行口时再讲。
2.中断响应
有了中断请求,CPU也不一定会响应该中断,要响应中断还必须满足一定的条件。
中断响应的条件如下:
(1)该中断已“开中断”。
(2)此时CPU没有响应同级或更高级中断。
(3)当前正处在所执行指令的最后一个机器周期。
(4)正在执行的指令不是RETI或是访问IE、IP的指令。
满足上述条件CPU就会响应该中断,响应中断,在执行中断服务程序前还要执行以下几项操作:
(1)保护断点(Breakpoint)地址,将断点地址压入堆栈。
(2)撤消(Cancel)该中断源的中断请求标志(串行口除外)。
(3)关闭(Close)同级中断。
(4)将该中断源的入口地址送入PC。
执行以上几项操作后就进入执行中断服务程序。
3.中断服务
(1)保护现场(把断点地址信息压入堆栈保护)
(2)中断服务程序主体
(3)恢复现场
4.中断返回
中断服务内容完成,现场恢复,就可以回到原来被打断的地方继续运行。
这个过程通过执行RETI指令自动完成,主要做下面两项工作。
(1)恢复断点地址。
将响应中断时压入堆栈的断点地址弹出,送入PC。
(2)开放同级中断
定时/计数器概述
〖课前复习:
〗
1、键盘的作用、分类、扫描方式
2、外部中断源
〖新课内容:
〗
一、定时/计数器概述
1.80C51有两个16位的定时/计数器,T0和T1。
2.本质上讲都是计数器。
对外部事件脉冲计数就作为计数器使用
对内部的机器周期计数就作为定时器使用。
(对外部脉冲计数时,信号脉冲应加到相应的外引脚上T0(P3.4),T1(P3.5))
3.他们都是加法计数器,计满后就会溢出(Overflow),溢出时产生中断标志。
二、与定时/计数器有关的SFR
1.定时/计数器工作方式控制寄存器TMOD(T:
Timer,M:
Mode)(89H)
GATE
C/T
M1
M0
GATE
C/T
M1
M0
高4位控制T1低4位控制T0
TMOD不可位寻址,高4位和低4位分别控制T1和T0。
(1)M1M0——工作方式选择位。
M1M0方式功能
00方式013位的计数器
01方式116位的计数器
10方式28位的计数器,初值自动重装
11方式3两个8位的计数器,仅适用T0
(2)C/T——计数/定时方式选择位。
C/T=1,为计数工作方式,对外部事件脉冲计数,作为计数器用(负跳变有效)。
C/T=0,为定时工作方式,对内部机器脉冲计数,作定时器用。
(3)GATE——门控位。
一般取GATE=0,在后面的定时器工作方式结构中分析原因。
2.TCON:
定时/计数器控制寄存器(88H)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
TCON可位寻址。
低4位我们在中断部分已讲过,不再重复。
高4位的功能与定时器有关,含义如下:
TF0:
定时/计数器T0溢出标志。
(T:
Timer,F:
Flag)
TR0:
定时/计数器T0运行控制位。
(T:
Timer,R:
Run)
TR0=1,T0运行
TR0=0,T0停
TF1:
功能与TF0相同。
TR1:
功能与TR0相同。
3.计数寄存器
TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位数存放在TH中,低8位数存放在TL中。
三、定时/计数器的工作方式
1.方式0(自学)
2.方式1
当M1M0=01时,定时/计数器工作在方式1,逻辑结构如上图所示。
内部为16位计数器,有TL0作低8位和TH0作8位,16位计满溢出,溢出置位TF0。
最大计数值为216=65536。
原理分析总结:
GATE=0,TR0=1,控制开关闭合,开始计数。
GATE=1,同时TR=1
INT0=1时,才开始运行。
总上分析,得出取GATE=0
3.方式2
当M1M0=10时,定时/计数器工作在方式2,逻辑结构如上图所示。
定时/计数器工作为8位,能自动恢复定时/计数器初值。
即用TL0计数,计满溢出时自动将TH0中的值送入TL0,自动恢复初值。
计数的最大值为256。
初值的计算方法
例用定时器T0产生1ms的定时,系统的fosc=12MHZ
分析:
机器周期=1us
要产生1ms的定时,要数1ms/1us=1000个机器周期的脉冲,那么数机器周期
的方法有两种方法
10001000
065536
初值
(1)从0开始计数,计到1000即可,但是总要去看什么时候到1000?
(2)从某个平台(初值)开始计数,计满刚好溢出,产生中断标志,请求中断
具体计算:
65536-1ms/1us=65536-1000=64536
转换后存到计数寄存器中即可。
四、定时/计数器的应用步骤
1、初始化
选择工作模式MOVTMOD,……..
计数器付初值MOVTH0,……..
MOVTL0,………..
启动计数器SETBTR0
开中断SETBET0
SETBEA
2、提供中断入口地址
3、编写中断服务程序。
(1)保护现场、恢复现场
(2)重新赋初值(方式2除外)
例:
设计一程序,在P1.0引脚上输出周期为2ms方波。
fOSC=6MHz.
分析:
要在P1.0引脚上输出方波,只要在P1.0引脚上交替输出高电平和低电平即可,用定时/计数器产生1ms定时,定时到改变输出信号。
计算1ms定时的计数初值,1ms需要数500机器周期。
初值=65536-500=65036
65036/256得整数部分为254,余数为12。
程序如下:
ORG0000H
LJMPSETUP
ORG000BH
②LJMPINET0P
ORG0030H
SETUP:
MOVTMOD,#01
MOVTH0,#254
①MOVTL0,#12
SETBTR0
SETBET0
SETBEA
MAIN:
SJMP$
INET0P:
CLRTR0
MOVTH0,#254
MOVTL0,#12
③SETBTR0
CPLP1.0
RETI
END
从方式0和方式1的应用看,方式1比方式0有优点,计数范围大,初值计算不须换算,使用方便,建议采用。
例:
设计一程序,在P1.0引脚上输出400us方波。
fOSC=6MHz.用方式2实现
分析:
由于400us需要计数200个机器脉冲数,而8位计数器就能计数256,因此用方式2可以实现。
初值=256-200=56
程序如下:
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG0030H
SETUP:
MOVTMOD,#02
MOVTH0,#56
MOVTL0,#56
SETBTR0
SETBET0
SETBEA
MAIN:
SJMPMAIN
INET0P:
CPLP1.0
RETI
END
4.方式3(略)定时/计数器的应用
定时/计数器工作方式总结:
1.根据实际需要选择合适的定时器及其工作方式。
2.根据工作方式计算计数器的初值。
3.编制程序注意以下几点。
以T0为例
(1)对其初始化
选择工作模式MOVTMOD,……..
计数器付初值MOVTH0,……..
MOVTL0,………..
启动计数器SETBTR0
开中断SETBET0
SETBEA
(2)提供中断入口地址
(3)编写中断服务程序。
在中断服务程序里如需保护现场应保护,将有关的量压入堆栈,在中断返回之前还需恢复现场。
如果不是方式2工作状态,还需重新赋初值。
小结:
重点掌握定时/计数器的应用步骤
定时/计数器的应用
〖课前复习:
〗
1、定时/计数器的基础知识
2、定时/计数器应用的步骤
〖新课内容:
〗
一、产生方波
二、产生任意矩形波
例:
设计一程序,在P1.0引脚上输出如下方波。
fOSC=6MHz.
P1.0
3ms7ms
方法一:
采用两个定时器实现T0、T1
T0定时3msT1定时7ms
分析:
T0先启动定时3ms,3ms计满产生中断,在T0的中断程序中启动T1,同时关闭T0,同时把P1.0引脚取反,接着T1定时7ms,计满产生T1中断,在T1的中断程序中启动T0,同时关闭T1,同时把P1.0引脚取反,这样即产生了一个周期的波形。
方法二:
采用两个定时器实现T0、T1
T0定时3msT1定时10ms
分析:
T0、T1同时启动分别定时3ms和10ms,T0定时的3ms先计满,然后产生中断,在T0的中断程序中关闭T0,同时把P1.0引脚取反,而T1继续定时,直到定时10ms,计满产生T1中断,在T1的中断程序中启动T0,同时把P1.0引脚取反,这样即产生了一个周期的波形。
方法三:
采用一个定时器实现T0或T1
分析:
产生波形的高电平都是3ms,低电平都是7ms,所以用一个位信息来控制高、低电平这两种状态,用一个定时器就可以实现
方法一程序如下:
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG001BH
LJMPINET1P
ORG0030H
SETUP:
MOVTMOD,#11
MOVTH0,#
MOVTL0,#;3ms的初值
MOVTH1,#
MOVTL0,#;7ms的初值
SETBTR0
SETBET0
SETBET1
SETBEA
SETBP1.0
MAIN:
SJMP$
INET0P:
CPLP1.0
SETBTR1
CLRTR0
MOVTH0,#;3ms的初值
MOVTL0,#
RETI
INET1P:
CPLP1.0
SETBTR0
CLRTR1
MOVTH1,#
MOVTL1,#;7ms的初值
RETI
END
方法二程序如下:
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG001BH
LJMPINET1P
ORG0030H
SETUP:
MOVTMOD,#11
MOVTH0,#
MOVTL0,#;3ms的初值
MOVTH1,#
MOVTL0,#;10ms的初值
SETBTR0
SETBTR1
SETBET0
SETBET1
SETBEA
SETBP1.0
MAIN:
SJMP$
INET0P:
CPLP1.0
CLRTR0
MOVTH0,#;3ms的初值
MOVTL0,#
RETI
INET1P:
CPLP1.0
SETBTR0
MOVTH1,#
MOVTL1,#;10ms的初值
RETI
END
方法三程序如下:
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG0030H
SETUP:
MOVTMOD,#01
MOVTH0,#
MOVTL0,#
SETBTR0
SETBET0
SETBEA
SETBP1.0
SETB50H
MAIN:
SJMPMAIN
INET0P:
CPLP1.0
CPL50H
JB50H,J3ms
MOVTH0,#
MOVTL0,#;7ms的初值
RETI
J3ms:
MOVTH0,#
MOVTL0,#;3ms的初值
RETI
END
三、用定时器T0设计一个时钟
思路:
本次实验是在动态扫描电路基础上完成的,用数码管显示时钟,低两位显示秒,高两位显示分。
时钟计数的信号就是1秒信号,那么主要是如何产生1s的信号呢?
先用定时器T0定时0.1s,然后数10次即为1s
73H72H71H70H
分秒
程序如下:
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG0030H
SETUP:
MOV70H,#0
MOV71H,#0
MOV72H,#0
MOV73H,#0
MOVTMOD,#01H
MOVTH0,#60
MOVTL0,#176
SETBTR0
SETBET0
SETBEA
MAIN:
LCALLDIS
LJMPMAIN
DIS:
………….
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY:
MOVR2,#80H
DEL:
DJNZR2,DEL
RET
INET0P:
MOVTH0,#60
MOVTL0,#176
INCR5
CJNER5,#10,N1S
MOVR5,#0
INC70H
MOVR4,70H
CJNER4,#10,N1S
MOV70H,#0
INC71H
MOVR4,70H
CJNER4,#6,N1S
MOV71H,#0
INC72H
MOVR4,72H
CJNER4,#10,N1S
MOV72H,#0
INC73H
MOVR4,73H
CJNER4,#6,N1S
MOV73H,#0
N1S:
RETI
END
四、测量脉冲信号的频率
1s
思路:
采用T1计数,T0定时主要产生1s定时信号,然后测有多少个1s即可测出频率。
产生1s的信号(0.1s数脉冲的个数)ⅹ10=1s测得的频率
ORG0000H
LJMPSETUP
ORG000BH
LJMPINET0P
ORG001BH
LJMPINET1P
ORG0030H
SETUP:
MOVTMOD,#11
MOVTH0,#60
MOVTL0,#176;0.1ms的初值
MOVTH1,#0
MOVTL1,#0;计数的初值
SETBTR0
SETBTR1
SETBET0
SETBEA
MAIN:
SJMP$
INET0P:
CLRTR1;T1停止计数
CLRTR0;T0停止定时
MOVR2,TH1
MOVR3,TL1;把数的脉冲频率数取出
MOVTH1,#0
MOVTL1,#0
MOVTH0,#60;重新赋初值,为下一次测量做准备
MOVTL0,#176
SETBTR0
SETBTR1
RETI
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片 微机 原理 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)