单片机汇编语言的程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 15:42:34
ORG 0000H
ORG 0010H
TABLE DB 40H,79H,24H,30H,19H,12H,02H,88H,00H,10H
LJMP START
ORG 20H
START: MOV P0,#40H
MOV P2,#40H
MOV P1,#FFH
MOV DPTR,#TABLE
MOV R1,#200
MOV R0,#00H
MOV R4,#00H
MAIN: SETB P3.0
JNB P1.4,TIME
JNB P1.3,L1

倒计时且绿灯闪
TIME: MOV TMOD,#00000001B
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
SETB P0.7
LCALL DELAY
CLR P0.7
LCALL DELAY
JNB P1.4,Z0
LCALL DELAY1
MOV A,R3
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
MOVC A,@A+DPTR
MOV P2,A
DJNZ R1,TIME
CJNE R5,#00H,PP
CJNE R3,#00H,JJ
LJMP Z0
PP: CJNE R3,#00H,JJ
DEC R5
MOV R3,#0AH
JJ: DEC R3
JNB P1.4,Z0

在选择控制LED后,再按什么按钮
L1: JNB P3.0,L2
JNB P1.7,L3
JNB P1.3,Z0
L2: INC R0
CJNE R0,#0AH,JIN
INC R4
MOV R0,#00H
JI

看你这程序貌似51单片机的,不过没硬件接口,不好帮你。
把你程序前面的TABLE再放后一点。或干脆放在程序最后面。0003H,000BH,0013H,001BH,0023H在51系列的单片机中,是中断的入口地址。没事,别把程序放在这。不是个好习惯(个人觉得)

1.你开了T0,但没看到你要用来干什么。用中断要开中断,要查询要查询溢出标志位.前30H的地址最好不要用,用来做中断的跳转接入口.
2. 你程序先执行TIME,但R3,R5没有赋值,你不知道当前是什么值,你查表是就会跳出范围,得到一个错误的值.初始化时堆栈要设好
3. 每次用DPTR时要看清楚,它的值是不是你上次加完后的值,如不是,要重新赋值.
4.你Z0中是A,向R3赋值,所以R3中什么值对A无影响.如果你想R3向A赋值,那应该
MOV A,R3