?? 水溫控制系統(tǒng).asm
字號:
YS1 EQU 4FH
YS2 EQU 5FH
DY3 EQU 4EH
DY4 EQU 5EH
ORG 0000H
AJMP START
ORG 0003H
AJMP INT0
ORG 000BH
AJMP T0
ORG 0013H
AJMP INT1
ORG 001BH
AJMP T1
;===============初始化程序====================
START:
MOV 37H,#10
MOV 36H,#10
MOV 35H,#10
MOV 34H,#10
MOV 33H,#10
MOV 32H,#10
MOV 31H,#10
MOV 30H,#10
MOV SP, #60H
MOV TMOD, #11H ;T0,T1設(shè)為定時模式1工作
MOV TH0, #3CH
MOV TL0, #0AFH ;設(shè)定時器0中斷周期為50毫秒
MOV R7, #00H ;用于保存50ms數(shù) ,控制工作周期為1秒
MOV 40H, #01H
MOV 48H, #00H
;SETB P2.6
SETB EA
SETB ET1
SETB ET0 ;溢出中斷允許
SETB IT0 ;外部中斷0的中斷方式為邊沿觸發(fā)方式
SETB IT1 ;外部中斷1的中斷方式為邊沿觸發(fā)方式
CLR TR1 ;初始化關(guān)閉定時器1
CLR TR0 ;初始化關(guān)閉定時器0
LJMP MAIN
;================外部中斷0程序==============
INT0:
RETI
;================定時器0中斷程序=============
T0: PUSH A
; CLR EX1
INC R7
MOV TH0, #3CH
MOV TL0, #0AFH
CJNE R7,#10 ,QQ
LJMP YI_MIAO
QQ:LJMP OVER
YI_MIAO: MOV R7,#00H
;MOV A,R2
; CLR C
;SUBB A,#8
;MOV R2,A ;減2048
MOV R6,#00H
MOV A,R3
BI_JIAO :CJNE A,#64H,PAN_DUAN
XIANG_DENG:CLR C
SUBB A,#64H
INC R6
MOV R3,A
LJMP BI_JIAO
PAN_DUAN:JC XIAO_YU
JNC DA_YU
XIAO_YU:
MOV A,R2
CJNE A,#00H,JIE_WEI
LJMP DI_WEI
JIE_WEI:MOV A,#0FFH
DEC R2
CLR C
SUBB A,#64H
ADD A,R3
INC A
INC R6
MOV R3,A
LJMP BI_JIAO
DA_YU: CLR C
SUBB A,#64H
INC R6
MOV R3,A
LJMP BI_JIAO
DI_WEI: MOV A,R3
MOV B,#10
DIV AB
MOV 3AH,A
MOV 3BH,B
GAO_WEI:MOV A,R6
MOV B,#10
DIV AB
MOV 38H,A
MOV 39H,B
; 38H 39H 3AH 3B 為實際的十進(jìn)制數(shù)
; - 2 0 4 8
;----------------------
; * * * * 000 精確到十毫伏
;
;****000/2048=實際溫度
; 3FH,3EH,3DH,3CH
; *, ** , *0, 00
; / 20, 48
;-------------------------------
MOV 3CH,#00 ;;;;;;;;;;
MOV A,3BH
MOV B,#10
MUL AB
MOV 3DH,A
MOV A,39H
MOV B,#10
MUL AB
ADD A,3AH
MOV 3EH,A
MOV 3FH,38H
MOV R6,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H ;設(shè)置初始值
MOV 33H,#00H ;此處用于保存2048的個數(shù)
DI_WEI1:
MOV A,R6
CJNE A,#100,QI_YU
INC 31H
MOV R6,#00H
MOV A,31H
CJNE A,#10 ,DD
MOV 30H,#01H
MOV 31H,#00H
MOV 32H,#0BH
MOV 33H,#00H
LJMP DI_WEI2
DD: ;MOV 30H,#10
MOV 31H,A
LJMP DI_WEI2
QI_YU:MOV B,#10
DIV AB
ADD A,#11
MOV 32H,A
MOV 33H,B
DI_WEI2:MOV A,3CH
CJNE A,#48,DI_UNEQU ;判斷低位是否等于48
CLR C
SUBB A,#48
MOV 3CH,A
GAO_WEI1:MOV A,3DH
CJNE A,#20,GAO_UNEQU ;判斷高位是否等于20
CLR C
SUBB A,#20
INC R6
MOV 3DH,A
LJMP DI_WEI1
DI_UNEQU:JC DI_S ;低位小于48
JNC DI_L ;低位大于48
DI_S:MOV A,3DH
CJNE A,#00H,GAO_2
MOV A,3EH
CJNE A,#00H,ZH_2
MOV A,3FH
CJNE A,#00H,SH_2
MOV A,48H
CJNE A,#01H,QQ1
LJMP BIJIAO_WENDU
QQ1:LJMP OVER
GAO_2: DEC 3DH
JIAN_48:MOV A,#100 ;低位小于48程序
CLR C
SUBB A,#48
ADD A,3CH
MOV 3CH,A
LJMP GAO_WEI1
ZH_2:DEC 3EH
MOV 3DH,#99
LJMP JIAN_48
SH_2:DEC 3FH
MOV 3EH,#99
MOV 3DH,#99
LJMP JIAN_48
DI_L:CLR C ;低位大于48程序
SUBB A,#48
MOV 3CH,A
LJMP GAO_WEI1
GAO_UNEQU:JC GAO_S ;高位小于20
JNC GAO_L ;高位大于20
GAO_S:MOV A,3EH ;高位小于20程序
CJNE A,#00H,ZH_1 ;判斷中位是否為0
MOV A,3FH
CJNE A,#00H,SH_1 ;判斷上位是否為0
MOV A,48H
CJNE A,#01H,QQ2
LJMP BIJIAO_WENDU
QQ2:LJMP OVER ;計算完畢
ZH_1:MOV A,#100 ;中位不為0,向中位借位
DEC 3EH
CLR C
SUBB A,#20
ADD A,3DH
INC R6
MOV 3DH,A
LJMP DI_WEI1
SH_1:DEC 3FH ;中位為0,但上位不為0,向上位借位
MOV 3EH,#99
MOV A,#100
CLR C
SUBB A ,#20
ADD A,3DH
INC R6
MOV 3DH,A
LJMP DI_WEI1
GAO_L:CLR C ;高位大于20程序
SUBB A,#20
MOV 3DH,A
INC R6
LJMP DI_WEI1
;===============到此12位數(shù)據(jù)處理完畢===============
;===============以下為比較溫度=====================
BIJIAO_WENDU: MOV A,30H
MOV B,#100
MUL AB
MOV R2,A
MOV A,31H
MOV B,#10
MUL AB
ADD A,R2
MOV R2,A
ADD A,32H
MOV R2,A ;實際溫度整合完畢
MOV A,34H
MOV B,#100
MUL AB
MOV R3,A
MOV A,35H
MOV B,#10
MUL AB
ADD A,R3
MOV R3,A
ADD A,36H
MOV R3,A ;設(shè)定溫度整合完畢
CLR C
SUBB A,#10
MOV 41H,A
ADD A,#5
MOV 42H,A
ADD A,#4
MOV 43H,A ;閥值溫度設(shè)定完畢
MOV A,R2
CJNE A,41H,WEN1_UNEQU
LJMP BO_2
WEN1_UNEQU:JC WEN1_XIAO
JNC WEN1_DA
WEN1_XIAO: LJMP BO_QUAN
WEN1_DA: CJNE A,42H,WEN2_UNEQU
LJMP BO_4
WEN2_UNEQU:JC WEN2_XIAO
JNC WEN2_DA
WEN2_XIAO: LJMP BO_2
WEN2_DA: CJNE A,43H,WEN3_UNEQU
LJMP BO_8
WEN3_UNEQU:JC WEN3_XIAO
JNC WEN3_DA
WEN3_XIAO: LJMP BO_4
WEN3_DA: MOV 45H,R3
CJNE A,45H,WEN4_UNEQU
LJMP BO_0
WEN4_UNEQU:JC WEN4_XIAO
JNC WEN4_DA
WEN4_XIAO: LJMP BO_8
WEN4_DA: ; LJMP BO_0
BO_0: CLR EX1
CLR TR1
SETB P3.0
LJMP OVER
BO_QUAN: CLR EX1
CLR TR1
CLR P3.0
LJMP OVER
BO_2:
MOV 46H,#0ECH
MOV 47H,#77H
CLR P3.0
SETB EX1
LJMP OVER
BO_4:
MOV 46H,#0E2H
MOV 47H,#0B3H
CLR P3.0
SETB EX1
LJMP OVER
BO_8:
MOV 46H,#0DDH
MOV 47H,#0D1H
CLR P3.0
SETB EX1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OVER: MOV P0, #00H
SETB P2.5
NOP
CLR P2.5
;0111 1100----CS 111 11 A& R/^C ;A&=0為12位轉(zhuǎn)換
;起動A/D 的12位轉(zhuǎn)換
SETB P2.7 ;P2.7用于打開A/D的CE端,打開AD
JB P2.4,$ ;P2.4用于指示轉(zhuǎn)換完比與否,等待轉(zhuǎn)換完畢
CLR P2.7 ;關(guān)閉A/D
MOV P0 ,#01H ;讀取高8位
SETB P2.5 ;0111 1101------CS 111 11 A& R ;A& R為
NOP ;高8位的讀取
CLR P2.5
NOP
mov p0,#0ffh
SETB P2.7
MOV A, P0
MOV R2,A
CLR P2.7 ;高8位讀取完畢
MOV P0 ,#03H ;讀取低8位
SETB P2.5
NOP ;0111 1111------CS 111 11 A& R
CLR P2.5 ;A& R為低四位+0000的讀取
NOP
mov p0,#0ffh
SETB P2.7
MOV A, P0
MOV R3,A
CLR P2.7 ;低8位讀取完畢
MOV A,R3 ;12位數(shù)據(jù)調(diào)整
SWAP A
ORL A,#0F0H
MOV R3,A
MOV A,R2
SWAP A
MOV R2,A
ORL A,#0FH
ANL A,R3
MOV R3,A
MOV A,R2
ANL A,#0FH
MOV R2,A
POP A
RETI
;===========外部中斷1的中斷服務(wù)程序==============
;當(dāng)過零檢測電路的脈動沖到來,其下跳沿引起外部中斷1
;======= 在此主要進(jìn)行溫度控制程序 ========
INT1: PUSH A
CLR TR0
CLR TR1
MOV TH1,46H
MOV TL1,47H
SETB P3.0
SETB TR1
SETB TR0
;由于導(dǎo)通角的大小為0-10ms,不可忽略,可
;能在些期間會有更優(yōu)先的中斷到來,所以暫時關(guān)閉
;P2.6接的是溫度控制電路,其高電平時間就是導(dǎo)通角
;此處延時的長短為導(dǎo)通角
;SETB TR0
;SETB TR1
POP A
RETI
;========== 定時器1中斷程序 ==============
T1: PUSH A
CLR TR0
CLR P3.0
SETB TR0
POP A
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; MOV R0 , #7CH
; MOV @R0, A
; LOOP: NOP
; JB P3.2, LOOP
; MOVX A , @R0
; MOV R2 , A
; MOV R0 , #7DH
; MOVX A , @R0
; MOV R3 , A
;=================主程序====================
MAIN: LCALL DISPLAY
;----------------鍵盤掃描-------------------
;===========================================
KEYWORK:
SETB P1.3
SETB P1.4
CLR P1.0
CLR P1.1
CLR P1.2
JNB P1.3,KEY0
JNB P1.4,K8
SETB P1.0
; INC P1
JNB P1.3,K1
JNB P1.4,K9
CLR P1.0
SETB P1.1
;INC P1
JNB P1.3,K2
JNB P1.4,K10
SETB P1.0
;INC P1
JNB P1.3,K3
JNB P1.4,K11
CLR P1.0
CLR P1.1
SETB P1.2
;INC P1
JNB P1.3,K4
JNB P1.4,K12
SETB P1.0
;INC P1
JNB P1.3,K5
JNB P1.4,K13
CLR P1.0
SETB P1.1
;INC P1
JNB P1.3,K6
JNB P1.4,K14
SETB P1.0
;INC P1
JNB P1.3,K7
JNB P1.4,K15
;MOV A , P1
;ANL A ,#0E0H
;MOV P1, A
LJMP MAIN
K1:LJMP KEY1
K2:LJMP KEY2
K3:LJMP KEY3
K4:LJMP KEY4
K5:LJMP KEY5
K6:LJMP KEY6
K7:LJMP KEY7
K8:LJMP KEY8
K9:LJMP KEY9
K10:LJMP KEY10
K11:LJMP KEY11
K12:LJMP KEY12
K13:LJMP KEY13
K14:LJMP KEY14
K15:LJMP KEY15
;==================鍵盤掃描部分到此==================
KEY0: JNB P1.3,$
MOV B,#0H
LJMP SAVE
KEY1: JNB P1.3,$
MOV B,#1H
LJMP SAVE
KEY2: JNB P1.3,$
MOV B,#2H
LJMP SAVE
KEY3: JNB P1.3,$
MOV B,#3H
LJMP SAVE
KEY4: JNB P1.3,$
MOV B,#4H
LJMP SAVE
KEY5: JNB P1.3,$
MOV B,#5H
LJMP SAVE
KEY6: JNB P1.3,$
MOV B,#6H
LJMP SAVE
KEY7: JNB P1.3,$
MOV B,#7H
LJMP SAVE
KEY8: JNB P1.4,$
MOV B,#8H
LJMP SAVE
KEY9: JNB P1.4,$
MOV B,#9H
LJMP SAVE
SAVE: MOV 34H,35H
MOV 35H,36H
MOV 36H,37H
MOV 37H,B
LJMP MAIN
KEY10:JNB P1.4,$
MOV A, 37H ;小數(shù)點
ADD A, #11
MOV 37H, A
LJMP MAIN
KEY11:LJMP MAIN
KEY12:LJMP MAIN
KEY13: JNB P1.4,$
CLR EX1
SETB P3.0
MOV 48H,#00H ;關(guān)比較
LJMP MAIN
KEY14: JNB P1.4,$
; SETB EX1
CLR P3.0
MOV 48H,#01H ;開比較
LJMP MAIN
;==============啟動==================
KEY15: JNB P1.4,$
;SETB EX0 ;允許外部中斷0,下跳沿中斷
SETB TR0
;SETB TR1
LJMP MAIN
;========顯示子程序========================
;==========================================
SHUCU: MOV R5,#08H ;R2用于產(chǎn)8個脈沖
MOV DPTR,#TAB
MOV A,R6 ;R3做為顯示緩沖區(qū)
MOVC A,@A+DPTR
LOOP1:RRC A
MOV P1.6,C
SETB P1.7
NOP
NOP
CLR P1.7
DJNZ R5,LOOP1
LCALL DELAY1MS
DEC P2
RET
DISPLAY: MOV R4, #8 ;R4用于掃描8個數(shù)碼管
MOV R1, #37H
MOV A,P2
ORL A,#07H
MOV P2,A ;做為數(shù)碼管位地址選擇
; MOV P2, #7
D1:MOV A, @R1
MOV R6, A
LCALL SHUCU
DEC R1
DJNZ R4, D1
RET
;==============================================
;==============延時子程序======================
DELAY1MS: MOV YS1,#100
DEL1:MOV YS2,#10
DEL2:DJNZ YS2,DEL2
DJNZ YS1,DEL1
RET
;==============================================
TAB:DB 48H,0EBH,98H,89H,2BH,0DH,0CH,0E9H,08H,09H,0FFH
DB 40H,0E3H,90H,81H,23H,05H,04H,0E1H,00H,01H
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -