当前位置:文档之家› 恒温加热带设定温度

恒温加热带设定温度

;=================================

DQ EQU P3.7 ;18B20 接口

NO_18 BIT 20H ;20H.0 存在标志位

D_BUF EQU 30H ;30H ~ 37H 显示空间

TEMP EQU 38H ;38H ~ 39H 温度数据

S_BOTT EQU 70H ;栈底位置

;=================================

ORG 0000H

RESET:

MOV 66H,#0

MOV 67H,#0

MOV 68H,#0

START:

MOV SP, #S_BOTT

CALL SETTING

CALL GET_T

CALL T_PROC

CALL HOTTER

CALL DISPLAY

JMP START

;=================================

SETTING:

JB 68H,JIANCE ;不设置出氧温度,机器默认出氧温度为25℃

MOV 66H,#5

MOV 67H,#2

JIANCE:

JNB P1.0,CP1

RET

CP1:

ACALL DELAY0

JNB P1.0,CP2;P1.6=0顺序执行

RET

CP2:

JNB P1.0,$ ;P2.6松开,顺序执行

CLR 68H

MOV R1,#19 ;用户只能在20到30℃之间 ,控出氧温度。该装置没有制冷。

;--------------------------

;设置加热温度

;--------------------------

SETTEM:

JIA1: ;检测+按键

JB P1.1,JIAN1

ACALL DELAY0

JB P1.1,JIAN1;P2.3=0顺序执行 JNB P1.1,$;+按键由按下到松开,定时+1

CJNE R1,#30,KAK1

MOV R1,#19

KAK1:

SETB P3.5

SETB P3.6

SETB 68H

INC R1

JIAN1:

JB P1.2,B2

ACALL DELAY0

JB P1.2,B2

JNB P1.2,$

CJNE R1,#20,KAK2

MOV R1,#31

KAK2:

SETB P3.5

SETB P3.6

SETB 68H

DEC R1

B2:

MOV A,R1

MOV B,#10

DIV AB

MOV 66H,B

MOV 67H,A

MOV A,66H

ACALL SEG7

MOV P0,A

SETB P2.5

ACALL DELAY

CLR P2.5

MOV A,67H

ACALL SEG7

MOV P0,A

SETB P2.4

ACALL DELAY

CLR P2.4

JB P1.0,SETTEM ;再次按下则跳出定时程序,否则继续

AAA:

JNB P1.0,$

RET

;----------------------------

SEG7: MOV DPTR,#TAB1

MOVC A,@A+DPTR

RET

;-------------------------

;段码表

;--------------------------

TAB1:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;段码表,P0.0-P0.7对应A-DP

;------------------------

;屏显间隔

;-----------------------

DELAY: ;延时2MS

MOV 77H,#20

D1: MOV 78H,#100

DJNZ 78H,$

DJNZ 77H,D1

RET

;------------------------

;防抖动

;-------------------------

DELAY0: ;延时10MS去抖动

MOV 7AH,#50

D0: MOV 7BH,#200

DJNZ 7BH,$

DJNZ 7AH,D1

RET

;-----------------------

;=================================

HOTTER:

JNB F0,ZHENG

CLR P3.5

CLR P3.6

RET

ZHENG:

MOV A,42H

CLR CY

SUBB A,67H

JZ PAN

JNB CY,CLOSE

AJMP HOT

PAN:

MOV A,43H

CLR CY

SUBB A,66h JZ CLOSE

JNB CY,CLOSE

AJMP HOT1

CLOSE:

SETB P3.5

SETB P3.6

RET

HOT:

MOV A,69H

CLR C

SUBB A,#15

JNB CY,HOT1

CLR P3.5

CLR P3.6

RET

HOT1:

SETB P3.6

CLR P3.5

RET

;=================================

GET_T:

CALL INIT_18B20

JB NO_18, $ + 25

MOV A, #0CCH

CALL W_18B20

MOV A, #44H

CALL W_18B20

CALL DISPLAY

CALL INIT_18B20

MOV A, #0CCH

CALL W_18B20

MOV A, #0BEH

CALL W_18B20

CALL R_18B20

RET

;=================================

INIT_18B20: ;初始化

CLR DQ ;复位

MOV R3, #20 ;540us

DJNZ R3, $

DJNZ R3, $

SETB DQ

MOV R3, #30

DJNZ R3, $ MOV C, DQ ;读状态

MOV NO_18, C

MOV R3, #150

DJNZ R3, $ ;300us

RET

;=================================

W_18B20:

MOV R2, #8 ;写入8位数

CLR DQ

MOV R3, #6

DJNZ R3, $

RRC A

MOV DQ, C

MOV R3, #23

DJNZ R3, $

SETB DQ

DJNZ R2, $ - 15

RET

;=================================

R_18B20: ;读出温度

MOV R0, #TEMP

MOV R4, #2 ;读出两字节

MOV R2, #8 ;读出8位数

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3, #9

DJNZ R3, $

MOV C, DQ

RRC A

MOV R3, #23

DJNZ R3, $

DJNZ R2, $ - 18;读出8位数

MOV @R0, A ;先存放到 TEMP

INC R0 ;后读出存 TEMP+1

DJNZ R4, $ - 24

RET

;=================================

T_PROC:

JNB NO_18, $ + 22

;-------------------下面是显示Err

MOV 30H, #26 MOV 31H, #14 ;这些地址,如果是高128的地址,

MOV 32H, #32 ;就应该使用间接寻址。

MOV 33H, #32 ;

MOV 34H, #31 ;现在,就用直接寻址吧。

MOV 35H, #32

RET

;-------------------下面是数据处理

MOV 30H, #0

MOV 31H, #0

MOV 32H, #0

CLR F0

MOV A, TEMP + 1

JNB ACC.7, $ + 16

;-------------------下面是求补

CLR C

CLR A

SUBB A, TEMP

MOV TEMP, A

CLR A

SUBB A, TEMP + 1

MOV TEMP + 1, A

SETB F0 ;负号标志

;-------------------下面处理整数

MOV A, TEMP

SWAP A

ANL A, #15

MOV B, A

MOV A, TEMP + 1

ANL A, #15

SWAP A

ADD A, B

MOV B, #100

DIV AB

MOV 31H, A ;百位

MOV A, #10

MOV 69H,B ;温度整数位

XCH A, B

DIV AB

MOV 43H,B

MOV 32H, A ;十位

MOV 42H,A

XCH A, B

ADD A, #16

MOV 33H, A

相关主题