DS18B20温度控制数码管显示(汇编非常详细)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ;重新释放总线

相关文档
最新文档