• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

真诚请教一个单片机问题

ORG 0000H
LJMP START
ORG 30H
START: MOV A,#0FEH
LOOP:  MOV P1,A
        RL  A
        LCALL DELAY
        LJMP LOOP

DELAY:.............


        END

这个是它的程序
我不清楚为什么在前面 加了个ORG 30H
它执行完ORG 0000H
后直接 长跳到 START了
为什么还要写个 ORG 30H呢
全部回复(17)
正序查看
倒序查看
yg1977s
LV.3
2
2005-09-15 10:25
对于51来说,前面00-2Bh是中断向量地址,如果不用任何中断的话,不用ORG 0030H也是可以的
0
回复
少帅
LV.5
3
2005-09-15 13:33
@yg1977s
对于51来说,前面00-2Bh是中断向量地址,如果不用任何中断的话,不用ORG0030H也是可以的
谢谢

但是我觉得 这个句子
在整个程序不起作用
为什么人家要写上去呢
0
回复
ketjin
LV.3
4
2005-09-15 18:38
不用它
就不用
LJMP START 了
0
回复
deet1
LV.1
5
2005-09-16 16:28
用ORG 0030H 的原因是因为,000BH,
0003H,001BH,0013H,002BH,0023H为
中断向量地址的缘故.所以要把地址设
在0030H,也就是主START子程序就是从此
地址开始运行的!
0
回复
njyd
LV.8
6
2005-09-17 01:13
  ORG是伪程序,只在汇编时有用,汇编成的目标程序中就没有了.
  ORG xxH表示下面紧接的一句汇编后放在地址xxH.
  ORG 30H表示下面紧接的一句汇编后放在地址30H.为了空开前面的中断地址.
  最前面的ORG 00H可以不要,在没有这句的情况下,汇编自动把第一句目标程序放在00H.
  在你的程序中,第一句执行语句是LJMP START.
0
回复
少帅
LV.5
7
2005-09-20 10:40
@njyd
  ORG是伪程序,只在汇编时有用,汇编成的目标程序中就没有了.  ORGxxH表示下面紧接的一句汇编后放在地址xxH.  ORG30H表示下面紧接的一句汇编后放在地址30H.为了空开前面的中断地址.  最前面的ORG00H可以不要,在没有这句的情况下,汇编自动把第一句目标程序放在00H.  在你的程序中,第一句执行语句是LJMPSTART.
收益匪浅
谢谢各位了
0
回复
xtayxca
LV.3
8
2005-11-16 16:21
@deet1
用ORG0030H的原因是因为,000BH,0003H,001BH,0013H,002BH,0023H为中断向量地址的缘故.所以要把地址设在0030H,也就是主START子程序就是从此地址开始运行的!
頂一下﹐很有理
0
回复
vitality
LV.3
9
2005-11-19 09:38
ORG 0000H
START: MOV A,#0FEH
LOOP:  MOV P1,A
        RL  A
        LCALL DELAY
        LJMP LOOP

DELAY:……

end

这样就可以了,那些都可以去掉
0
回复
vitality
LV.3
10
2005-11-19 09:45
你发的程序这样做是为了避免start程序占用中断地址空间
0
回复
蓝眼狐
LV.1
11
2005-11-19 11:05
这是一条伪指令,它是用来定义程序的开始地址.
ORG XXXXXH  或者:ORG XXXXX
其中,XXXX表示从该地址开始存放程序.
0
回复
gnlee
LV.5
12
2005-11-22 14:58
@njyd
  ORG是伪程序,只在汇编时有用,汇编成的目标程序中就没有了.  ORGxxH表示下面紧接的一句汇编后放在地址xxH.  ORG30H表示下面紧接的一句汇编后放在地址30H.为了空开前面的中断地址.  最前面的ORG00H可以不要,在没有这句的情况下,汇编自动把第一句目标程序放在00H.  在你的程序中,第一句执行语句是LJMPSTART.
这句解释的透彻
0
回复
njyd
LV.8
13
2005-11-22 20:45
@vitality
ORG0000HSTART:MOVA,#0FEHLOOP:  MOVP1,A        RL  A        LCALLDELAY        LJMPLOOPDELAY:……end这样就可以了,那些都可以去掉
  如果不用任何中断可以.
0
回复
hoya
LV.1
14
2005-12-16 00:28
从学校课本上生搬硬套的吧
0
回复
lijian0801
LV.4
15
2005-12-17 00:46
大家说得都对,我还想补充一点:000BH,0003H,001BH,0013H,002BH,0023H为中断向量地址,有的时候为了防止干扰,或程序跑飞了,把没有用的地方用NOP指令填上.
0
回复
少帅
LV.5
16
2005-12-17 09:03
@lijian0801
大家说得都对,我还想补充一点:000BH,0003H,001BH,0013H,002BH,0023H为中断向量地址,有的时候为了防止干扰,或程序跑飞了,把没有用的地方用NOP指令填上.
原来 NOP 还有这样的作用
听君一席话 胜读10年书
0
回复
hongkeliu
LV.4
17
2005-12-20 11:59
@njyd
  ORG是伪程序,只在汇编时有用,汇编成的目标程序中就没有了.  ORGxxH表示下面紧接的一句汇编后放在地址xxH.  ORG30H表示下面紧接的一句汇编后放在地址30H.为了空开前面的中断地址.  最前面的ORG00H可以不要,在没有这句的情况下,汇编自动把第一句目标程序放在00H.  在你的程序中,第一句执行语句是LJMPSTART.
写的很细,顶
0
回复
hongkeliu
LV.4
18
2005-12-20 12:01
@vitality
ORG0000HSTART:MOVA,#0FEHLOOP:  MOVP1,A        RL  A        LCALLDELAY        LJMPLOOPDELAY:……end这样就可以了,那些都可以去掉
一般按惯例要避开中断地址,所以一般都从3000H开始存储程序,养成良好习惯
0
回复