单片机原理及应用第四章 汇编程序设计(中断服务子程序)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;T0初值
MOV TH0, #06H
SETB TR0
;启动T0
SETB ET0
;T0开中断
SETB EA
;CPU开中断
RET ITOP: CPL P1.0
RETI END
;P1.0位取反
(2)方法2:查询方式
ORG 0000H
RESET: AJMP MAIN ;转主程序
ORG 0100H
MAIN: MOV TL0, #06H ;置初值
② 初始化SFR (IP)=0 (IE)=82H (TMOD)=02H (TCON)=10H
ORG 0000H
RESET:AJMP MAIN ;转主程序
ORG 000BH
AJMP ITOP
;转中断服务程序
ORG 0100H MAIN:ACALL PTOMO HERE:AJMP $ PTOMO:MOV TL0, #06H
ET0
INT1 外部中断 IE1
请求1
EX1
内部 TF1
定时器1
ET1
内部 T TI 串行口 R RI ES
IE寄存器
EA位 IP寄存器
高中断级 中断请求
中断源
标志位 中断入口
低中断级 中断请求
中断源
标志位 中断入口
注:各中断允许控制位=0,开关断开; =1,开关接通
中断系统硬件结构图
一、知识回顾
分析:
Th:半周期 T:周期
① 机器周期:T=2us; ② 指令“DJNZ Rn,rel”
的执行时间:2T=4us; ③ 执行250次刚好1ms。
(1)采用软件延时方法实现
ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV R7, #250 LOOP: DJNZ R7, LOOP CPL P1.0 AJMP MAIN END
MOV TH0, #06H
SETB TR0
;开始定时
LOOP: JBC TF0,PTF0 ;溢出否?
AJMP LOOP
PTF0: CPL AJMP END
P1.0 LOOP
;输出信号变反
四、练习
题1:运用软件延时和硬件定时(T0的模式1)两种 方法编写霓虹灯实验程序。
硬件连接:P1口接8各发光二极管; 亮灯方式:8个灯依次循环点亮。
(3)中断服务程序设计 注意:重赋初值和中断标志位清零。
2.定时器方式0的应用
例2:假设晶振频率6MHz,要在P1.0上输出一个周期为 2ms的方波信号。
(1)方法1:中断方式
① 确定时间常数
T=2us 根据公式:t=(213 - x)·T 有: x = 7692 = 1E0CH =1111000001100B
HERE:AJMP $
PTOMO:MOV TL0, #0CH ;T0初值
MOV TH0, #0F0H
SETB TR0
;启动T0
SETB ET0
;T0开中断
SETB EA
;CPU开中断
RET ITOP: MOV
MOV CPL RETI END
TL0, #0CH ;重装时常数
TH0, #0F0H
P1.0
一、知识回顾
中断响应的几个环节:
①中断源
②中断申请
③开放中断
④保护现场(先自动将PC值压栈,再保存相关寄存器值)
⑤中断服务
⑥恢复现场 (恢复相关寄存器值)
⑦中断返回(RETI,PC值出栈)
一、知识回顾
各单路开关 总开关
中断源标志 位查询机构
INT0 外部中断 IE0
请求0
EX0
内部 TF0
定时器0
;P1.0位取反
(2)方法2:查询方式
ORG 0000H
RESET: AJMP MAIN ;转主程序
ORG 0100H
MAIN: MOV TL0, #0CH ;置初值
MOV TH0, #0F0H
SETB TR0
;开始定时
LOOP: JBC TF0,PTF0 ;溢出否?
AJMP LOOP
PTF0: MOV TL0,#0CH ;重置初值
(2)采用硬件延时(定时器中断)方法实现
1.定时器应用程序的编写步骤
(1)确定时间常数
机器周期T
12 晶振频率
12 6 106
2106 (s)
根据公式:t =(2n - x)·T,计算X值。
(2)定时器和中断系统初始化(一般放在主程序中) ① 对TMOD、TCON、 IP、IE进行设置; ② 将时间常数送入定时/计数器中。
所以初值应为: TH0 = 0F0H,TL0 = 0CH。
② 初始化SFR (IP)=0 (IE)=82H (TMOD)=0 (TCON)=10H
ORG 0000H RESET:AJMP MAIN
;转主程序
ORG 000BH
AJMP ITOP
;转中断服务程序
ORG 0100H MAIN:ACALL PTOMO
ORG 1100H INT: MOV A,B
RL A MOV B,A MOV P1,A RETI END
;自B寄存器中取数 ;左环移一次 ;存回B,备下次取用 ;输出到P1口 ;中断返回
中断服 务程序
三、定时器中断应用举例
例2:假设晶振频率6MHz,要在P1.0上输出一个周期为 2ms的方波信号。
辅助优先级如下:
来自百度文库
中断源 外部中断0(INT0) 定时/计数器0(T0) 外部中断1(INT1) 定时/计数器1(T1) 串行口接收/发送 定时/计数器2(T2)
申请标志 IE0 TF0 IE1 TF1 RI/TI TF2
中断矢量 0003H 000BH 0013H 001BH 0023H 002BH
中断优先级 最高优先级
最低优先级
二、外部中断应用举例
例1:在INT1引脚接一个按钮开关到地,每按一下按钮 就申请一次中断,中断服务则是:依次点亮八盏灯中 的一盏。
P1.0 P1.7
INT1
300
ORG 0000H LJMP MAIN ORG 0013H ;中断矢量 LJMP INT ORG 1000H MAIN:SETB EA ;开总中断 SETB EX1 ;开外部中断1 SETB IT1 ;边沿触发 MOV B,#01H ;给 B 寄存器赋初值 HERE:SJMP HERE ;原地等待
MOV TH0,#0F0H
CPL P1.0
;输出信号变反
AJMP LOOP
END
3.定时器方式2的应用
例3:假设晶振频率6MHz,要在P1.0上输出一个周期为 1ms的方波信号。
(1)方法1:中断方式
① 确定时间常数
T=2us 根据公式:t=(28 - x)·T 有: x=6
所以初值应为: TH0 = 00H,TL0 = 06H。