⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 屏幕显示(51).asm

📁 这是一个有关于单片机屏幕显示的的源代码。真的不很不错。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	MOV   R5,A
	MOV   A,R4
	RLC   A
	MOV   R4,A
	XCH   A,R3
	RLC   A
	XCH   A,R3
	XCH   A,R2
	RLC   A
	XCH   A,R2
	MOV   F0,C
	CLR   C
	SUBB  A,@R1
	DEC   R1
	MOV   A,R3
	SUBB  A,@R1
	DEC   R1
	MOV   B,A
	MOV   A,R2
	SUBB  A,@R1
	INC   R1
	INC   R1
        JB    F0,DDV2DH
        JC    DDV35H
DDV2DH: CLR   C
	MOV   R2,A
	MOV   A,R4
	SUBB  A,@R1
	MOV   R4,A
	MOV   R3,B
	INC   R7
DDV35H: DJNZ  R0,DDV07H
	DEC   R1
	DEC   R1
	RET


;-------从ROM取一个浮点数---
;     IN:R1指向目的RAM开始地址,DPTR+A指向源ROM开始地址
;    OUT:浮点数到@R1
;    USE:A,B,不改变R1,DPTR
GETROMF:
	MOV B,A
	MOVC A,@A+DPTR
	MOV @R1,A
	INC B
	MOV A,B
	INC R1
	MOVC A,@A+DPTR
	MOV @R1,A
	INC B
	MOV A,B
	INC R1
	MOVC A,@A+DPTR
	MOV @R1,A
	INC B
	MOV A,B
	INC R1
	MOVC A,@A+DPTR
	MOV @R1,A
	DEC R1
	DEC R1
	DEC R1
RET

;----------发送一个浮点数----------
;IN:	(R0),ADDRESS0
;OUT:
;USE:	ACC,B,(R0,不改变)
SDFDAT:
	MOV A,@R0
	CALL SDHEX
	INC R0
	MOV A,@R0
	CALL SDHEX
	INC R0
	MOV A,@R0
	CALL SDHEX
	INC R0
	MOV A,@R0
	CALL SDHEX
	DEC R0
	DEC R0
	DEC R0
RET

;------浮点数赋值---------
;    NAME: FMOV
;FUNCTION: 浮点数@R0 -->浮点数@R0
;      IN: R0指向源浮点数 R1指向目的浮点数
;     OUT: R0,R1 不改变
;    USED: ACC
;      BY: WEN
FMOV:	MOV A,@R0
	MOV @R1,A
	INC R0
	INC R1
	MOV A,@R0
	MOV @R1,A
	INC R0
	INC R1
	MOV A,@R0
	MOV @R1,A
	INC R0
	INC R1
	MOV A,@R0
	MOV @R1,A
	DEC R0
	DEC R0
	DEC R0
	DEC R1
	DEC R1
	DEC R1
	RET

;-------四字节浮点数结果回送--------
FST4:	MOV   A,R4
	MOV   @R0,A
	INC   R0
	MOV   A,R5
	MOV   @R0,A
	INC   R0
	MOV   A,R6
	MOV   @R0,A
	INC   R0
	MOV   A,R7
	MOV   @R0,A
	DEC   R0
	DEC   R0
	DEC   R0
	RET

;-------四字节浮点数乘----------
;四字节浮点数乘法 FML4 43 BYTES
;功能:		(R0)指向数+(R1)指向数--R4(阶)R5R6R7
;使用:		A,位X38H,X39H,F0和现行工作寄存器,不改变R0,R1
FML4:	CALL FLD4
	INC   R1
	MOV   A,R0
	PUSH  ACC
	CALL DML3
	POP   ACC
	MOV   R0,A
	DEC   R1
	MOV   A,R2
	MOV   C,0E7H
	MOV   0D5H,C
	MOV   A,@R0
	XRL   A,@R1
	MOV   C,0E7H
	MOV   X38H,C
	MOV   A,@R0
	ADD   A,@R1
	XCH   A,R1
	PUSH  ACC
	SETB  C
	CALL FSD4
	POP   ACC
	XCH   A,R1
	MOV   C,X38H
	MOV   0E7H,C
	MOV   R4,A
	JMP FMLFT0
	PUSH  ACC
	SETB  C
	CALL FSD4
	POP   ACC
	XCH   A,R1
	MOV   C,X38H
	MOV   0E7H,C
	MOV   R4,A
FMLFT0:
	CJNE R5,#00H,FMLRET
	CJNE R6,#00H,FMLRET
	CJNE R7,#00H,FMLRET
	MOV R4,#40H
FMLRET:
	RET

;-------三字节定点数原码乘法---------
;DML3 44 BYTE
;功能:		(R2R3R4R5R6R7)/((R1))((R1)+1)((R1)+2)--R5R6R7
;使用:		A,B,F0和现行工作寄存器,不改变R1
DML3:	MOV   R0,#19H
	CLR   C
	CLR   A
	MOV   R5,A
	MOV   R6,A
	MOV   R7,A
DML0AH: MOV   A,R5
	RRC   A
	MOV   R5,A
	MOV   A,R6
	RRC   A
	MOV   R6,A
	MOV   A,R7
	RRC   A
	MOV   R7,A
	XCH   A,R2
	RRC   A
	XCH   A,R2
	XCH   A,R3
	RRC   A
	XCH   A,R3
	XCH   A,R4
	RRC   A
	XCH   A,R4
        DJNZ  R0,DML1FH
	RET
DML1FH: JNC   DML0AH
	INC   R1
	INC   R1
	ADD   A,@R1
	MOV   R7,A
	MOV   A,R6
	DEC   R1
	ADDC  A,@R1
	MOV   R6,A
	MOV   A,R5
	DEC   R1
	ADDC  A,@R1
	MOV   R5,A
        SJMP  DML0AH
	MOV   A,R6
	DEC   R1
	ADDC  A,@R1
	MOV   R6,A
	MOV   A,R5
	DEC   R1
	ADDC  A,@R1
	MOV   R5,A
        SJMP  DML0AH

;四字节浮点数规格化 FSD4 58 BYTES
FSD4:   JC    FSD20H
	MOV   C,X39H
        JB    0D5H,FSD15H
	MOV   A,R2
	RRC   A
	MOV   R2,A
	MOV   A,R3
	RRC   A
	MOV   R3,A
	MOV   A,R4
	RRC   A
	MOV   R4,A
	INC   R0
	RET
FSD15H: MOV   A,R5
	RRC   A
	MOV   R5,A
	MOV   A,R6
	RRC   A
	MOV   R6,A
	MOV   A,R7
	RRC   A
	MOV   R7,A
	INC   R1
	RET
FSD20H: MOV   A,R5
        JNZ   FSD2AH
        CJNE  R6,#00H,FSD2DH
        CJNE  R7,#00H,FSD2DH
FSD29H: RET
FSD2AH: JB    0E7H,FSD29H
FSD2DH: MOV   C,0D5H
	MOV   A,R7
	RLC   A
	MOV   R7,A
	MOV   A,R6
	RLC   A
	MOV   R6,A
	MOV   A,R5
	RLC   A
	MOV   R5,A
        CLR   0D5H
	DEC   R1
        SJMP  FSD20H

;--------浮点数比较-------------
;    NAME: FCOMP
;FUNCTION: 比较两个浮点数的大小
;      IN: R0指向浮点数1,R1指向浮点数2
;     OUT: ACC=2: @R0=@R1; ACC=1:@R0<@R1;=4:@R0>@R1
;	不改变R0,R1,PSW
;     USE:
FCOMP:PUSH PSW
	CALL FFMT0	;R0指向浮点数1若是0则规格化
	MOV A,R0
	PUSH ACC
	MOV A,R1	;R1指向浮点数2若是0则规格化
	MOV R0,A
	CALL FFMT0
	POP ACC
	MOV R0,A
	CALL FSB4	;R0指向浮点数1 - R1指向浮点数2-->R4R5R6R7
	CJNE R5,#00,NOTEQU
	CJNE R6,#00,NOTEQU
	CJNE R7,#00,NOTEQU
	MOV A,#02H	;@R0=@R1
	JMP FCMPEND
NOTEQU:
	MOV A,R4
	JB ACC.7,FCMPN
	MOV A,#04	;@R0>@R1
	JMP FCMPEND
FCMPN:
	MOV A,#01	;@R0<@R1
FCMPEND:
	POP PSW
	RET

;四字节浮点数减法 FSB4 7-9 BYTES
;R0 R1 NOT CHANGE
FSB4:	SETB  X3AH
	CALL FLD4
	CALL FAB4
	RET

;-------浮点数0规格化------------
;    NAME: FFMT0
;FUNCTION: 浮点数@R0规格化0
;      IN: R0指向源浮点数
;     OUT: R0指向结果浮点数
;    USED: ACC,R2,R3,R4
;      BY: WEN
FFMT0:
	CALL FLD4	;((R0)+1)((R0)+2)((R0)+3)-->R2R3R4
	CJNE R2,#00,FDNOT0
	CJNE R3,#00,FDNOT0
	CJNE R4,#00,FDNOT0
	MOV @R0,#40H
FDNOT0:
	RET

;四字节浮点数加减处理 FAB4 150 BYTES
;功能:		((R0))(R2)(R3)(R4)+-((R1))(R5)(R6)(R7)--R4(阶)R5R6R7
;               X3AH=0加法;X3AH=1减法
;使用:		A,位X38H,X39H,X3AH,F0和现行工作寄存器
FAB4:	INC   R1
	MOV   A,@R1
	MOV   R5,A
	INC   R1
	MOV   A,@R1
	MOV   R6,A
	INC   R1
	MOV   A,@R1
	MOV   R7,A
	DEC   R1
	DEC   R1
	DEC   R1
	MOV   A,@R0
        MOV   C,0E7H
	MOV   X38H,C
	XRL   A,@R1
        JNB   0E7H,FAB1AH
	CPL   X3AH
FAB1AH: MOV   A,R0
	PUSH  ACC
	MOV   A,@R0
        MOV   C,0E6H
        MOV   0E7H,C
	MOV   R0,A
	MOV   A,R1
	PUSH  ACC
	MOV   A,@R1
        MOV   C,0E6H
        MOV   0E7H,C
	MOV   R1,A
FAB2CH: CLR   C
	MOV   A,R0
	SUBB  A,R1
        JZ    FAB43H
	CLR   0D5H
	CLR   X39H
        JB    0E7H,FAB67H
        CJNE  R5,#00H,FAB74H
        CJNE  R6,#00H,FAB74H
        CJNE  R7,#00H,FAB74H
	MOV   A,R0
	MOV   R1,A
FAB43H: JB    X3AH,FAB7CH
	MOV   A,R4
	ADD   A,R7
	MOV   R7,A
	MOV   A,R3
	ADDC  A,R6
	MOV   R6,A
	MOV   A,R2
	ADDC  A,R5
	MOV   R5,A
        JNC   FAB5BH
	SETB  X39H
	CLR   C
	SETB  0D5H
FAB56H: CALL FSD4
	MOV   A,R1
	MOV   R0,A
FAB5BH: POP   ACC
	MOV   R1,A
	POP   ACC
	XCH   A,R0
	MOV   C,X38H
        MOV   0E7H,C
	XCH   A,R4
	RET
FAB67H: CJNE  R2,#00H,FAB76H
        CJNE  R3,#00H,FAB76H
        CJNE  R4,#00H,FAB76H
	MOV   A,R1
	MOV   R0,A
        SJMP  FAB43H
FAB74H: CPL   0D5H
FAB76H: CLR   C
	CALL FSD4
        SJMP  FAB2CH
FAB7CH: CLR   C
	MOV   A,R4
	SUBB  A,R7
	MOV   R7,A
	MOV   A,R3
	SUBB  A,R6
	MOV   R6,A
	MOV   A,R2
	SUBB  A,R5
	MOV   R5,A
        JNC   FAB94H
	CLR   A
	CLR   C
	SUBB  A,R7
	MOV   R7,A
	CLR   A
	SUBB  A,R6
	MOV   R6,A
	CLR   A
	SUBB  A,R5
	MOV   R5,A
	CPL   X38H
FAB94H: SETB  C
	CLR   0D5H
       SJMP  FAB56H


;****************与2个下位机通信*************

;-------内部RAM与增强内存复制数据--------
COPY2:
	MOV A,@R0
	MOVX @R1,A
	INC R0
	INC R1
	DJNZ R2,COPY2
	RET

C99E:
	DB 00EH,09CH,03FH,09AH	;9999.9 0E9C3F9A
	DB 00AH,0F9H,0FFH,05CH	;999.99 0AF9FF5C
	DB 007H,0C7H,0FFH,07DH	;99.999 07C7FF7D
	DB 004H,09FH,0FFH,097H	;9.9999 049FFF97

P10E:
	DB 00EH,09CH,040H,000H	;10000 0E9C4000
	DB 00AH,0FAH,000H,000H	;1000 0AFA0000
	DB 007H,0C8H,000H,000H	;100 07C80000
	DB 004H,0A0H,000H,000H	;10 04A00000
	DB 001H,080H,000H,000H	;1 01800000

;--------各压力UNIT间对应KPA转换值-------
PTTAB:
	DB 001H,080H,000H,000H	;1 01800000					KPA
	DB 077H,083H,012H,06FH	;.001 7783126F					MPA
	DB 07EH,094H,09FH,006H	;0.14513788098693759071117561683599 7E949F06	PSI
	DB 07AH,0A7H,010H,079H	;0.010196798205363515856021209340267 7AA71079	AT
	DB 07AH,0A3H,0D7H,00AH	;0.01 7AA3D70A					BAR
	DB 004H,0A0H,000H,000H	;10 04A00000					MBAR
	DB 07DH,0D0H,0C4H,03EH	;0.10193679918450560652395514780836 7DD0C43E	MH20
	DB 007H,0CBH,0DFH,0A4H	;101.93679918450560652395514780836 07CBDFA4	MMH2O
	DB 003H,080H,083H,099H	;4.0160642570281124497991967871486 03808399	IWC(英寸水柱)
	DB 003H,0F0H,006H,025H	;7.50075006484985 03F00625			MMHG
	DB 07FH,097H,008H,04FH	;0.29498525073746312684365781710914 7F97084F	INHG

;-------转换压力值--------
;(1)将BCD码量程转换为浮点数
;(2)根据传感器量程比较确定小数点位置(即小数位数)
;(3)根据小数位数转换十进制显示值
CTPV:
	MOV R0,#CDB+5		;将A端量程转换为浮点数
	CALL TRTF
	MOV R0,#TDD
	MOV R1,#TFD
	CALL FMOV
	MOV R0,#CDB+8		;将B端量程转换为浮点数
	CALL TRTF
	MOV R0,#TDD
	MOV R1,#TFD
	CALL FSB4
	CALL FST4
	MOV R1,#CDB+5		;判断量程UNIT=MPA,量程值乘1000
	MOV A,@R1
	JNB ACC.6,CTP1
	MOV TBD,#0AH
	MOV TBD+1,#0FAH
	MOV TBD+2,#0
	MOV TBD+3,#0
	MOV R1,#TBD
	CALL FML4
	CALL FST4
CTP1:
	CALL GPIER

	MOV TBD,#4		;比较量程确定该UNIT小数点位置
	MOV TBD+1,#0
CTP2:
	MOV A,TBD+1
	RL A
	RL A
	MOV R1,#TFD
	MOV DPTR,#C99E
	CALL GETROMF
	MOV R0,#TDD
	CALL FCOMP
	JB ACC.2,CTP3
	INC TBD+1
	DJNZ TBD,CTP2
CTP3:
	MOV R1,#DPN
	MOVX A,@R1
	MOV R1,A
	MOV A,TBD+1		;保存小数点位置
	MOVX @R1,A

CPV0:
	MOV R0,#CDB		;转换压力值
	MOV A,@R0
	MOV C,PA1
	ORL C,PE1
	JC CTP4
	RLC A
	MOV PNC1,C
	SJMP CTP5
CTP4:
	RLC A
	MOV PNC2,C
CTP5:
	MOV R1,#TDD
	CALL FMOV
	MOV R0,#TDD		;减零点偏移量
	MOV R1,#FZO2
	JNB ZC,CTP6
	JB PZC,CTP6		;非测量压力清零
	CLR ZC
	CALL FMOV		;保存零位
CTP6:
	CALL FSB4
	CALL FST4
	CALL GPIER
	MOV R1,#FMC
	CALL FMOV
	MOV DPTR,#P10E
	MOV A,TBD
	CALL GIER
	CALL FTD0

	MOV R1,#DSBA		;取出显存地址
	MOVX A,@R1
	MOV R1,A
	MOV R0,#TDD+1
	MOV A,@R0		;保存最高位
	ANL A,#0FH
	MOV @R1,A
	INC R1			;分解BCD码保存低4位
	INC R0
	MOV R2,#2
CTP7:
	MOV A,@R0
	SWAP A
	ANL A,#0FH
	MOV @R1,A
	INC R1
	MOV A,@R0
	ANL A,#0FH
	MOV @R1,A
	INC R1
	INC R0
	DJNZ R2,CTP7

	MOV C,PE1
	MOV F0,C
MVOJ:
	SETB C		;判断压力值是否超量程
	MOV A,TDD
	ANL A,#0FH
	JNZ CTP8
	MOV A,TDD+1
	ANL A,#0F0H
	JNZ CTP8
	CLR C
CTP8:
	JB F0,CTP9
	MOV MO1,C
	SJMP CTP0
CTP9:
	MOV MO2,C
CTP0:
	RET


;--------根据UNIT转换量程或压力值--------
GPIER:
	MOV DPTR,#PTTAB		;取出UNIT字节地址,再读取UNIT
	MOV R1,#UNTB
	MOVX A,@R1
	CLR C
	SUBB A,#4
GIER:
	RL A
	RL A
	MOV R1,#TFD
	CALL GETROMF
	CALL FML4
	CALL FST4
	RET


;-----------传感器量程转化为浮点数-------
TRTF:
	MOV A,@R0
	PUSH ACC		;暂存符号位
	MOV TDD,@R0
	ANL TDD,#0FH
	INC R0
	MOV TDD+1,@R0
	INC R0
	MOV TDD+2,@R0
	CALL DTOB
	MOV R0,#TBD
	MOV R1,#TDD
	CALL BFTURN
	MOV R1,#TBD
	MOV TBD,#7AH
	MOV TBD+1,#0A3H
	MOV TBD+2,#0D7H
	MOV TBD+3,#0AH
	MOV R0,#TDD
	CALL FML4
	CALL FST4
	POP ACC			;恢复量程符号
	RLC A
	MOV A,TDD
	MOV ACC.7,C
	MOV TDD,A
	RET

;--------计算变送输出值--------
TOVP:
	MOV R0,#FIB		;(3)计算测量量程
	MOV R1,#FIA
	CALL FSB4
	MOV R0,#TFD
	CALL FST4
	MOV A,TFD
	JNB TIW,TOV3
	CPL ACC.7
TOV3:
	MOV TFD,A

	MOV R0,#FMC		;(2)计算测量信号相对零点偏移量
	MOV R1,#FIA
	JNB TIW,TOV2
	MOV R1,#FIB
TOV2:
	CALL FSB4
	MOV R0,#TDD
	CALL FST4
	MOV R1,#TFD
	CALL FDV4
	CALL FST4
	MOV R1,#FFS
	CALL FMOV
	CALL FTD7
	MOV R1,#PCT
	MOV A,TDD+2
	MOV B,FFS
	MOV C,B.7
	MOV ACC.7,C
	MOVX @R1,A
	INC R1
	MOV A,TDD+3
	MOVX @R1,A

	MOV R0,#FOB		;(1)计算输出的量程
	MOV R1,#FOA
	CALL FSB4
	MOV R0,#TFD
	CALL FST4
	MOV A,TFD
	JNB TOW,TOV1
	CPL ACC.7
TOV1:
	MOV TFD,A

	MOV R1,#FFS		;(4)计算输出偏移量
	CALL FML4
	MOV R0,#TDD
	CALL FST4

	MOV R1,#FOA		;(5)计算输出绝对量
	JNB TOW,TOV4
	MOV R1,#FOB
TOV4:
	CALL FAD4
	CALL FST4
	MOV R1,#FFS
	CALL FMOV

	MOV A,U

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -