下面是我的程序:请个老师指导一下,是不是程序问题!
EN EQU P2.0
RW EQU P2.1
RS EQU P2.2
ORG 0000H
jmp start
org 0003h
jmp exa
;org 0100h
start: MOV A,#38H
LCALL WR_INST
MOV A,#08H
LCALL WR_INST
MOV A,#01H
LCALL WR_INST
MOV A,#0FH
LCALL WR_INST
MOV A,#06H
LCALL WR_INST
MOV TL0,#00H
MOV TH0,#00H
MOV R0,#0BH
MOV R1,#0BH
MOV R3,#19H
MOV 30H,#44H
MOV 31H,#69H
MOV 32H,#73H
MOV 33H,#74H
MOV 34H,#61H
MOV 35H,#6EH
MOV 36H,#63H
MOV 37H,#65H
MOV 38H,#20H
MOV 39H,#20H
MOV 3EH,#6DH
MOV 3FH,#6DH
MOV 50H,#54H
MOV 51H,#69H
MOV 52H,#6DH
MOV 53H,#65H
MOV 54H,#20H
MOV 55H,#20H
MOV 56H,#20H
MOV 57H,#48H
MOV 58H,#3AH
MOV 59H,#20H
MOV 5AH,#20H
MOV 5BH,#4DH
MOV 5CH,#3AH
MOV 5DH,#20H
MOV 5EH,#20H
MOV 5FH,#53H
MOV 70H,#00h
MOV 71H,#00h
MOV 74H,#00h
MOV 73H,#00h
SS: MOV IE,#81H ;开总中断,允许INT0中断
MOV IP,#01H
MOV TCON,#01H
MOV TMOD,#01H ;定时器工作方式选择
MOV 16H,#32H
MOV 15H,#0C8H
;MOV 17H,#90H
MOV TL0,#00H
MOV TH0,#00H
here: ;输出40kHz方波
CPL p3.0
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R3,HERE
setb tr0
DJNZ 15H,HERE
DJNZ 16H,HERE
JMP SS
ZZ: ;读取计时时间
MOV R2,71H
MOV R3,70H
MOV R6,#11H ;22H为十进制17
MOV R7,#00H
ACALL MULD ;双字节十六进制乘法 乘以34
mov R6,#64H ;除以100
mov R7,#00H
ACALL DIVD ;双字节十六进制乘法
MOV 73H,R2
MOV 74H,R3
MOV R6,73H
MOV R7,74H
ACALL HB2 ;;BCD码转换
ACALL NUM2ASCII ;转换成ASCII
ACALL WR_STRING1;调显示
;ACALL WR_STRING
RET
;-----------------------------------------------
exa: push ACC
PUSH PSW
CLR TR0
clr EA
MOV 70H,TL0
MOV 71H,TH0
ACALL ZZ
SETB EA
POP PSW
POP ACC
RETI
WR_STRING1: ;第1行
MOV A,#80H
LCALL WR_INST
MOV R2,#16H
MOV R0,#30H
NEXT4: MOV A,@R0
ACALL WR_DATA1
INC R0
DJNZ R2,NEXT4
;第2行
MOV A,#0C0H
ACALL WR_INST
MOV R2,#16H
MOV R0,#50H
NEXT0: MOV A,@R0
ACALL WR_DATA1
INC R0
DJNZ R2,NEXT0
RET
NUM2ASCII: ;; 转换
MOV A,R5 ;低位转换,结果在3DH,3CH
ACALL K
MOV 3DH,A
INC R0
XCHD A,@R0
MOV 3CH,A
MOV A,R4 ;高位转换,结果在3BH,3AH
ACALL K
MOV 3BH,A
INC R0
XCHD A,@R0
MOV 3AH,A
k: MOV R0,#25H
MOV @R0,A
SWAP A
INC R0
MOV @R0,A
MOV A,#30H
MOV R0,#25H
XCHD A,@R0
RET
;-----------------------------------------------
WR_INST: ;液晶屏写指令
ACALL C_BF
CLR RS
CLR RW
SETB EN
MOV P1,A
CLR EN
RET
;-----------------------------------------------
C_BF: PUSH ACC ;液晶屏查忙
BUSY: CLR RS
SETB RW
SETB EN
MOV A,P1
CLR EN
JB ACC.7,BUSY
ACALL DELAY
POP ACC
RET
;---------------------------------------------------
WR_DATA1: ;液晶屏写数据
ACALL C_BF
SETB RS
CLR RW
SETB EN
MOV p1,A
CLR EN
RET
;---------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 双字节十六进制乘法 结果在R2R3中
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MULD:
MOV A,R3 ; 计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 双字节十六进制除法 结果在R3R4R5中
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DIVD:
CLR C
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV
RET
DVD1: MOV B,#10H
DVD2: 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
ANL C,/F0
JC DVD3
MOV R2,A
MOV A,R1
MOV R3,A
INC R5
DVD3: DJNZ B,DVD2
MOV A,R4
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 双字节十六进制BCD转换 ;; 高位在R4,低位在R5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HB2: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3 ;双字节十六进制数的万位数不超过6,不用调整
MOV R3,A
DJNZ R2,HB3
RET
;---------------------------------------------------
DELAY: MOV R6,#23 ;延时
D1: MOV R7,#200
DJNZ R7,$
DJNZ R6,D1
RET
DELAY1:MOV R5,#2
D0: MOV R6,#255
D2: MOV R7,#200
D3: NOP
NOP
DJNZ R7,D3
DJNZ R6,D2
DJNZ R5,D0
RET
DELAY2: MOV R6,#200
QQ: MOV R5,#20
QQ1: NOP ;延时
DJNZ R5,QQ1
RET
;---------------------------------------------------
END
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |