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

📄 1

📁 RM51单片机实验板配套实验例程库
💻
📖 第 1 页 / 共 3 页
字号:
		MOV	A, TEMPHEAD + 1		;
		MOV	TEMPH, A		;
READTEMPOUT:	RET				;
;
;
;**********************************************************
;	处理温度 BCD 码子程序
;**********************************************************
CONVTEMP:	MOV	A, TEMPH		;
		ANL	A, #80H			;
		JZ	TEMPC1			;
		CLR	C			;
		MOV	A, TEMPL		;
		CPL	A			;
		ADD	A, #01H			;
		MOV	TEMPL, A		;
		MOV	A, TEMPH		; -
		CPL	A			;
		ADDC	A, #00H			;
		MOV	TEMPH, A		; TEMPHC HI = 符号位
		MOV	TEMPHC, #10H		;
		SJMP	TEMPC11			;
;
TEMPC1:		MOV	TEMPHC, #0FH		; +
TEMPC11:        MOV     A,TEMPHC
                SWAP    A
                MOV     TEMPHC,A
                MOV	A, TEMPL		;
		ANL	A, #0FH			; 乘 0.0625
		MOV	DPTR, #TEMPDOTTAB	;
		MOVC	A, @A + DPTR		;
		MOV	TEMPLC, A		; TEMPLC LOW = 小数部分 BCD
;
		MOV	A, TEMPL		; 整数部分
		ANL	A, #0F0H		;
		SWAP	A			;
		MOV	TEMPL, A		;
		MOV	A, TEMPH		;
		ANL	A, #0FH			;
		SWAP	A			;
		ORL	A, TEMPL		;
		LCALL	HEX2BCD1		;
		MOV	TEMPL, A		;
		ANL	A, #0F0H		;
		SWAP	A			;
		ORL	A, TEMPHC		; TEMPHC LOW = 十位数 BCD
		MOV	TEMPHC, A		;
		MOV	A, TEMPL		;
		ANL	A, #0FH			;
		SWAP	A			; TEMPLC HI = 个位数 BCD
		ORL	A, TEMPLC		;
		MOV	TEMPLC, A		;
		MOV	A, R7			;
		JZ	TEMPC12			;
		ANL	A, #0FH			;
		SWAP	A			;
		MOV	R7, A			;
		MOV	A, TEMPHC		; TEMPHC HI = 百位数 BCD
		ANL	A, #0FH			;
		ORL	A, R7			;
		MOV	TEMPHC, A		;
TEMPC12:	RET				;
;
;**********************************************************
;	小数部分码表
;**********************************************************
TEMPDOTTAB:	DB	00H, 01H, 01H, 02H, 03H, 03H, 04H, 04H, 05H, 06H
;
		DB	06H, 07H, 08H, 08H, 09H, 09H
;
		RET
;
TEMPP:
        MOV  A,#90H	       ;第二行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE3     ;16*16点阵“温度-----”
	LCALL WRITE_HZ
        RET
;
;**********************************************************
;	温度值涮新子程序
;**********************************************************
;
DISPTEMP:       MOV	A, TEMPLC		;
		ANL	A, #0FH			;
		MOV	66H, A		        ;
		MOV	A, TEMPLC		;
		SWAP	A			;
		ANL	A, #0FH			;
		MOV	64H, A		        ;
		MOV	A, TEMPHC		;
		ANL	A, #0FH			;
		MOV	63H, A		        ;
		MOV	A, TEMPHC		;
		SWAP	A			;
		ANL	A, #0FH			;
		MOV	62H, A		        ;
		MOV	A, TEMPHC		;
		ANL	A, #0F0H		;
		CJNE	A, #010H, DISPBCD0	;
		SJMP	DISPBCD2		;
;
DISPBCD0:	MOV	A, TEMPHC		;
		ANL	A, #0FH			;

		JNZ	DISPBCD2		; 十位数是零
		MOV	A, TEMPHC		;
		SWAP	A			;
		ANL	A, #0FH			;
		MOV	62H, #0FH	        ; 符号位不显示
		MOV	63H, A		        ; 十位数显示符号
DISPBCD2:					;
                MOV     60H,#0AH                ;  :
                MOV     61H,#0FH                ;  空
                MOV     65H,#11H                ;  小数点.
                MOV     67H,#0FH                ;  空

;
;以下将60H-67H温度信息写入液晶LCD
TEMPUP: PUSH  PSW
        MOV   PSW,#08H
        MOV  A,#92H	       ;第二行左第3个字开始
	LCALL WRITE_COM
        MOV   R1,#60H           ;将60-67H时间数据查出字码写入LCD
        MOV   DPTR,#TABLE1
        MOV   R2,#08H          ; 查8次
        MOV   A,#00H
TEMPLOP:MOV   A,@R1            ;
        MOVC  A,@A+DPTR
        LCALL WRITE_DAT
        INC   R1
        DJNZ  R2,TEMPLOP       ;
        POP   PSW
        RET
;
;**********************************************************
;	单字节 16 进制转 BCD
;**********************************************************
HEX2BCD1:	MOV	B, #064H		; 16 进制 -> BCD
		DIV	AB			; B = A % 100
		MOV	R7, A			; R7 = 百位数
		MOV	A, #0AH			;
		XCH	A, B			;
		DIV	AB			; B = A % B
		SWAP	A			;
		ORL	A, B			;
		RET				;
;
;
;****************************************************************************
;	Calculate CRC-8 Values.  Uses The CCITT-8 Polynomial, Expressed As
;	X^8 + X^5 + X^4 + 1
;****************************************************************************

CRC8CAL:	PUSH	ACC			;
		MOV	R7, #08H		; Number Bits In Byte
;
CRC8LOOP1:	XRL	A, B			; Calculate CRC
		RRC	A			; Move To Carry
		MOV	A, B			; Get The Last CRC Value
		JNC	CRC8LOOP2		; Skip If Data == 0
		XRL	A, #18H			; Update The CRC Value
;
CRC8LOOP2:	RRC	A			; Position The New CRC
		MOV	B, A			; Store The New CRC
		POP	ACC			; Get The Remaining Bits
		RR	A			; Position The Next Bit
		PUSH	ACC			; Save The Remaining Bits
		DJNZ	R7, CRC8LOOP1		; Repeat For 8 Bits
		POP	ACC			;
		RET				;
;
;------------ 以下24C16读写程序----------------------
;CLR A
;MOV R0, #10H
;MOV R7, #55H
;LCALL C16BYWR
;
;MOV R6, #00H
;MOV R7, #064H
;LCALL DELAY
;
;LCALL C16CURD
;
;CLR A
;MOV R0, A
;LCALL C16CURD
;
;-----------------------------------------------
; 24C16字节写入程序
; 将R7中的数据写入到(Acc^R0)指定的单元中
;-----------------------------------------------
C16BYWR: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, R7
LCALL WRBYT
LCALL EXTCL
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16页写入程 序 (R7中的数据在1-16内)
; 将以R1为首地址R7个内存中的数据写入
;到(Acc^R0)指定首地址的连续单元中
;-----------------------------------------------
C16PAWR:
RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
C16PAWR1: MOV A, @R1
LCALL WRBYT
LCALL EXTCL
INC R1
DJNZ R7, C16PAWR1
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16当前字节读程序
; 读出的数据在Acc中
;-----------------------------------------------
C16CURD: MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16随机字节读程序
; 将(Acc^R0)指定的字节数据读出到Acc中
;-----------------------------------------------
C16RARD: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16顺序读取程序
; 将(Acc^R0)指定起始的R7个字节数据读出
;到R1为首地址的内存单元中
;-----------------------------------------------
C16SERD: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
MOV @R1, A
INC R1
DEC R7
C16SERD1: LCALL MACK
LCALL RDBYT
MOV @R1, A
INC R1
DJNZ R7, C16SERD1
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16基本操作子程序们
;-----------------------------------------------
;
STA: SETB VSDA
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSDA
NOP
NOP
NOP
NOP
CLR VSCL
RET
;
STOP: CLR VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
SETB VSDA
NOP
RET
;
MACK: CLR VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
SETB VSDA
RET
;
MNACK: SETB VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
NOP
RET
;
EXTCL: SETB VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
NOP
RET
;
WRBYT: MOV R5, #08H
WLP: RLC A
MOV VSDA, C
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
DJNZ R5, WLP
RET
;
RDBYT: MOV R5, #08H
SETB VSDA
RLP: SETB VSCL
NOP
MOV C, VSDA
RLC A
CLR VSCL
NOP
NOP
DJNZ R5, RLP
RET
;===============================================
END














⌨️ 快捷键说明

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