设计一个基于单片机的声光报警电路。要求:利用按键触发外部中断0,蜂鸣器发音,发光二极管点亮,声光报警延迟1S后停止(利用定时器TO延时)。蜂鸣器由P1.2控制,发光二极管由P2.0控制。设计硬件电路并给出其完整的程序。
/*典型错误一*/
/* ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INTE0
ORG 000BH
AJMP INT120
ORG 0030H
MAIN: MOV R0,#00H
SETB IT0
SETB EX0
SETB EA
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
SETB ET0
HERE: AJMP HERE
INTE0: CLR P1.2
CLR P2.0
CLR EX0;可有可无
SETB TR0
RETI
ORG 0080H
INT120: MOV TH0,#4CH
MOV TL0,#00H
INC R0
HERE0: CJNE R0,#14H,HERE0;典型错误1
;此程序已经在定时器T0中断内部,利用
;此程序等待T0中断,中断无从进入。所以
;程序在此行成死循环,即停在此处。声光
;报警启动但停不下来。
SETB P1.2
SETB P2.0
CLR ET0
RETI
END
*/
/*典型错误二*/
/* ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INTE0
ORG 000BH
AJMP INT120
ORG 0030H
MAIN: MOV R0,#00H
SETB IT0
SETB EX0
SETB EA
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
SETB ET0
HERE: AJMP HERE
INTE0: CLR P1.2
CLR P2.0
CLR EX0;可有可无
SETB TR0
RETI
ORG 0080H
INT120: MOV TH0,#4CH
MOV TL0,#00H
INC R0
CJNE R0,#14H,HERE;典型错误2
;此程序已经在定时器T0中断内部,利用
;此程序等待T0中断,中断无从进入。所以
;程序在此行成死循环,即停在此处。声光
;报警启动但停不下来。和上例一样。
SETB P1.2
SETB P2.0
CLR ET0
RETI
END
*/
/*正确答案*/
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INTEX0
ORG 000BH
AJMP INTT0
ORG 0030H
MAIN: MOV R0,#00H
SETB EX0
SETB IT0
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
SETB EA
SETB ET0
HERE: CJNE R0,#14H,HERE
MOV R0,#00H
SETB P2.0
SETB P1.2
CLR TR0
AJMP HERE
INTEX0: SETB TR0
CLR P2.0
CLR P1.2
RETI
INTT0: MOV TH0,#4CH
MOV TL0,#00H
INC R0
RETI
END
关键字:汇编语言 中断嵌套
引用地址:
汇编语言实现中断嵌套的典型程序
推荐阅读最新更新时间:2024-03-16 15:10
用汇编语言写一个红外遥控接收板程序代码
用STC的MCU的IO方式控制74HC595驱动8位数码管。 红外接收程序。适用于市场上用量最大的NEC编码。查询方式, Timer0十六位自动重装, 100us 应用层查询 B_IR_Press标志为,则已接收到一个键码放在IR_code中, 数码管左起4位显示用户码, 最右边两位显示数据, 均为十六进制. Fosc_KHZ EQU 22118 ;22118KHZ, 用户只需要改动这个值以适应自己实际的频率 STACK_POIRTER EQU 0D0H ;堆栈开始地址 Timer0_Reload EQU (65536 - (Fosc_KHZ+5)/10) ; Timer 0 中断频率, 10000次/秒 DIS_DOT EQU
[单片机]
STM32之中断嵌套控制器
STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断
[单片机]
51单片机汇编语言实验(三)-----定时/计数器实验
一、实验目的: 学习定时/计数器的工作方式,掌握程序设计方法。 二、实验设备: PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容: 1. 定时器实验 2. 计数器实验 四、 定时器实验 1、实验原理: 使用T0进行定时,编写程序,使P1.0控制的发光二极管L0每隔2秒交替点亮或熄灭。 2、实验步骤: ① 将试验箱IO区的P1.0与LED区的L0按图下图连线; ② 编写程序,经编译、链接无语法错误后装载到实验系统; ③ 运行程序,观察发光二极管L0,应每隔2秒交替点亮或熄灭; ④ 实验完毕后,应使用暂停命令中止程序的运行。 3、参考代码: //实验
[单片机]
stm32 嵌套向量中断控制器NVIC
嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断。 嵌套向量中断控制器管理着包括内核异常等中断 NVIC 相关的函数包含在 misc.c 文件中 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) void NVIC_SystemLPConfig(uint8_t LowPower
[单片机]
STM8与汇编语言(7)--8位定时器应用之二
上次写的是用STM8单片机中的8位定时器作为软件延时,采用的是查询方式。在实际系统中,定时器的应用,更多的是采用中断方式,下面的代码就给出8位定时器在中断方式下的应用。 实验程序首先初始化驱动LED的端口,然后初始化8位的定时器4,最后启动中断允许,要记住,一定要将中断服务程序的入口地址填写到中断向量表中,并且要根据中断向量号在正确的位置上填写。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。 stm8/ #include mapping.inc
[单片机]
STM8S汇编入门(1-3)
不知是心血来潮,还是其它因素,突然又想起玩汇编语言了。这几年也没少跟单片机打交道,包括51系列,430系列,ARM系列,但都是用C语言来开发。不过由于使用C语言,实际上对这些CPU的了解还是不够深刻,当然除了51之外,因为那是我多年前曾经用汇编开发过的芯片。尽管当今C语言已经在嵌入式产品的开发过程中成为主流,但我个人依然认为,要想真正了解CPU的特点,还得用汇编语言。不知道这种观点是对还是错,也许是因为自己从硬件做起,写过机器码,用汇编语言做过优化,因此对汇编语音有一种特殊的偏爱。 系列的芯片用多了,感觉有时写起程序来不太方便,因此总想寻找一些其它的8位单片机玩玩,正好手头有一个ST的三合一开发板,那是09年参加ST研讨会上买
[单片机]
MCS-51汇编语言的程序格式
MCS-51汇编语言程序的一般格式 * 与8086不同,没有代码段、数据段等区分,统一编址。 * 程序由指令行或注释行组成,指令行每行只能写一条指令。 * 指令前可用“标号:”表示指令地址,以便在指令中引用;标号是符号名,以字母开头。 * 注释行应以“;”号开头;指令后也可用“;”号分隔,附加注释。 * 程序由伪指令ORG XXXXH 定位,ORG中的16位地址就是将来写入程序存储器的绝对地址。程序中的ORG应按地址从小到大排列。由ORG定位的程序段可以不连续,汇编程序将会在段间的空地址上填00H,即NOP。因此,每个ORG段的最后一条指令一般应是转移指令。 * 数据由伪指令DB(字节)或DW(双字节)说明。数值应以数码0-9开头
[单片机]
基于51汇编语言的外部中断
主程序显示八位流水灯; 外部中断0:左右四位闪烁三次; 外部中断1:各位间隔闪烁三次。 仿真电路如下: ;程序如下: ORG 0000H LJMP START ORG 0003H LJMP X0_INT ORG 0013H LJMP X1_INT ORG 0030H START: SETB IT0 SETB IT1 SETB EX0 SETB EX1 SETB EA MOV SP, #50H ;---------------------- MOV A, #0FEH LOOP: MOV P1, A CALL DELAY RL
[单片机]