【原创】基于AT89C2051小型便携功率计设计(液晶1602显示功率)
这个是程序,没进行优化,我一般写完程序了,对程序优化一遍,以便在能生成最小的HEX文件,也能加强可读性。
RS EQU P3.0
RW EQU P3.1
E EQU P3.7
ORG 00H
LJMP MAIN
ORG 0BH
LJMP INTL0
ORG 1BH
LJMP INTL1
MAIN:
MOV P1,#0
MOV P3,#0
MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
MOV 40H,#111
CLR TR0
CLR TR1
CLR ET0
CLR ET1
MOV TMOD,#51H
MOV TL0,#3CH
MOV TH0,#0B0H
MOV TL1,#0FFH
MOV TH1,#0FFH
LCALL SZ1
MOV DPTR,#TAB1
LCALL DELY
SETB TR0
SETB TR1
SETB ET0
SETB ET1
SETB EA
LCALL XR
SZ1: LCALL BUSY
LCALL DELY
MOV 50H,#38H
LCALL WERZ
LCALL DELY
MOV 50H,#38H
LCALL WERZ
LCALL DELY
MOV 50H,#38H
LCALL WERZ
LCALL BUSY
MOV 50H,#38H
LCALL WERZ
LCALL BUSY
MOV 50H,#0CH
LCALL WERZ
LCALL BUSY
MOV 50H,#02H
LCALL WERZ
LCALL BUSY
MOV 50H,#06H
LCALL WERZ
LCALL BUSY
MOV 50H,#01H
LCALL WERZ
RETXR:
LCALL BUSY
MOV 50H,#80H
LCALL WERZ
LCALL BUSY
MOV A,R0
MOVC A, @A+DPTR
MOV 51H,A
LCALL WERD
LCALL BUSY
MOV 50H,#81H
LCALL WERZ
LCALL BUSY
MOV A,R1
MOVC A, @A+DPTR
MOV 51H,A
LCALL WERD
LCALL BUSY
MOV 50H,#82H
LCALL WERZ
LCALL BUSY
MOV A,R2
MOVC A, @A+DPTR
MOV 51H,A
LCALL WERD
LCALL BUSY
MOV 50H,#83H
LCALL WERZ
LCALL BUSY
MOV A,R3
MOVC A, @A+DPTR
MOV 51H,A
LCALL WERD
LCALL BUSY
MOV 50H,#84H
LCALL WERZ
LCALL BUSY
MOV 51H,#57H
LCALL WERD
LJMP XR
WERZ:
CLR RS
CLR RW
MOV P1,50H
SETB E
LCALL DELY_2MS
CLR E
LCALL DELY_2MS
RET
WERD:
SETB RS
CLR RW
MOV P1,51H
SETB E
LCALL DELY_2MS
CLR E
LCALL DELY_2MS
RET
BUSY:
CLR RS
SETB RW
SETB E
LCALL DELY_2MS
MOV A,P1
JB ACC.7,BUSY
CLR E
LCALL DELY_2MS
RET
DELY_2MS:
MOV 30H,#4
MS1: MOV 31H,#250
MS2: DJNZ 31H,MS2
DJNZ 30H,MS1
RET
DELY_US:
MOV 30H,#30
US:DJNZ 30H,US
RET
DELY:
MOV 30H,#5
Y1: MOV 31H,#200
Y2:MOV 32H,#200
Y3:DJNZ 32H,Y3
DJNZ 31H,Y2
DJNZ 30H,Y1
RET
TAB1: DB "0123456789"
INTL0:
CLR TR1
MOV TL0,#3CH
MOV TH0,#0B0H
DJNZ 40H,SL
MOV R0,#6
MOV A,42H
MOV B,#10
DIV AB
MOV R0,A
MOV R1,B
MOV A,41H
MOV B,#10
DIV AB
MOV R2,A
MOV R3,B
MOV 40H,#111
MOV 41H,#0
MOV 42H,#0
SL:
SETB TR1
RETI
INTL1:
MOV TL1,#0FFH
MOV TH1,#0FFH
INC 41H
MOV A,#100
CJNE A,41H,AL
MOV 41H,#0
INC 42H
AL: RETI
END
这程序没写注释,看起来好累。