烦请给我讲解一下这段程序,不胜感激
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:串行中断入口地址。
这几个是系统保留地址,不可更改。
学习 了