📄 at89c5218b2012232f.txt.txt
字号:
NOP ;
NOP ;
WRITEDS1820LOP: CLR TEMPDIN ;
MOV R6, #07H ; DELAY 15us
DJNZ R6, $ ;
RRC A ;
MOV TEMPDIN, C ;
MOV R6, #34H ; DELAY 104us
DJNZ R6, $ ;
SETB TEMPDIN ;
DJNZ R7, WRITEDS1820LOP ;
RET ;
;
;
;**********************************************************
; READ TEMP
;**********************************************************
READTEMP: LCALL INITDS1820 ;
MOV A, #0CCH ;
LCALL WRITEDS1820 ; SKIP ROM
MOV R6, #34H ; DELAY 104us
DJNZ R6, $ ;
MOV A, #44H ;
LCALL WRITEDS1820 ; START CONVERSION
MOV R6, #34H ; DELAY 104us
DJNZ R6, $ ;
RET ;
;
READTEMP1: LCALL INITDS1820 ;
MOV A, #0CCH ;
LCALL WRITEDS1820 ; SKIP ROM
MOV R6, #34H ; DELAY 104us
DJNZ R6, $ ;
MOV A, #0BEH ;
LCALL WRITEDS1820 ; SCRATCHPAD
MOV R6, #34H ; DELAY 104us
DJNZ R6, $ ;
MOV R5, #09H ;
MOV R0, #TEMPHEAD ;
MOV B,#00H
READTEMP2: LCALL READDS1820 ;
MOV @R0, A ;
INC R0 ;
READTEMP21: LCALL CRC8CAL ;
DJNZ R5, READTEMP2 ;
MOV A, B ;
JNZ READTEMPOUT ;
MOV A, TEMPHEAD + 0 ;
MOV TEMPL, A ;
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 + -