为什么在用单片机汇编编程时,开头都要写上 ORG 0000H AJMP MAIN ORG 0030H这些呢?请各位大侠多多指点!

为什么在用单片机汇编编程时,开头都要写上 ORG 0000H AJMP MAIN ORG 0030H这些呢?请各位大侠多多指点!,第1张

原因:单片机中,0000H单元为系统启动地址,ORG 0000H AJMP MAIN 就是在该地址存放一条绝对跳转指令,转入主程序的入口地址。ORG 0030H 是为了把用户程序定位到用户RAM区(30H-7FH),0000H-0030H存储单元地址是有其他特殊功能的。

在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。如果不用ORG规定则汇编得到的目标程序将从0000H开始。程序从ROM的0000开始存放程序,但是AJMP  MAIN是一条无条件跳转指令,也就是说,单片机上电之后首先从0000处开始执行程序。

但是,AJMP直接将程序跳转到MAIN标号指向的存储区域开始取指令,并执行,而一般MAIN标号是放在语句ORG 0030之后的,也即,主程序是从0030这个地址开始存放的。

扩展资料:

单片机数据存储器的特殊区段:

1、工作寄存器区(00H-1FH)

在00H-1FH共32个单元,被均匀地分为四组工作寄存器堆:RB0、RB1、RB2、RB3,每组寄存器堆包含8个工作寄存器,均以R0-R7来命名,这些寄存器被称为通用寄存器。工作寄存器用于临时存放8位信息。在使用时,由程序状态字寄存器中的RS0、RS1来选择工作寄存器堆。

2、位寻址区(20H-2FH)

片内数据存储器的20H-2FH存储区为位寻址区,既可作为一般单元按字节寻址,也可按位进行寻址。位寻址区有16个字节,位地址为00H-7FH。

参考资料来源:百度百科-单片机存储器

参考资料来源:百度百科-org

ORG 是汇编的伪指令 告诉编译器我的代码放在什么位置

在单片机复位的时候 在你没有做任何改变的时候 程序指针会是指向00000H的地址

所以我们吧 START 卸载地址00H 让单片机复位后直接跳转到 START的程序段去执行

ORG 30H 是你程序的代码开始地址,由于30H以前有中断向量入口和寄存器的地址,所以一般用户程序都是从30H开始的。

程序的基本框架如下

ORG 0000H

LJMP START 需要跳过中断服务程序入口地址,

ORG 0100H

START:

MOV SP,#50H 设堆栈区起始地址,一般不可少

...........

SETB P0.0

SETB P0.3

...........

LOOP:

SETB P1.5 设定P1.5为输入状态

JB P1.5, NEXT 假设P1.5为高是未达到既定值

CLR P0.0 达到既定值

NEXT:

LCALL DELAY30MS

SETB P1.7 设定P1.7为输入状态

JB P1.7, LOOP 假设P1.7为高是未达到要求

CLR P0.0

CLR P0.3

SETB P0.2

LJMP LOOP

DELAY30MS:

(此处编写一段延时30ms的程序,很简单的,循环一定次数即可)

RET


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12064117.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存