完整代碼下載:
程序.rar
(15.65 KB, 下載次數(shù): 81)
2015-5-24 10:54 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
單片機匯編源程序:
- ;溫度上下限自由設(shè)定,P3.5設(shè)置溫度上限,P3.6設(shè)置溫度下限,P3.7為溫度增加鍵,每按一次溫度加一度。
- ;當按P3.5時,數(shù)碼管顯示H00;當按P3.6時,數(shù)碼管顯示L00,設(shè)置溫度范圍為整數(shù),不含小數(shù)。
- ORG 0000H
- TEMPER_L EQU 29H
- TEMPER_H EQU 28H
- FLAG1 EQU 38H;是否檢測到DS18B20標志位
- bwei equ 22h
- A_BIT EQU 20H ;數(shù)碼管個位數(shù)存放內(nèi)存位置
- B_BIT EQU 21H ;數(shù)碼管十位數(shù)存放內(nèi)存位置
- XS EQU 30H
- MOV A,#00H
- MOV P2,A
- MOV R5,#01H
- MAIN:LCALL GET_TEMPER;調(diào)用讀溫度子程序
- MOV A,29H
- MOV B,A
- CLR C
- RLC A
- CLR C
- RLC A
- CLR C
- RLC A
- CLR C
- RLC A
- SWAP A
- MOV 31H,A
- MOV A,B
- MOV C,40H;將28H中的最低位移入C
- RRC A
- MOV C,41H
- RRC A
- MOV C,42H
- RRC A
- MOV C,43H
- RRC A
- MOV 29H,A
- LCALL DISPLAY;調(diào)用數(shù)碼管顯示子程序
- AJMP MAIN; 這是DS18B20復位初始化子程序
- INIT_1820:SETB P1.0
- NOP
- CLR P1.0;主機發(fā)出延時537微秒的復位低脈沖
- MOV R1,#3
- TSR1:MOV R0,#107
- DJNZ R0,$
- DJNZ R1,TSR1
- SETB P1.0;然后拉高數(shù)據(jù)線
- NOP
- NOP
- NOP
- MOV R0,#25H
- TSR2:JNB P1.0,TSR3;等待DS18B20回應
- DJNZ R0,TSR2
- LJMP TSR4 ; 延時
- TSR3:SETB FLAG1 ; 置標志位,表示DS1820存在
- LJMP TSR5
- TSR4:CLR FLAG1 ; 清標志位,表示DS1820不存在
- LJMP TSR7
- TSR5:MOV R0,#117
- TSR6:DJNZ R0,TSR6 ; 時序要求延時一段時間
- TSR7:SETB P1.0
- RET; 讀出轉(zhuǎn)換后的溫度值
- GET_TEMPER:SETB P1.0
- LCALL INIT_1820;先復位DS18B20
- JB FLAG1,TSS2
- RET ; 判斷DS1820是否存在?若DS18B20不存在則返回
- TSS2:MOV A,#0CCH ; 跳過ROM匹配
- LCALL WRITE_1820
- MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
- LCALL WRITE_1820;這里通過調(diào)用顯示子程序?qū)崿F(xiàn)延時一段時間,等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
- LCALL DISPLAY
- LCALL INIT_1820;準備讀溫度前先復位
- MOV A,#0CCH ; 跳過ROM匹配
- LCALL WRITE_1820
- MOV A,#0BEH ; 發(fā)出讀溫度命令
- LCALL WRITE_1820
- LCALL READ_18200; 將讀出的溫度數(shù)據(jù)保存到35H/36H
- RET;寫DS18B20的子程序(有具體的時序要求)
- WRITE_1820:MOV R2,#8;一共8位數(shù)據(jù)
- CLR C
- WR1:CLR P1.0
- MOV R3,#6
- DJNZ R3,$
- RRC A
- MOV P1.0,C
- MOV R3,#23
- DJNZ R3,$
- SETB P1.0
- NOP
- DJNZ R2,WR1
- RET; 讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)
- READ_18200:MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
- MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
- RE00:MOV R2,#8;數(shù)據(jù)一共有8位
- RE01:CLR C
- SETB P1.0
- NOP
- NOP
- CLR P1.0
- NOP
- NOP
- NOP
- SETB P1.0
- MOV R3,#9
- RE10: DJNZ R3,RE10
- MOV C,P1.0
- MOV R3,#23
- RE20: DJNZ R3,RE20
- RRC A
- DJNZ R2,RE01
- MOV @R1,A
- DEC R1
- DJNZ R4,RE00
- RET
- DISPLAY:
- MOV A,29H;將29H中的十六進制數(shù)轉(zhuǎn)換成10進制
- MOV R3,A
- CLR C
- SUBB A,50H;溫度上限
- JNB CY, T3
- SETB P1.2;風扇繼電器關(guān)
- SETB P2.5;報警關(guān)
- MOV A,R3
- CLR C
- SUBB A,60H;溫度下限
- JB CY, T2
- SETB P1.1;加熱繼電器關(guān)
- SETB P2.5;報警關(guān)
- SJMP XIANSHI
- T2:
- CLR P1.1;加熱繼電器開
- CLR P2.5;報警開
- LJMP XIANSHI
- T3:
- CLR P1.2;風扇繼電器開
- CLR P2.5;報警開
- XIANSHI:
- LCALL SETT
- DISP:
- MOV A,R3
- MOV B,#100 ;10進制/10=10進制
- DIV AB
- mov bwei,a
- mov a,b
- mov b,#10
- div ab
- MOV B_BIT,A ;十位在A
- MOV A_BIT,B ;個位在B
- MOV R0,#4
- CLR C;多加的
- DPL1: MOV R1,#250 ;顯示1000次
- DPLOP:
- MOV DPTR,#NUMTAB
- MOV A,bwei
- MOVC A,@A+DPTR ;查通道的7段代碼
- MOV P0,A ;送出十位的7段代碼
- CLR P2.3 ;開通道顯示
- ACALL D1MS ;顯示1MS
- SETB P2.3
- MOV DPTR,#NUMTAB1
- MOV A,A_BIT ;取個位數(shù)
- MOVC A,@A+DPTR ;查個位數(shù)的7段代碼
- MOV P0,A ;送出個位的7段代碼
- CLR P2.1 ;開個位顯示
- ACALL D1MS ;顯示1MS
- SETB P2.1
- MOV DPTR,#NUMTAB
- MOV A,B_BIT ;取十位數(shù)
- MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
- MOV P0,A ;送出十位的7段代碼
- CLR P2.2 ;開十位顯示
- ACALL D1MS ;顯示1MS
- SETB P2.2
- JC XSW;多加的
- MOV A,31H
- MOV B,#160
- DIV AB
- MOV XS,B
- XSW:MOV A,XS
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.0
- ACALL D1MS
- SETB P2.0
- SETB C;多加的
- DJNZ R1,DPLOP ;250次沒完循環(huán)
- DJNZ R0,DPL1 ;4個250次沒完循環(huán)
- RET;1MS延時(按12MHZ算)
- D1MS: MOV R7,#80
- DJNZ R7,$
- RET
- D10MS: MOV R6,#20
- LOOP: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,LOOP
- RET
- D5MS: MOV R6,#10
- LOOP1: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,LOOP1
- RET
- NUMTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,7FH,7FH,7FH,7FH,7FH,7FH
- NUMTAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
- SETT:
- TH: JNB P3.6,GS
- JNB P3.5,GSU
- LJMP DISP
- GS: LCALL D10MS
- JB P3.6,TH
- SJMP BIAN3
- GSU: LCALL D10MS
- JB P3.5,TH
- SJMP BIAN
- BIAN3: MOV R1,#00
- BIAN1: MOV P0,#38H
- CLR P2.2
- SETB P2.0
- SETB P2.1
- LCALL D5MS
- MOV A,R1
- MOV B,#10
- DIV AB
- MOV DPTR,#NUMTAB
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.1
- SETB P2.0
- SETB P2.2
- LCALL D5MS
- MOV A,B
- MOV DPTR,#NUMTAB
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.0
- SETB P2.1
- SETB P2.2
- LCALL D5MS
- MOV 60H,R1
-
- JB P3.7,BIAN1
- JNB P3.7,$
- INC R1
- SJMP BIAN1
- BIAN: MOV R0,#00
- BIAN2: MOV P0,#76H
- CLR P2.2
- SETB P2.0
- SETB P2.1
- LCALL D5MS
- MOV A,R0
- MOV B,#10
- DIV AB
- MOV DPTR,#NUMTAB
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.1
- SETB P2.0
- SETB P2.2
- LCALL D5MS
- MOV A,B
- MOV DPTR,#NUMTAB
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.0
- SETB P2.1
- SETB P2.2
- LCALL D5MS
- MOV 50H,R0
-
- JB P3.7,BIAN2
- JNB P3.7,$
- INC R0
- SJMP BIAN2
- RET
- END
復制代碼
|