?? 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 + -