单片机高手,请问我的程序有什么问题啊?高分求救(子程序已经写好)

2024-11-18 06:39:46
推荐回答(2个)
回答1:

……
JMP MAIN
END ------------------看这里!
ORG 0070H
……
------------------------
你程序的中间,有个END,后面的程序,就无效了。
另外,有些冒号,写成中文的了,这就找不到了。
======================
好了,下面的没有语法错误了:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:LCALL JISHU;T0计数
MOV R6,#26H
MOV R7,#0FDH;除数为9981,十六进制为26FD
MOV R2,#0H
MOV R3,#0H;被除数为R2R3R4R5
LCALL NDIV1;调用除法子程序,商存于R4R5中,余数R2R3中

MOV A,R5
CLR C
SUBB A,#1H
JNC UF;若商大于0,单位为uF

MOV A,R2
CLR C
SUBB A,#3H
JNC NEXT1;若余数大于1000,单位为uF

JMP NF

NEXT1:MOV A,R3
CLR C
SUBB A,#0E8H
JNC UF
LJMP NF
UF:CLR P0.0
CLR P0.6
MOV A,R5
ADD A,0
DA A
MOV P2,A
CLR P0.7
SETB P0.6
LCALL QUXS
MOV A,R5
ADD A,0
DA A
MOV P2,A
CLR P0.6
JMP MAIN

NF: CLR P0.1
CLR P0.6
MOV R4,#03H
MOV R5,#0E8H
LCALL NMUL1

MOV A,R4
MOV R2,A
MOV A,R5
MOV R3,A
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A

MOV R6,#26H
MOV R7,#0FDH
LCALL NDIV1
MOV A,R5
ADD A,0
DA A
MOV P2,A
CLR P0.7
SETB P0.6
LCALL QUXS
MOV A,R5
ADD A,0
DA A
MOV P2,A
CLR P0.6
JMP MAIN
;END
;ORG 0070H
JISHU: MOV TMOD ,#09H;计时子程序
MOV TL0,#00H
MOV TH0,#00H
JB P3.2,$
SETB TR0
JNB P3.2,$
CLR TR0
MOV A,TL0
MOV R4,A
MOV A,TH0
MOV R5,A
RET
;END
;ORG 0090H
NDIV1:;除法子程序
MOV B,#16
CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C;保存移出的最高位
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,NDVM1
JC NDVD1

NDVM1:MOV R2,A
MOV A,R1
MOV R3,A
INC R5

NDVD1:DJNZ B,NDIV1
CLR F0
RET
; END
;ORG 00B0H
NMUL1:;乘法子程序
MOV A,R3
MOV B,R7
MUL AB
XCH A,R7
MOV R5,B
MOV B,R2
MUL AB
ADD A,R5
MOV R4,A
CLR A
ADDC A,B
MOV A,R6
MOV B,R3
MUL AB
ADD A,R4
XCH A,R6
XCH A,B
ADDC A,R5
MOV R5,A
MOV F0,C
MOV A,R2
MUL AB
ADD A,R5
MOV R5,A
CLR A
MOV ACC.0,C
MOV C,F0
ADDC A,B
MOV R4,A
RET
;ORG 00D0H
QUXS:;取小数子程序
MOV R6,#03H
MOV R7,#0E8H
LCALL NMUL1

MOV A,R4
MOV R2,A
MOV A,R5
MOV R3,A
MOV A,R6
MOV R4,A
MOV A,R7
MOV R5,A
MOV R6,#26H
MOV R7,#0FDH
LCALL NDIV1
RET
END

回答2:

这句:MAIN:LCALL JISHI;T0计数

主程序里调用的是JISHI,

但这句:JISHU: MOV TMOD ,#09H;计时子程序

子程序里写的是JISHU。