欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
溫度箱的自動設計系統 單片機匯編程序
[打印本頁]
作者:
青123456
時間:
2017-5-13 11:20
標題:
溫度箱的自動設計系統 單片機匯編程序
仿真.png
(17.63 KB, 下載次數: 73)
下載附件
2017-5-13 11:20 上傳
單片機匯編程序:
TEMPER_L EQU 31H ;用于保存讀出溫度低字節
TEMPER_H EQU 30H ;用于保存讀出溫度高字節
TEMPER_SET EQU 32H ;用于保存設定的預期溫度
FLAG EQU 33H ;是否檢測到DS18B20標志位
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R0,#20 ;系統默認預期溫度為20℃
START:
CLR P2.6 ;點亮“實時溫度”指示燈
SETB P2.5 ;熄滅“設定溫度”指示燈
JNB P2.2,SELSUB ;是進入溫度設定
LCALL GET_TEMPER ;調用溫度獲取子程序
LCALL COMPARE ;調用溫度比較子程序
LCALL DISPLAY ;調用顯示子程序
LCALL KEY ;調用顯示切換子程序
LJMP START
SELSUB:
MOV A,R0
MOV B,#10
DIV AB
MOV R1,A ;溫度十位存R1
MOV R2,B ;溫度個位存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 ;延時顯示
JNB P2.3,INC1 ;按鍵是否松開,松開則程序往下執行
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 ;按鍵是否松開,松開則程序往下執行
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 ;檢測到DS18B20跳到TSS2
RET
TSS2:
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820 ;寫DS18B20子程序
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_1820
LCALL DISPLAY ;用顯示溫度來等待AD轉換結束
LCALL SET_1820
MOV A,#0CCH ;跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;發出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820 ;讀DS18B20的溫度數據
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 ;讀出的溫度轉化問攝氏溫度存R7中
MOV B,#10
DIV AB
MOV R1,A ;讀出的溫度十位存R1
MOV R2,B ;讀出的溫度個位存R2
RET
SET_1820: ;DS18B20復位初始化子程序
SETB P1.2
NOP
CLR P1.2
MOV R3,#3 ;主機發出延時537微秒的復位低脈沖
TSR1:
MOV R4,#107
DJNZ R4,$
DJNZ R3,TSR1
SETB P1.2 ;然后拉高數據線
NOP
NOP
NOP
MOV R4,#25H
TSR2:
JNB P1.2,TSR3 ;等待DS18B20回應
DJNZ R4,TSR2
LJMP TSR4 ;延時
TSR3:
SETB FLAG ;置標志位,表示DS18B20存在
LJMP TSR5
TSR4:
CLR FLAG ;清標志位,表示DS18B20不存在
LJMP TSR7
TSR5:
MOV R4,#117
TSR6:
DJNZ R4,TSR6 ;時序要求延時一段時間
TSR7:
SETB P1.2
RET
WRITE_1820:
MOV R3,#8 ;一共8位數據
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 ;設定溫度與實時溫度不等則跳COMP
SETB P1.0 ;關加熱器
SETB P1.1 ;關制冷器
RET
COMP:
MOV A,R7 ;實時溫度存入A
MOV B,R0 ;設定溫度存入B
DIV AB ;A除以B,商給A
CJNE A,#0H,COMP1 ;若A不等于0,即實時溫度高,跳轉
SETB P1.1 ;關制冷器
CLR P1.0 ;開加熱器
LJMP EXIT
COMP1:
SETB P1.0 ;關加熱器
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 ;動態掃描,顯示十位
LCALL DELAY ;延時約12毫秒
MOV A,R2
MOVC A,@A+DPTR
SETB P2.0
CLR P2.1
MOV P0,A ;動態掃描,顯示個位
LCALL DELAY
SETB P2.0
SETB P2.1 ;關顯示
RET
DAT:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
;“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“滅”
DELAY1: ;延時子程序,延時并顯示
MOV 36H,#08H
LOOP0:
LCALL DISPLAY
DJNZ 36H,LOOP0
RET
DELAY: ;延時子程序,延時約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 ;延時去抖動
JNB P2.7,KEY2
RET
KEY2:
LCALL INT
RET
INT:
MOV A,R0 ;顯示設定溫度
MOV B,#10
DIV AB
MOV R1,A
MOV R2,B
MOV R6,#50
LCALL DELAY1
DJNZ R6,$
RET
END
復制代碼
作者:
青123456
時間:
2017-5-13 11:45
匯編程序
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1