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

89c51单灯闪烁实验程序

ORG    0030H         ;程序由地址30开始
      JMP    DDW
DDW:  MOV    SP,60H        ;置位堆栈指针至RAM地址60H
LOOP:                      ;循环
      CPL    P1.7          ;位反向
      MOV    R5,#15        ;加载延时参数
      CALL   DELAY         ;调用延时子程序
      JMP    LOOP          ;再循环执行一次
DELAY:MOV    R6,50         ;延时子程序
S1:   MOV    R7,100
      DJNZ   R7,$
      DJNZ   R6,S1
      DJNZ   R5,DELAY
      RET
      END
用仿真软件仿真时,为什么R0寄存器地址变化,PC变化,SP不变,MOV    R6,50  MOV    R7,100 是否改为立即数#50,#100,若不改,原程序延时多长,请赐教为谢!
全部回复(5)
正序查看
倒序查看
izxm
LV.2
2
2004-12-07 18:57
MOV SP,#60H,必须用立即数,否则,SP里是60H地址里的内容,不确定.
50,100也要用立即数,否则不确定.
0
回复
daniellew
LV.6
3
2004-12-07 19:17
@izxm
MOVSP,#60H,必须用立即数,否则,SP里是60H地址里的内容,不确定.50,100也要用立即数,否则不确定.
先谢张工,但若程序为:ORG 0030H
                    MOV R2,#10H  用仿真软件仿真时,寄存器R0的数据变化不定,而寄存器R2的数据不变化仍为00H.
当ORG 0030H 改为ORG 0010H 或 ORG 0000H时,则R2的数据为10H,寄存器R0的数据为0H,为什么,我不明白.仿真软件为KEIL 51.
0
回复
izxm
LV.2
4
2004-12-08 13:03
@daniellew
先谢张工,但若程序为:ORG0030H                    MOVR2,#10H  用仿真软件仿真时,寄存器R0的数据变化不定,而寄存器R2的数据不变化仍为00H.当ORG0030H改为ORG0010H或ORG0000H时,则R2的数据为10H,寄存器R0的数据为0H,为什么,我不明白.仿真软件为KEIL51.
你的程序开头要有ORG 0000H JMP 0030H跳过中断入口区,
否则单片机上电还是从0000H开始,涉及到中断或这段地址中的乱码.另外我没看到你的程序里用到R0、R2.
0
回复
daniellew
LV.6
5
2004-12-08 15:00
@izxm
你的程序开头要有ORG0000HJMP0030H跳过中断入口区,否则单片机上电还是从0000H开始,涉及到中断或这段地址中的乱码.另外我没看到你的程序里用到R0、R2.
非常感谢,有问题再请教张工,若程序为:ORG 0030H
                    MOV R2,#10H  用仿真软件仿真时,寄存器R0的数据变化不定,而寄存器R2的数据不变化仍为00H.
当ORG 0030H 改为ORG 0010H 或 ORG 0000H时,则R2的数据为10H,寄存器R0的数据为0H,为什么,我不明白.仿真软件为KEIL 51.谢!
0
回复
daniellew
LV.6
6
2004-12-08 15:40
@daniellew
非常感谢,有问题再请教张工,若程序为:ORG0030H                    MOVR2,#10H  用仿真软件仿真时,寄存器R0的数据变化不定,而寄存器R2的数据不变化仍为00H.当ORG0030H改为ORG0010H或ORG0000H时,则R2的数据为10H,寄存器R0的数据为0H,为什么,我不明白.仿真软件为KEIL51.谢!
ORG 0030H
JMP DDW
DDW:MOV SP ,#60H
MOV R5 ,#10H
以上这段小程序,PC指针反复+1/-1,好象程序在反复循环,寄存器R5无数据,但寄存器R0不但变化.但若改为以下:
ORG 0000H
JMP DDW
DDW:MOV SP ,#60H
MOV R5 ,#10H
用仿真软件仿真时,寄存器R5数据为10H,一切正常.
请大家指教!为谢!
0
回复