单片机编程里的若干问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:03:02
下面是使8个LED循环亮,时间间隔为1s,晶震为6MHZ
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#7
MOV A,#01H ;让第一个发光二极管亮
LOOP: MOV P1,A ;从P1口输出到发光二极管
LCALL DELAY
RL A
SJMP LOOP
DELAY:MOV R0,#10 ;延时1s子程序
DELY0:MOV R7,#100 ;延时0.1s
DELY1:MOV R6,$ ;延时1ms
DJNZ R7,DELY1
DJNZ R0,DELY0
RET
END

1.MAIN: MOV SP,#7 建立堆栈 一般不是60H或70H吗?用其他的易引起冲突?
2.DELY1:MOV R6,$ 中“$”是什么?
3.RET 不就返回了吗?那么END又起什么作用?
4.最想知道的在子程序DELAY中是这样完成延时功能的?
晶震是6MHZ 250次 每次两个机器周期?

1.MAIN: MOV SP,#7 建立堆栈 一般不是60H或70H吗?用其他的易引起冲突?
可一这样用的,因为#8h~#20h这段地址,实际上就是指的第2.3.4页的R0~R7这些用的很少的寄存器地址.
2.DELY1:MOV R6,$ 中“$”是什么? $是原地等待.实际上在这程序里这条指令有误,不能编译的.
3. END 全程序结束一定要写一个.不执行没用的