標(biāo)題:
溫度箱的自動(dòng)設(shè)計(jì)系統(tǒng) 單片機(jī)匯編程序
[打印本頁]
作者:
青123456
時(shí)間:
2017-5-13 11:20
標(biāo)題:
溫度箱的自動(dòng)設(shè)計(jì)系統(tǒng) 單片機(jī)匯編程序
仿真.png
(17.63 KB, 下載次數(shù): 73)
下載附件
2017-5-13 11:20 上傳
單片機(jī)匯編程序:
TEMPER_L EQU 31H ;用于保存讀出溫度低字節(jié)
TEMPER_H EQU 30H ;用于保存讀出溫度高字節(jié)
TEMPER_SET EQU 32H ;用于保存設(shè)定的預(yù)期溫度
FLAG EQU 33H ;是否檢測(cè)到DS18B20標(biāo)志位
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R0,#20 ;系統(tǒng)默認(rèn)預(yù)期溫度為20℃
START:
CLR P2.6 ;點(diǎn)亮“實(shí)時(shí)溫度”指示燈
SETB P2.5 ;熄滅“設(shè)定溫度”指示燈
JNB P2.2,SELSUB ;是進(jìn)入溫度設(shè)定
LCALL GET_TEMPER ;調(diào)用溫度獲取子程序
LCALL COMPARE ;調(diào)用溫度比較子程序
LCALL DISPLAY ;調(diào)用顯示子程序
LCALL KEY ;調(diào)用顯示切換子程序
LJMP START
SELSUB:
MOV A,R0
MOV B,#10
DIV AB
MOV R1,A ;溫度十位存R1
MOV R2,B ;溫度個(gè)位存R2
LCALL DISPLAY ;顯示溫度
JNB P2.3,INC0
JNB P2.4,DEC0
JB P2.2,BACK
LJMP SELSUB
INC0: ;溫度加1℃
MOV A,R1
CJNE A,#63H,ADD0 ;溫度是否為99℃,不是則跳到ADD0
MOV R1,#00H
INC1:
LCALL DELAY1 ;延時(shí)顯示
JNB P2.3,INC1 ;按鍵是否松開,松開則程序往下執(zhí)行
LJMP SELSUB
ADD0:
INC R0
LCALL DELAY1
LJMP SELSUB
DEC0: ;溫度減1℃
MOV A,R1
JZ SETR1 ;溫度是0℃則跳到SETR1
DEC R0
DEC1:
LCALL DELAY1
JNB P2.4,DEC1 ;按鍵是否松開,松開則程序往下執(zhí)行
LJMP SELSUB
SETR1:
MOV R1,#63H
LCALL DELAY1
LJMP SELSUB
BACK:
LJMP START
GET_TEMPER:
SETB P1.2
LCALL SET_1820 ;DS18B20初始化
JB FLAG,TSS2 ;檢測(cè)到DS18B20跳到TSS2
RET
TSS2:
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820 ;寫DS18B20子程序
MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
LCALL WRITE_1820
LCALL DISPLAY ;用顯示溫度來等待AD轉(zhuǎn)換結(jié)束
LCALL SET_1820
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820 ;讀DS18B20的溫度數(shù)據(jù)
MOV A,TEMPER_L
MOV R3,#4
L1:
SETB C
RRC A
DJNZ R3,L1
MOV TEMPER_L,A
MOV A,TEMPER_H
MOV R3,#4
L2:
SETB C
RLC A
DJNZ R3,L2
ANL A,TEMPER_L
MOV R7,A ;讀出的溫度轉(zhuǎn)化問攝氏溫度存R7中
MOV B,#10
DIV AB
MOV R1,A ;讀出的溫度十位存R1
MOV R2,B ;讀出的溫度個(gè)位存R2
RET
SET_1820: ;DS18B20復(fù)位初始化子程序
SETB P1.2
NOP
CLR P1.2
MOV R3,#3 ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖
TSR1:
MOV R4,#107
DJNZ R4,$
DJNZ R3,TSR1
SETB P1.2 ;然后拉高數(shù)據(jù)線
NOP
NOP
NOP
MOV R4,#25H
TSR2:
JNB P1.2,TSR3 ;等待DS18B20回應(yīng)
DJNZ R4,TSR2
LJMP TSR4 ;延時(shí)
TSR3:
SETB FLAG ;置標(biāo)志位,表示DS18B20存在
LJMP TSR5
TSR4:
CLR FLAG ;清標(biāo)志位,表示DS18B20不存在
LJMP TSR7
TSR5:
MOV R4,#117
TSR6:
DJNZ R4,TSR6 ;時(shí)序要求延時(shí)一段時(shí)間
TSR7:
SETB P1.2
RET
WRITE_1820:
MOV R3,#8 ;一共8位數(shù)據(jù)
CLR C
WR1:
CLR P1.2
MOV R4,#6
DJNZ R4,$
RRC A
MOV P1.2,C
MOV R4,#23
DJNZ R4,$
SETB P1.2
NOP
DJNZ R3,WR1
SETB P1.2
RET
READ_1820: ;將溫度高位和地位從DS18B20中讀出
MOV R4,#8
RE01:
CLR C
SETB P1.2
NOP
NOP
CLR P1.2
NOP
NOP
NOP
SETB P1.2
MOV R6,#4
DJNZ R6,$
MOV C,P1.2
RRC A
MOV R6,#30
DJNZ R6,$
DJNZ R4,RE01
MOV TEMPER_L,A ;地位存入31H
MOV R4,#8
RE02:
CLR C
SETB P1.2
NOP
NOP
CLR P1.2
NOP
NOP
NOP
SETB P1.2
MOV R6,#4
DJNZ R6,$
MOV C,P1.2
RRC A
MOV R6,#30
DJNZ R6,$
DJNZ R4,RE02
MOV TEMPER_H,A ;高位存入32H
RET
COMPARE: ;比較溫度子程序
MOV TEMPER_SET,R0
MOV A,R7
CJNE A,TEMPER_SET,COMP ;設(shè)定溫度與實(shí)時(shí)溫度不等則跳COMP
SETB P1.0 ;關(guān)加熱器
SETB P1.1 ;關(guān)制冷器
RET
COMP:
MOV A,R7 ;實(shí)時(shí)溫度存入A
MOV B,R0 ;設(shè)定溫度存入B
DIV AB ;A除以B,商給A
CJNE A,#0H,COMP1 ;若A不等于0,即實(shí)時(shí)溫度高,跳轉(zhuǎn)
SETB P1.1 ;關(guān)制冷器
CLR P1.0 ;開加熱器
LJMP EXIT
COMP1:
SETB P1.0 ;關(guān)加熱器
CLR P1.1 ;開制冷器
EXIT:
RET
DISPLAY: ;顯示子程序
MOV DPTR,#DAT
MOV A,R1
MOVC A,@A+DPTR
CLR P2.0
SETB P2.1
MOV P0,A ;動(dòng)態(tài)掃描,顯示十位
LCALL DELAY ;延時(shí)約12毫秒
MOV A,R2
MOVC A,@A+DPTR
SETB P2.0
CLR P2.1
MOV P0,A ;動(dòng)態(tài)掃描,顯示個(gè)位
LCALL DELAY
SETB P2.0
SETB P2.1 ;關(guān)顯示
RET
DAT:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
;“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“滅”
DELAY1: ;延時(shí)子程序,延時(shí)并顯示
MOV 36H,#08H
LOOP0:
LCALL DISPLAY
DJNZ 36H,LOOP0
RET
DELAY: ;延時(shí)子程序,延時(shí)約12ms
MOV 34H,#24H
LOOP:
MOV 35H,#0AFH
LOOP1:
DJNZ 35H,LOOP1
DJNZ 34H,LOOP
RET
KEY: ;顯示切換子程序
JNB P2.7,KEY1
RET
KEY1:
LCALL DELAY ;延時(shí)去抖動(dòng)
JNB P2.7,KEY2
RET
KEY2:
LCALL INT
RET
INT:
MOV A,R0 ;顯示設(shè)定溫度
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R6,#50
LCALL DELAY1
DJNZ R6,$
RET
END
復(fù)制代碼
作者:
青123456
時(shí)間:
2017-5-13 11:45
匯編程序
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1