DS18B20温度控制数码管显示(汇编非常详细)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
; DS18B20温度控制数码管显示(汇编非常详细)
*
;* 1、P1.6= → 进入设定温度报警值TL 状态:
*
;* L--20
*
;* 2、P1.6 → 进入设定温度报警值TH 状态:
*
;* H--28
*
;* 3、P1.6 → 返回
*
;* 4、设定过程:P1.4 →加键(UP),P1.5 →减键(DOWN),可快速调。* ;*
**
TIMER_L DATA 23H
TIMER_H DATA 24H
TIMER_COUN DATA 25H
TEMPL DATA 26H
TEMPH DATA 27H
TEMP_TH DATA 28H
TEMP_TL DATA 29H
TEMPHC DATA 2AH
TEMPLC DATA 2BH
TEMP_ZH DATA 2CH
BEEP EQU P3.7
DATA_LINE EQU P3.3
RELAY EQU P1.3
FLAG1 EQU 20H.0
FLAG2 EQU 20H.1
;-------------------------------------------------
K1 EQU P1.4
K2 EQU P1.5
K3 EQU P1.6
K4 EQU P1.7
;=================================================
ORG 0000H
JMP MAIN
ORG 000BH
AJMP INT_T0
;--------------------------------------------------
MAIN: MOV SP,#30H
MOV TMOD,#01H ;T0,方式1
MOV TIMER_L,#00H ;50ms定时值
MOV TIMER_H,#4CH
MOV TIMER_COUN,#00H ;中断计数
MOV IE,#82H ;EA=1,ET0=1
LCALL READ_E2
;LCALL RE_18B20
MOV 20H,#00H
SETB BEEP
SETB RELAY
MOV 7FH,#0AH ;熄灭符
CALL RESET ;复位与检测DS18B20
JNB FLAG1,MAIN1 ;FLAG1=0,DS18B20不存在
JMP START
MAIN1: CALL RESET
JB FLAG1,START
LCALL BEEP_BL ;DS18B20错误,报警
JMP MAIN1
START:
MOV A,#0CCH ; 跳过ROM匹配
CALL WRITE
MOV A,#044H ; 发出温度转换命令
CALL WRITE
CALL RESET
MOV A,#0CCH ; 跳过ROM匹配
CALL WRITE
MOV A,#0BEH ; 发出读温度命令
CALL WRITE
CALL READ ;读温度数据
CALL CONVTEMP
CALL DISPBCD
CALL DISP1
CALL SCANKEY
LCALL TEMP_COMP
JMP MAIN1
;=====================================================
;DS18B20 复位与检测子程序
;FLAG1=1 OK, FLAG1=0 ERROR
;======================================================
RESET:
SETB DA TA_LINE
NOP
CLR DATA_LINE
MOV R0,#64H ;主机发出延时600微秒的复位低脉冲
MOV R1,#03H
RESET1: DJNZ R0,$
MOV R0,#64H
DJNZ R1,RESET1
SETB DA TA_LINE ;然后拉高数据线
NOP
MOV R0,#25H
RESET2: JNB DA TA_LINE,RESET3 ;等待DS18B20回应
DJNZ R0,RESET2
JMP RESET4 ; 延时
RESET3: SETB FLAG1 ; 置标志位,表示DS1820存在
JMP RESET5
RESET4: CLR FLAG1 ; 清标志位,表示DS1820不存在
JMP RESET6
RESET5: MOV R0,#064H
DJNZ R0,$ ; 时序要求延时一段时间
RESET6: SETB DATA_LINE
RET
;===========================================================
;
;=========================================================== WRITE: MOV R2,#8 ;一共8位数据
CLR CY
WR1:
CLR DATA_LINE ;开始写入DS18B20总线要处于复位(低)状态
MOV R3,#09
DJNZ R3,$ ;总线复位保持18微妙以上
RRC A ;把一个字节DA TA 分成8个BIT环移给C
MOV DATA_LINE,C ;写入一个BIT
MOV R3,#23
DJNZ R3,$ ;等待46微妙
SETB DA TA_LINE ;重新释放总线