📄 正式成功_1.asm
字号:
AJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5
MOV 6DH,#0AH
AJMP GFLASHOUT
GFLASH5: JB 0EH,GFLASH6
MOV 6BH,#0AH
MOV 6AH,#0AH
AJMP GFLASHOUT
GFLASH6:
MOV 69H,#0AH
MOV 68H,#0AH
AJMP GFLASHOUT
;*********************************
;* 加1 *
;*********************************
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;*********************************
;* 分离 *
;*********************************
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;*********************************
;* 写1302程序 *
;*********************************
WRITE: CLR SCLK
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
WRITE1: RRC A ;送地址给1302
NOP
NOP
CLR SCLK
NOP
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE1
CLR SCLK
NOP
MOV A,DS1302_DATA
MOV R4,#8
WRITE2: RRC A
NOP ;送数据给1302
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
DJNZ R4,WRITE2
CLR RST
RET
;*******************************
;* 读1302程序 *
;*******************************
READ: CLR SCLK
NOP
NOP
SETB RST
NOP
MOV A,DS1302_ADDR
MOV R4,#8
READ1: RRC A
NOP
MOV IO,C
NOP
NOP
NOP
SETB SCLK
NOP
NOP
NOP
CLR SCLK
NOP
NOP
DJNZ R4,READ1
MOV R4,#8
READ2: CLR SCLK
NOP
NOP
SETB IO
MOV C,IO
NOP
NOP
NOP
NOP
NOP
RRC A
NOP
NOP
NOP
NOP
SETB SCLK
NOP
DJNZ R4,READ2
MOV DS1302_DATA,A
CLR RST
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; REST DS18B20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITDS1820: LCALL DISPLAY
SETB TEMPDIN
NOP
NOP
CLR TEMPDIN
MOV R6, #0A0H
DJNZ R6, $
MOV R6, #0A0H
DJNZ R6, $
SETB TEMPDIN
MOV R6, #32H
DJNZ R6, $
MOV R6, #3CH
LOOP1820: MOV C, TEMPDIN
JC INITDS1820OUT
DJNZ R6, LOOP1820
MOV R6, #064H
DJNZ R6, $
SJMP INITDS1820
RET
INITDS1820OUT: SETB TEMPDIN
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 读DS18B20的程序,从中读出一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READDS1820: ;LCALL DISPLAY
MOV R7, #08H
SETB TEMPDIN
NOP
NOP
READDS1820LOOP: CLR TEMPDIN
NOP
NOP
NOP
SETB TEMPDIN
MOV R6, #07H
DJNZ R6, $
MOV C, TEMPDIN
MOV R6, #3CH
DJNZ R6, $
RRC A
SETB TEMPDIN
DJNZ R7, READDS1820LOOP
MOV R6, #3CH
DJNZ R6, $
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 写DS18B20的 程序,从中写一个字节的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITEDS1820: ;LCALL DISPLAY
MOV R7, #08H
SETB TEMPDIN
NOP
NOP
WRITEDS1820LOP: CLR TEMPDIN
MOV R6 , #07H
DJNZ R6,$
RRC A
MOV TEMPDIN, C
MOV R6, #34H
DJNZ R6,$
SETB TEMPDIN
DJNZ R7, WRITEDS1820LOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ TEMP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READTEMP:
LCALL INITDS1820
LCALL DISPLAY
MOV A, #0CCH
LCALL WRITEDS1820
MOV R6, #34H
DJNZ R6, $
MOV A, #44H
LCALL WRITEDS1820
MOV R6, #34H
DJNZ R6, $
RET
READTEMP1: LCALL INITDS1820
LCALL DISPLAY
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#0BEH
LCALL WRITEDS1820
MOV R6,#34H
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
MOV TEMPHC,#0BH
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A
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
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
SWAP A
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R7
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,TEMPHC
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
;********************************
;显示区BCD码温度值刷新子程序
;********************************
DISPBCD: MOV A,TEMPLC
ANL A,#0FH
MOV 4AH,A
MOV A,TEMPLC
SWAP A
ANL A,#0FH
MOV 4BH,A
MOV A,TEMPHC
ANL A,#0FH
MOV 4CH,A
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 4DH,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 4DH,#0AH
MOV 4CH,A
DISPBCD2: RET
;********************************
;单字节十六进制转BCD
;********************************
HEX2BCD1: MOV B,#064H
DIV AB
MOV R7,A
MOV A,#0AH
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;********************************
;Calulate CRC-8Values.
;X^8+X^5+x^4+1
;********************************
CRC8CAL: PUSH ACC
MOV R7,#08H
CRC8LOOP1: XRL A,B
RRC A
MOV A,B
JNC CRC8LOOP2
XRL A,#18H
CRC8LOOP2: RRC A
MOV B,A
POP ACC
RR A
PUSH ACC
DJNZ R7,CRC8LOOP1
POP ACC
RET
;*********************************
;* 显示 *
;*********************************
DISPLAY: MOV 7DH,#02H
MOV 7CH,#00H
MOV R0,#46H
MOV R1,#66H
MOV R2,76H
MOV R3,#76H
MOV R5,#0FEH
PLAY1: MOV A,#0FFH
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,@R1
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,R2
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
INC R1
INC R3
MOV A,R0
MOV R7,A
MOV A,R3
;SETB PSW.4
MOV R0,A
MOV A,@R0
MOV R2,A
;CLR PSW.4
MOV A,R7
MOV R0,A
PLAY3: MOV A,R5
MOV P2,A
LCALL DL1MS
MOV A,R5
JNB ACC.7,PLAYOUT
RL A
MOV R5,A
LJMP PLAY1
PLAYOUT: SETB P2.7
RET
DL1MS: MOV R6,#14H;R6,#07H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
YS100: MOV R6,#99
L100: LCALL YS10
NOP
DJNZ R6,L100
NOP
NOP
RET
YS10: MOV R7,#250
L1: DJNZ R7,L1
RET
SETXIAOSHU:
TAB1: ;DB 0C0H,0F9H,0A4H,0B0H
; DB 99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
DB 03H,9FH,25H,0DH,99H
DB 49H,41H,1FH,01H,09H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -