高精度数字电压表原理图及源程序
RP1
LCD_CMD_WR EQU 00E0H LCD_DATA_WR EQU 00E1H LCD_BUSY_RD EQU 00E2H LCD_DATA_RD EQU 00E3H ;********************************
AD_12CMD_WR EQU 00E0H ; 初始化为12位转换器 AD_8CMD_WR EQU 00E8H ; 初始化为8位转换器 AD_8HB_RD EQU 00E4H ; 高8Bit 输出 AD_4LB_RD EQU 00ECH ; 低4Bit 输出 ;********************************* ORG 0000H LJMP MAIN ORG 0030H
;========================================= MAIN: MOV SP,#60H CLR RS0 CLR RS1 ACALL INIT ;LCD 初始化
;======================================= ; 参数设置
;======================================= AD574: MOV DPTR,#AD_12CMD_WR MOVX @DPTR,A ; 启动转换 SETB P3.0
LOOP: NOP JB P3.0,LOOP MOV DPTR,#AD_8HB_RD MOVX A,@DPTR MOV R2,A MOV DPTR,#AD_4LB_RD MOVX A,@DPTR MOV R3,A
;======================================== ; 数据处理(参数)传递 ;R2R3=(ABC0)
; 处理后R2R3=(0ABC)
;======================================== MOV A,R2 SWAP A ; 高低交换 MOV R5,A ANL A,#0F0H ; MOV R4,A MOV A,R3 SWAP A ORL A,R4 MOV R3,A MOV A,R5 ANL A,#0FH MOV R2,A
;======================================== ; 入口参数:被减数在R2R3中,减数在R6R7中 ; 出口参数:差值在R2R3中
;======================================== MOV R6,#08H MOV R7,#00H CLR C ;============= MOV A,R2 SUBB A,R6 JNC SUBI ; 无借位,直接运算 SETB 02H MOV A,R2 CPL A ; 取反 ANL A,#0FH MOV R2,A MOV A,R3 CPL A MOV R3,A
;===========================
; 计算
;========================== SUBI: CLR C MOV A,R3 SUBB A,R7 MOV R3,A MOV A,R2 SUBB A,R6 MOV R2,A
;========================================== ; 乘以10计算
;=========================================== MOV R1,#00H MOV A,R3 LCALL MUL10 MOV 49H,A MOV A,R2 LCALL MUL10 MOV 48H,A
;========================================
;============================================ ; 除法运算
;============================================ ;============================ ; 整数部分
;============================ MOV R0,#30H LCALL DIVD0 MOV A,40H MOV @R0,A INC R0 MOV A,#2EH MOV @R0,A INC R0
;========================== ; 小数部分
;========================== MOV 45H,#05H ALUDEF: MOV A,42H LCALL MUL10 MOV 47H,A MOV A,41H LCALL MUL10 MOV 46H,A
;========================== ; 确定小数
;========================== LCALL DIVD1 MOV A,40H MOV @R0,A INC R0 DJNZ 45H,ALUDEF MOV A,#05H CLR C SUBB A,40H JC DV53 SJMP DV54 DV53: INC 40H DEC R0 MOV A,40H MOV @R0,A
LOPJ: CJNE @R0,#0AH,DV54 MOV @R0,#00H DEC R0 INC @R0 INC R0 ;==================== SJMP LOPJ DV54: CLR OV INC R0 MOV @R0,#56H ;RET
;=========================== ; 显示
;=========================== MOV A,#01H ACALL C51 MOV A,#81H ACALL C51 MOV DPTR,#TAB1 LCHIN: CLR A MOVC A,@A+DPTR INC DPTR LCALL C51DDR JNZ LCHIN MOV A,#0C3H ACALL C51 JNB 02H,LOP_ MOV A,#2DH
LCALL C51DDR LOP_: MOV R0,#30H MOV A,@R0 LCALL CHASCII INC R0 LCALL C51DDR MOV A,@R0 INC R0 LCALL C51DDR MOV R1,#06H LOPXS: MOV A,@R0 LCALL CHASCII LCALL C51DDR INC R0 DJNZ R1,LOPXS MOV R2,#5
DELL1ms:LCALL DEL DJNZ R2,DELL1ms MOV A,#01H ACALL C51 MOV A,#0C3H ACALL C51 CLR 02H LJMP AD574
;============================ ; 计算子程序
;============================= DIVD0: CLR 00H PUSH PSW SETB RS0 CLR RS1 MOV R4,48H MOV R5,49H ACALL DIVD POP PSW RET
DIVD1: SETB 00H PUSH PSW SETB RS0 CLR RS1 MOV R4,46H MOV R5,47H
DIVD: MOV R2,#00H MOV R3,#00H
;========================
MOV R6,#08H MOV R7,#00H CLR C MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV POP PSW 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 R0,A MOV A,R1 MOV R3,A INC R5
DVD3: DJNZ B,DVD2 MOV A,R2 MOV R0,A MOV 40H,R5 MOV 41H,R0 MOV 42H,R1
CLR OV JNB 00H,DIED POP PSW DIED: RET
;============================================ INIT: MOV A,#3CH LCALL C51 MOV A,#0CH LCALL C51 MOV A,#06H LCALL C51 RET
DDW: PUSH ACC MOV DPTR,#LCD_BUSY_RD DDW1: MOVX A,@DPTR JB ACC.7,DDW1 POP ACC ;ACALL DELAY RET
C51: ACALL DDW MOV DPTR,#LCD_CMD_WR MOVX @DPTR,A RET
C51DDR: PUSH DPH PUSH DPL ACALL DDW MOV DPTR,#LCD_DATA_WR MOVX @DPTR,A POP DPL POP DPH RET
;FLASH: MOV A,#08H ;ACALL C51 ;ACALL DELAY4 ;MOV A,#0CH ;ACALL C51 ;ACALL DELAY4 ;DJNZ R4,FLASH ;RET
;DELAY: PUSH PSW
; 关闭显示 ; 开显示,关闭光标
;SETB RS0 ;SETB RS1 ; 延时子程序2.5ms 。 ;MOV R6,#1 ;5
;D1: MOV R7,#1 ;248 ;DJNZ R7,$ ;DJNZ R6,D1 ;POP PSW ;RET
;DELAY4: PUSH PSW ;SETB RS0 ;SETB RS1 ;MOV R5,#1 ;DL6: ;MOV R6,#1 ;DL7: ;MOV R7,#1 ;DL8:
; DJNZ R7,DL8 ;DJNZ R6,DL7 ;DJNZ R5,DL6 ;POP PSW ;RET
DEL: PUSH PSW SETB RS0 SETB RS1 MOV R7,#200 DEL1: MOV R6,#123 NOP
DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 POP PSW RET
HASC: MOV B,A LCALL HAS1 XCH A,B SWAP A HAS1: ANL A,#0FH ADD A,#90H DA A ADDC A,#40H DA A RET
CHASCII:MOV A,@R0 ORL A,#30H
;0.81ms. ;40 ;100 ;100 ; 延时50ms ;200 ;123
RET
;=================== ; 乘以10计算子程序
;=================== MUL10: PUSH PSW CLR RS0 SETB RS1 MOV B,#0AH MOV R0,A ANL A,#0FH MUL AB ADD A,R1 MOV R4,A SWAP A ANL A,#0FH MOV R1,A MOV A,R4 ANL A,#0FH MOV R4,A MOV A,R0 SWAP A ANL A,#0FH MOV B,#0AH MUL AB ADD A,R1 MOV R6,A ANL A,#0FH MOV R7,A MOV A,R6 SWAP A ANL A,#0FH MOV R1,A MOV A,R7 SWAP A ORL A,R4 POP PSW RET
TAB1: DB 'Current Voltage' DB 00H END
; 屏蔽高位