久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
八通道18B20溫度顯示仿真加單片機匯編語言程序
[打印本頁]
作者:
ww1647346515
時間:
2019-10-20 13:46
標題:
八通道18B20溫度顯示仿真加單片機匯編語言程序
八通道18B20溫度顯示 包含程序
8ds18b20.zip
(489.7 KB, 下載次數: 11)
2019-10-20 13:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51hei截圖20191020134518.png
(87 KB, 下載次數: 67)
下載附件
2019-10-20 13:45 上傳
30H:采樣高位
31H:采樣低位
33H:存儲組合的數據,初始化為0
34H35H.36H:組合的BCD碼
37H~3CH:分離的BCD碼,小數部分作如下處理:將3CH的數據放入3BH中
單片機源程序如下:
CLR P3.7
MAIN:MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER
LCALL TEMPRRO
MOV P2,#06H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER2
LCALL TEMPRRO
MOV P2,#5BH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER3
LCALL TEMPRRO
MOV P2,#4FH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER4
LCALL TEMPRRO
MOV P2,#66H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER5
LCALL TEMPRRO
MOV P2,#6DH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER6
LCALL TEMPRRO
MOV P2,#7DH
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER7
LCALL TEMPRRO
MOV P2,#07H
LCALL PRO
;------------------------------------------------------
MOV 38H,#00H
MOV 39H,#00H
MOV 3AH,#00H
MOV 3BH,#00H
LCALL GET_TEMPER8
LCALL TEMPRRO
MOV P2,#7FH
LCALL PRO
LJMP MAIN
;==============================================CHL1
GET_TEMPER:
SETB P1.0H ; 定時入口
BCD: LCALL INIT_1820
JB 00H,S22
LJMP BCD ; 若DS18B20不存在則返回
S22: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_1820
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_1820
NOP
LCALL DELAY1
CBA:LCALL INIT_1820
JB 00H,ABC
LJMP CBA
ABC:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200 ;READ_1820
RET
;==============================
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB P1.0H
NOP
NOP
CLR P1.0H
NOP
NOP
NOP
SETB P1.0H
MOV R3,#7
DJNZ R3,$
MOV C,P1.0H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
;=============================
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR P1.0H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.0H,C
MOV R3,#23
DJNZ R3,$
SETB P1.0H
NOP
DJNZ R2,WR1
SETB P1.0H
RET
;=======================================
READ_18200:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB P1.0H
NOP
NOP
CLR P1.0H
NOP
NOP
NOP
SETB P1.0H
MOV R3,#7
DJNZ R3,$
MOV C,P1.0H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;=======================================
INIT_1820:
SETB P1.0H
NOP
CLR P1.0H
MOV R0,#250
TSR1:
DJNZ R0,TSR1 ; 延時520us
SETB P1.0H
MOV R0,#25H ;96US-25H
TSR2:
DJNZ R0,TSR2
JNB P1.0H,TSR3;如D0為低則復位成功,DS18B20存在
LJMP TSR4 ; 延時
TSR3:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH ;200US
TSR6:
DJNZ R0,TSR6 ; 延時
TSR7:
SETB P1.0H ;拉高總線
RET
;===============================
GET_TEMPER2:
SETB P1.1H ; 定時入口
BCD2: LCALL INIT_18202
JB 00H,S222
LJMP BCD2 ; 若DS18B20不存在則返回
S222: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18202
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18202
NOP
LCALL DELAY1
CBA2:LCALL INIT_18202
JB 00H,ABC2
LJMP CBA2
ABC2:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18202
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18202
LCALL READ_182002 ;READ_1820
RET
;==============================
READ_18202:
MOV R2,#8
RE12:
CLR C
SETB P1.1H
NOP
NOP
CLR P1.1H
NOP
NOP
NOP
SETB P1.1H
MOV R3,#7
DJNZ R3,$
MOV C,P1.1H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE12
RET
;=============================
WRITE_18202:
MOV R2,#8
CLR C
WR12:
CLR P1.1H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.1H,C
MOV R3,#23
DJNZ R3,$
SETB P1.1H
NOP
DJNZ R2,WR12
SETB P1.1H
RET
;=======================================
READ_182002:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE002:
MOV R2,#8
RE012:
CLR C
SETB P1.1H
NOP
NOP
CLR P1.1H
NOP
NOP
NOP
SETB P1.1H
MOV R3,#7
DJNZ R3,$
MOV C,P1.1H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE012
MOV @R1,A
DEC R1
DJNZ R4,RE002
RET
;=======================================
INIT_18202:
SETB P1.1H
NOP
CLR P1.1H
MOV R0,#250
TSR12:
DJNZ R0,TSR12 ; 延時520us
SETB P1.1H
MOV R0,#25H ;96US-25H
TSR22:
DJNZ R0,TSR22
JNB P1.1H,TSR32;如D0為低則復位成功,DS18B20存在
LJMP TSR42 ; 延時
TSR32:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR52
TSR42:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR72
TSR52:
MOV R0,#06BH ;200US
TSR62:
DJNZ R0,TSR62 ; 延時
TSR72:
SETB P1.1H ;拉高總線
RET
;===============================
GET_TEMPER3:
SETB P1.2H ; 定時入口
BCD3: LCALL INIT_18203
JB 00H,S223
LJMP BCD3 ; 若DS18B20不存在則返回
S223: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18203
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18203
NOP
LCALL DELAY1
CBA3:LCALL INIT_18203
JB 00H,ABC3
LJMP CBA3
ABC3:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18203
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18203
LCALL READ_182003 ;READ_1820
RET
;==============================
READ_18203:
MOV R2,#8
RE13:
CLR C
SETB P1.2H
NOP
NOP
CLR P1.2H
NOP
NOP
NOP
SETB P1.2H
MOV R3,#7
DJNZ R3,$
MOV C,P1.2H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE13
RET
;=============================
WRITE_18203:
MOV R2,#8
CLR C
WR13:
CLR P1.2H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.2H,C
MOV R3,#23
DJNZ R3,$
SETB P1.2H
NOP
DJNZ R2,WR13
SETB P1.2H
RET
;=======================================
READ_182003:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE003:
MOV R2,#8
RE013:
CLR C
SETB P1.2H
NOP
NOP
CLR P1.2H
NOP
NOP
NOP
SETB P1.2H
MOV R3,#7
DJNZ R3,$
MOV C,P1.2H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE013
MOV @R1,A
DEC R1
DJNZ R4,RE003
RET
;=======================================
INIT_18203:
SETB P1.2H
NOP
CLR P1.2H
MOV R0,#250
TSR13:
DJNZ R0,TSR13 ; 延時520us
SETB P1.2H
MOV R0,#25H ;96US-25H
TSR23:
DJNZ R0,TSR23
JNB P1.2H,TSR33;如D0為低則復位成功,DS18B20存在
LJMP TSR43 ; 延時
TSR33:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR53
TSR43:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR73
TSR53:
MOV R0,#06BH ;200US
TSR63:
DJNZ R0,TSR63 ; 延時
TSR73:
SETB P1.2H ;拉高總線
RET
;===============================
GET_TEMPER4:
SETB P1.3H ; 定時入口
BCD4: LCALL INIT_18204
JB 00H,S224
LJMP BCD4 ; 若DS18B20不存在則返回
S224: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18204
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18204
NOP
LCALL DELAY1
CBA4:LCALL INIT_18204
JB 00H,ABC4
LJMP CBA4
ABC4:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18204
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18204
LCALL READ_182004 ;READ_1820
RET
;==============================
READ_18204:
MOV R2,#8
RE14:
CLR C
SETB P1.3H
NOP
NOP
CLR P1.3H
NOP
NOP
NOP
SETB P1.3H
MOV R3,#7
DJNZ R3,$
MOV C,P1.3H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE14
RET
;=============================
WRITE_18204:
MOV R2,#8
CLR C
WR14:
CLR P1.3H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.3H,C
MOV R3,#23
DJNZ R3,$
SETB P1.3H
NOP
DJNZ R2,WR14
SETB P1.3H
RET
;=======================================
READ_182004:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE004:
MOV R2,#8
RE014:
CLR C
SETB P1.3H
NOP
NOP
CLR P1.3H
NOP
NOP
NOP
SETB P1.3H
MOV R3,#7
DJNZ R3,$
MOV C,P1.3H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE014
MOV @R1,A
DEC R1
DJNZ R4,RE004
RET
;=======================================
INIT_18204:
SETB P1.3H
NOP
CLR P1.3H
MOV R0,#250
TSR14:
DJNZ R0,TSR14 ; 延時520us
SETB P1.3H
MOV R0,#25H ;96US-25H
TSR24:
DJNZ R0,TSR24
JNB P1.3H,TSR34;如D0為低則復位成功,DS18B20存在
LJMP TSR44 ; 延時
TSR34:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR54
TSR44:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR74
TSR54:
MOV R0,#06BH ;200US
TSR64:
DJNZ R0,TSR64 ; 延時
TSR74:
SETB P1.3H ;拉高總線
RET
;===============================
GET_TEMPER5:
SETB P1.4H ; 定時入口
BCD5: LCALL INIT_18205
JB 00H,S225
LJMP BCD5 ; 若DS18B20不存在則返回
S225: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18205
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18205
NOP
LCALL DELAY1
CBA5:LCALL INIT_18205
JB 00H,ABC5
LJMP CBA5
ABC5:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18205
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18205
LCALL READ_182005 ;READ_1820
RET
;==============================
READ_18205:
MOV R2,#8
RE15:
CLR C
SETB P1.4H
NOP
NOP
CLR P1.4H
NOP
NOP
NOP
SETB P1.4H
MOV R3,#7
DJNZ R3,$
MOV C,P1.4H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE15
RET
;=============================
WRITE_18205:
MOV R2,#8
CLR C
WR15:
CLR P1.4H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.4H,C
MOV R3,#23
DJNZ R3,$
SETB P1.4H
NOP
DJNZ R2,WR15
SETB P1.4H
RET
;=======================================
READ_182005:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE005:
MOV R2,#8
RE015:
CLR C
SETB P1.4H
NOP
NOP
CLR P1.4H
NOP
NOP
NOP
SETB P1.4H
MOV R3,#7
DJNZ R3,$
MOV C,P1.4H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE015
MOV @R1,A
DEC R1
DJNZ R4,RE005
RET
;=======================================
INIT_18205:
SETB P1.4H
NOP
CLR P1.4H
MOV R0,#250
TSR15:
DJNZ R0,TSR15 ; 延時520us
SETB P1.4H
MOV R0,#25H ;96US-25H
TSR25:
DJNZ R0,TSR25
JNB P1.4H,TSR35;如D0為低則復位成功,DS18B20存在
LJMP TSR45 ; 延時
TSR35:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR55
TSR45:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR75
TSR55:
MOV R0,#06BH ;200US
TSR65:
DJNZ R0,TSR65 ; 延時
TSR75:
SETB P1.4H ;拉高總線
RET
;===============================
GET_TEMPER6:
SETB P1.5H ; 定時入口
BCD6: LCALL INIT_18206
JB 00H,S226
LJMP BCD6; 若DS18B20不存在則返回
S226: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18206
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18206
NOP
LCALL DELAY1
CBA6:LCALL INIT_18206
JB 00H,ABC6
LJMP CBA6
ABC6:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18206
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18206
LCALL READ_182006 ;READ_1820
RET
;==============================
READ_18206:
MOV R2,#8
RE16:
CLR C
SETB P1.5H
NOP
NOP
CLR P1.5H
NOP
NOP
NOP
SETB P1.5H
MOV R3,#7
DJNZ R3,$
MOV C,P1.5H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE16
RET
;=============================
WRITE_18206:
MOV R2,#8
CLR C
WR16:
CLR P1.5H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.5H,C
MOV R3,#23
DJNZ R3,$
SETB P1.5H
NOP
DJNZ R2,WR16
SETB P1.5H
RET
;=======================================
READ_182006:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE006:
MOV R2,#8
RE016:
CLR C
SETB P1.5H
NOP
NOP
CLR P1.5H
NOP
NOP
NOP
SETB P1.5H
MOV R3,#7
DJNZ R3,$
MOV C,P1.5H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE016
MOV @R1,A
DEC R1
DJNZ R4,RE006
RET
;=======================================
INIT_18206:
SETB P1.5H
NOP
CLR P1.5H
MOV R0,#250
TSR16:
DJNZ R0,TSR16 ; 延時520us
SETB P1.5H
MOV R0,#25H ;96US-25H
TSR26:
DJNZ R0,TSR26
JNB P1.5H,TSR36;如D0為低則復位成功,DS18B20存在
LJMP TSR46 ; 延時
TSR36:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR56
TSR46:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR76
TSR56:
MOV R0,#06BH ;200US
TSR66:
DJNZ R0,TSR66 ; 延時
TSR76:
SETB P1.5H ;拉高總線
RET
;===============================
GET_TEMPER7:
SETB P1.6H ; 定時入口
BCD7: LCALL INIT_18207
JB 00H,S227
LJMP BCD7; 若DS18B20不存在則返回
S227: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18207
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18207
NOP
LCALL DELAY1
CBA7:LCALL INIT_18207
JB 00H,ABC7
LJMP CBA7
ABC7:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18207
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18207
LCALL READ_182007 ;READ_1820
RET
;==============================
READ_18207:
MOV R2,#8
RE17:
CLR C
SETB P1.6H
NOP
NOP
CLR P1.6H
NOP
NOP
NOP
SETB P1.6H
MOV R3,#7
DJNZ R3,$
MOV C,P1.6H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE17
RET
;=============================
WRITE_18207:
MOV R2,#8
CLR C
WR17:
CLR P1.6H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.6H,C
MOV R3,#23
DJNZ R3,$
SETB P1.6H
NOP
DJNZ R2,WR17
SETB P1.6H
RET
;=======================================
READ_182007:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE007:
MOV R2,#8
RE017:
CLR C
SETB P1.6H
NOP
NOP
CLR P1.6H
NOP
NOP
NOP
SETB P1.6H
MOV R3,#7
DJNZ R3,$
MOV C,P1.6H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE017
MOV @R1,A
DEC R1
DJNZ R4,RE007
RET
;=======================================
INIT_18207:
SETB P1.6H
NOP
CLR P1.6H
MOV R0,#250
TSR17:
DJNZ R0,TSR17 ; 延時520us
SETB P1.6H
MOV R0,#25H ;96US-25H
TSR27:
DJNZ R0,TSR27
JNB P1.6H,TSR37;如D0為低則復位成功,DS18B20存在
LJMP TSR47; 延時
TSR37:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR57
TSR47:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR77
TSR57:
MOV R0,#06BH ;200US
TSR67:
DJNZ R0,TSR67; 延時
TSR77:
SETB P1.6H ;拉高總線
RET
;===============================
GET_TEMPER8:
SETB P1.7H ; 定時入口
BCD8: LCALL INIT_18208
JB 00H,S228
LJMP BCD8; 若DS18B20不存在則返回
S228: LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配------0CC命令
LCALL WRITE_18208
MOV A,#44H ; 發出溫度轉換命令
LCALL WRITE_18208
NOP
LCALL DELAY1
CBA8:LCALL INIT_18208
JB 00H,ABC8
LJMP CBA8
ABC8:LCALL DELAY1
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_18208
MOV A,#0BEH ; 發出讀溫度命令
LCALL WRITE_18208
LCALL READ_182008 ;READ_1820
RET
;==============================
READ_18208:
MOV R2,#8
RE18:
CLR C
SETB P1.7H
NOP
NOP
CLR P1.7H
NOP
NOP
NOP
SETB P1.7H
MOV R3,#7
DJNZ R3,$
MOV C,P1.7H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE18
RET
;=============================
WRITE_18208:
MOV R2,#8
CLR C
WR18:
CLR P1.7H
MOV R3,#6
DJNZ R3,$
RRC A
MOV P1.7H,C
MOV R3,#23
DJNZ R3,$
SETB P1.7H
NOP
DJNZ R2,WR18
SETB P1.7H
RET
;=======================================
READ_182008:
MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#31H ; 低位存入30H(TEMPER_L),高位存入31H(TEMPER_H)
RE008:
MOV R2,#8
RE018:
CLR C
SETB P1.7H
NOP
NOP
CLR P1.7H
NOP
NOP
NOP
SETB P1.7H
MOV R3,#7
DJNZ R3,$
MOV C,P1.7H
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE018
MOV @R1,A
DEC R1
DJNZ R4,RE008
RET
;=======================================
INIT_18208:
SETB P1.7H
NOP
CLR P1.7H
MOV R0,#250
TSR18:
DJNZ R0,TSR18 ; 延時520us
SETB P1.7H
MOV R0,#25H ;96US-25H
TSR28:
DJNZ R0,TSR28
JNB P1.7H,TSR38;如D0為低則復位成功,DS18B20存在
LJMP TSR48; 延時
TSR38:
SETB 00H ; 置標志位,表示DS1820存在
LJMP TSR58
TSR48:
CLR 00H ; 清標志位,表示DS1820不存在
LJMP TSR78
TSR58:
MOV R0,#06BH ;200US
TSR68:
DJNZ R0,TSR68; 延時
TSR78:
SETB P1.7H ;拉高總線
RET
;===============================
;======================================
DELAY1:MOV R7,#20H
DJNZ R7,$
RET
;====================================
TEMPRRO:MOV 33H,#00H;初始化0
MOV A,30H
ANL A,#0FH
SWAP A
MOV 33H,A
MOV A,31H
ANL A,#0F0H
SWAP A
ORL 33H,A;重新組合成的帶符號數據(整數部分)
MOV A,33H
ANL A,#80H;判斷符號
JZ TEMPP
MOV A,33H
CPL A
;ADD A,#01H
SJMP TEMPP1
TEMPP:MOV A,33H;正數處理程序
LCALL HBCD
MOV A,31H
ANL A,#0FH
MOV DPTR,#TEMPTAB;小數查表
MOVC A,@A+DPTR
MOV 36H,A
CLR P3.7;表示正數
SJMP EXIT
TEMPP1:LCALL HBCD;負數處理程序
MOV A,31H
ANL A,#0FH
ORL A,#0F0H
CPL A
ADD A,#01H
MOV DPTR,#TEMPTAB
MOVC A,@A+DPTR;小數查表
MOV 36H,A
SETB P3.7;表示負數
EXIT:RET
HBCD: MOV B,#100 ;分離出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ;余數繼續分離十位和個位
XCH A,B
DIV AB
SWAP A
ORL A,B ;將十位和個位拼裝成BCD碼
MOV 34H,R3
MOV 35H,A
RET
TEMPTAB:DB 00H,01H,01H,02H,03H,03H,04H,04H
DB 05H,06H,06H,07H,08H,08H,09H,09H;0~16*0.0652
;==================================================
CBCD:;MOV R2,#04H;5個待分離的BCD
CL:MOV A,@R1 ;分離后將占10個單元
MOV B,A
ANL A,#0F0H
SWAP A
MOV 4CH,A
MOV A,B
ANL A,#0FH
MOV 4DH,A
MOV @R0,4CH
INC R0
MOV @R0,4DH
INC R0
INC R1
DJNZ R2,CL
RET
;===================================================
DISPLAY:MOV R0,#38H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示緩沖區首地址
MOV R2,#04
DISP_LOOP:MOV A,@R0
LCALL DISP
INC R0
DJNZ R2,DISP_LOOP
CLR P0.2
NOP
NOP
SETB P0.2 ;上升沿將數據送到輸出鎖存器
NOP
NOP
NOP
CLR P0.2
RET
DISP:MOV R4,#08H;移位寄存器接收數據
WR_LOOP: RLC A
MOV P0.1,C
SETB P0.0 ;上升沿發生移位
NOP
NOP
CLR P0.0
DJNZ R4,WR_LOOP
RET
;=============================
PRO: MOV R2,#03H;N個待分離的BCD
MOV R0,#37H;分離后BCD首地址
MOV R1,#34H;待分離BCD首地址
LCALL CBCD;分離壓縮的BCD碼
MOV 3BH,3CH;小數處理
MOV R0,#38H;顯示數據首地址
MOV R1,#38H;顯示緩沖區首地址
MOV R2,#04;數據個數
RES_LOOP:MOV A,@R0
LCALL RES
MOV @R1,A
INC R0
INC R1
DJNZ R2,RES_LOOP
ORL 3AH,#80H;小數點
LCALL DISPLAY
LCALL DELAYS
LCALL DELAYS
LCALL DELAYS
LCALL DELAYS
LCALL DELAYS
LCALL DELAYS
RET
;==============================
RES:MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;======================================
DELAYS:MOV R5,#0FFH
LOOP2:MOV R4,#0FFH
LOOP1:NOP
NOP
DJNZ R4,LOOP1
DJNZ R5,LOOP2
RET
END
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩在线视频一区
|
久久久久亚洲精品
|
日韩在线不卡视频
|
黄网站涩免费蜜桃网站
|
久久国产精品99久久久大便
|
九七午夜剧场福利写真
|
欧美一级片在线看
|
欧美精品欧美精品系列
|
新超碰97
|
亚洲三区在线
|
亚洲h视频
|
中文字幕韩在线第一页
|
亚洲精品在线视频
|
国产精品区二区三区日本
|
亚洲综合色丁香婷婷六月图片
|
久久精品中文
|
国产日韩精品一区
|
日日干干夜夜
|
亚洲国产精品一区二区久久
|
久久久九九九九
|
亚洲欧美中文日韩在线v日本
|
欧美v日韩v
|
日韩国产欧美在线观看
|
一级无毛片
|
欧美福利在线
|
97国产精品视频人人做人人爱
|
国产伦一区二区三区视频
|
欧美韩一区二区
|
欧美日韩中文字幕
|
亚洲成人播放器
|
国产男女视频
|
久久久久亚洲精品
|
青青草网站在线观看
|
精精精精xxxx免费视频
|
国产精品黄视频
|
东京av男人的天堂
|
亚洲a人
|
精品二区视频
|
日韩av最新网址
|
亚洲精品一区二区三区中文字幕
|
欧美精选一区二区
|