微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 烦请给我讲解一下这段程序,不胜感激

烦请给我讲解一下这段程序,不胜感激

时间:10-02 整理:3721RD 点击:

ORG  0000H

SJMP  ST

ORG 0003H

SJMP WB

ST: CLR P1.0

CLR IT0

SETB EA

SETB EX0

SJMP $

WB:SETB P1.0

CALL DLY

CLR P1.0

CALL DLY

JNB P3.2, WB

RETI



ORG  0000H      ; 设置地址
SJMP  ST        ; 跳到 st
ORG 0003H       ; 设置地址
SJMP WB         ; 跳到 wb
ST: CLR P1.0    ; 主程序开始,设置 p1.0 低电平
CLR IT0         ; 设置外中断0以低电平触发
SETB EA         ; 开总中断
SETB EX0        ; 开外中断0
SJMP $          ; 死循环
WB:SETB P1.0    ; 外中断0的中断程序,设置 p1.0 高电平
CALL DLY        ; 调用延时程序
CLR P1.0        ; 设置 p1.0 低电平
CALL DLY        ; 调用延时程序
JNB P3.2, WB    ; 若 p3.2 低电平,则再次从 wb 开始执行
RETI            ; 中断返回

如果在 p1.0 接上一个 LED,在p3.2接一个按键,那么就是你按着按键的时候LED闪烁。
PS:我没学汇编,这都是猜的,有不对的请指出。

说的太好了,就是这样,我的疑惑时,0000H跳到主程序之后怎么跳回0003H这里?

0003H是中断入口吧,我记得 这样的

我建议小编 不要急功近利  先把书好好地看一遍 看看每个语句有什么含义  牢固掌握一些单片机的基础东西   当然只是建议 哈哈   

解释的对

0000H是复位入口地址,0003H是外部中断0的入口地址,基础很重要~

外部中断0 的地址是固定0003H吗? 可以自定义到其他地址码?

以我的理解,任何硬件中断的入口地址都不能通过软件修改,是固定的。

主程序到sjmp$就一直循环等待中断了,0003H是外部中断0入口地址,当发生外部中断时即从此处执行了。

这是硬件决定的,入口地址就是固定的。不过你看执行的第一条指令就是跳转到你定义的wb段落了,一般都这么用

触发中断的时候


晕,汇编不懂啊

我是来学习的

0000H~0002H:复位后初始化引导程序;
0003H~000AH:外部中断0入口地址;
000BH~0012H:定时器0中断入口地址;
0013H~001AH:外部中断1入口地址;
001BH~0022H:定时器1中断入口地址;
0023H~002AH:串行中断入口地址。
这几个是系统保留地址,不可更改。

学习 了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top