|
发表于 2009-12-18 16:08:07
|
显示全部楼层
以前同事给的。汇编代码
;*********************************************
;原有电压表应用在胡工手工焊板上
;************************************
RS EQU P2.5
RW EQU P2.6
E EQU P2.7
DAT EQU P0
ORG 0000H
JMP START
ORG 30H
START: NOP
MOV P0,#00001111B
MOV TMOD,#00000001B
LOOP:
LCALL ADC
MOV R6,TH0
MOV R7,TL0
;把数据减去20002
CLR C
MOV A,R7
SUBB A,#22H
MOV R7,A
MOV A,R6
SUBB A,#4EH
MOV R6,A
;把结果右移一位
CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
LOOP_1:LCALL HB2 ;二进制数转化为BCD码
MOV A,R3
ANL A,#00001111B
MOV 40H,A
MOV A,R4
ANL A,#11110000B
SWAP A
MOV 41H,A
MOV A,R4
ANL A,#00001111B
MOV 42H,A
MOV A,R5
ANL A,#11110000B
SWAP A
MOV 43H,A
MOV A,R5
ANL A,#00001111B ;44H这位数丢失
MOV 44H,A
LOOP_2:LCALL DISP
JMP LOOP
ADC: JNB P3.2,ADC
MOV TL0,#0
MOV TH0,#0
SETB TR0
WH: JB P3.2,WH
CLR TR0
RET
;双字节二进制数转化为双字节BCD码整数
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
MOV R3,A ; ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ; ;处理完16bit
RET
;显示实际电压
DISP: NOP
MOV DAT,#01H ;清屏
CALL ENABLE
MOV DAT,#38H ;显示功能
CALL ENABLE
MOV DAT,#0FH ;显示开关控制
CALL ENABLE
MOV DAT,#06H ;+1
CALL ENABLE
MOV DAT,#81H;第一行的位置
CALL ENABLE
MOV R1,#17
CALL WRITE1
MOV DAT,#83H
CALL ENABLE
MOV R1,33H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,32H
CALL WRITE1
MOV R1,31H
CALL WRITE1
MOV R1,30H
CALL WRITE1
MOV DAT,#89H
CALL ENABLE
MOV R1,#20
CALL WRITE1
MOV R1,37H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,36H
CALL WRITE1
MOV R1,35H
CALL WRITE1
MOV R1,34H
CALL WRITE1
MOV DAT,#0C6H
CALL ENABLE
MOV R1,40H
CALL WRITE1
MOV R1,#10
CALL WRITE1
MOV R1,41H
CALL WRITE1
MOV R1,42H
CALL WRITE1
MOV R1,43H
CALL WRITE1
MOV R1,44H
CALL WRITE1
MOV R1,#22
CALL WRITE1
MOV R1,#33
CALL WRITE1
MOV DAT,#8FH
CALL ENABLE
MOV R1,#22
CALL WRITE1
RET
;显示最大参数子程序
DISP_0: NOP
MOV DAT,#01H ;清屏
CALL ENABLE
MOV DAT,#38H ;显示功能
CALL ENABLE
MOV DAT,#0FH ;显示开关控制
CALL ENABLE
MOV DAT,#06H ;+1
CALL ENABLE
MOV DAT,#83H;第一行的位置
CALL ENABLE
MOV R1,#17
CALL WRITE1
MOV DAT,#86H
CALL ENABLE
MOV R1,33H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,32H
CALL WRITE1
MOV R1,31H
CALL WRITE1
MOV R1,30H
CALL WRITE1
MOV DAT,#0C3H
CALL ENABLE
MOV R1,#20
CALL WRITE1
MOV DAT,#0C6H
CALL ENABLE
MOV R1,37H
CALL WRITE1;到TABLE1取码
MOV R1,#10
CALL WRITE1
MOV R1,36H
CALL WRITE1
MOV R1,35H
CALL WRITE1
MOV R1,34H
CALL WRITE1
CJNE R0,#33H,DISP_01
MOV DAT,#86H
CALL ENABLE
JMP DISP_03
DISP_01:CJNE R0,#32H,DISP_02
MOV DAT,#88H
CALL ENABLE
JMP DISP_03
DISP_02:CJNE R0,#31H,DISP_04
MOV DAT,#89H
CALL ENABLE
JMP DISP_03
DISP_04:CJNE R0,#30H,DISP_05
MOV DAT,#8AH
CALL ENABLE
JMP DISP_03
DISP_05:CJNE R0,#37H,DISP_06
MOV DAT,#0C6H
CALL ENABLE
JMP DISP_03
DISP_06:CJNE R0,#36H,DISP_07
MOV DAT,#0C8H
CALL ENABLE
JMP DISP_03
DISP_07:CJNE R0,#35H,DISP_08
MOV DAT,#0C9H
CALL ENABLE
JMP DISP_03
DISP_08:NOP
MOV DAT,#0CAH
CALL ENABLE
DISP_03:NOP
RET
ENABLE:CLR RS ;送命令
CLR RW
CLR E
CALL DELAY_3
SETB E
RET
WRITE1:MOV DPTR,#TABLE1
MOV A,R1
MOVC A,@A+DPTR
CALL WRITE2 ;显示到lcd
RET
WRITE2:MOV DAT,A ;显示
SETB RS
CLR RW
CLR E
CALL DELAY_3
SETB E
RET
DELAY_3: MOV R4,#1
D1: MOV R5,#80H
DJNZ R5,$
DJNZ R4,D1
RET
DELAY: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY
RET
TABLE1:DB"0123456789.gZJL:MHXMLN NOSIGNALABV"
END |
|