单片微机原理及应用.docx

上传人:b****5 文档编号:6431093 上传时间:2023-01-06 格式:DOCX 页数:18 大小:66.03KB
下载 相关 举报
单片微机原理及应用.docx_第1页
第1页 / 共18页
单片微机原理及应用.docx_第2页
第2页 / 共18页
单片微机原理及应用.docx_第3页
第3页 / 共18页
单片微机原理及应用.docx_第4页
第4页 / 共18页
单片微机原理及应用.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片微机原理及应用.docx

《单片微机原理及应用.docx》由会员分享,可在线阅读,更多相关《单片微机原理及应用.docx(18页珍藏版)》请在冰豆网上搜索。

单片微机原理及应用.docx

单片微机原理及应用

单片微机原理及应用教案

东北电力大学电气工程学院

单片微机原理及应用课程组

第五章

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

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

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

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

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