?? 模糊控制和經驗的水溫調節系統.asm
字號:
;PWM R0,CASE_2,R2,R3,R4 全局變量
;;;;;;;;;;;;;;;;;;;;;;;
DATEX_1 EQU 30H ;用來計數
DATEX_2 EQU 31H ;用來存放占空比
DATEX_3 EQU 32H ;用來存放時鐘
DATEX_4 EQU 33H ;用來存放溫度 (沒用到)
OUT_PUT EQU P3.7 ;用來控制溫度PWM
IN0_PUT EQU P2.6 ;MOHU_NO
IN1_PUT EQU P2.7 ;MOHU_NO
IN2_PUT EQU P2.5 ;MOHU_NO
DATEX_5 EQU 35H ;NT十位溫度
DATEX_6 EQU 36H ;NT個位溫度
DATEX_7 EQU 37H ;NT小數溫度
DATEX_8 EQU 40H ;占存
DATEX_9 EQU 41H ;用來存放時鐘分鐘
DATEX_10 EQU 42H ;MOHU_NO采集時間控制
ST_1 EQU 43H ;設定溫度個位
ST_2 EQU 44H ;設定溫度十位
DATEX_11 EQU 45H ;用來存放ST溫度
DATEX_12 EQU 46H ;用來存放NT溫度
DATEX_13 EQU 47H ;(16)低位
DATEX_14 EQU 48H ;(16)高位
DATEX_15 EQU 49H ;(16)
COMPY_2 EQU 4AH ;比較(高位)
COMPY_1 EQU 4BH ;比較(低位)
MOHU_NO_5 EQU 4CH ;MOHU_NO抗干擾(高位)
MOHU_NO_4 EQU 4DH ;MOHU_NO (低位)
MOHU_NO EQU 4EH ;MOHU_NO 數據 (高位
MOHU_NO_L EQU 4FH ;MOHU_NO 數據 (低位)
EMPTY_2 EQU 50H ;用來存放占空時間(高位)
EMPTY_1 EQU 51H ;用來存放占空時間(低位)
ZHAN_KONG EQU 52H ;用來判斷保溫
ZHAN_TIME EQU 53H ;用來保溫計數
JISHU EQU 54H ;用來計數占空比
MOHU_NO_1 EQU 55H
MOHU_NO_2 EQU 56H
MOHU_NO_3 EQU 57H
A_E EQU 58H ;模糊控制偏差的變化量
M_E EQU 59H ;測得溫度與設定溫度的偏差E
SINGN_END EQU 24H.0 ;用來標志加熱結束
SINGN_R EQU 24H.1 ;確認鍵
SINGN_T EQU 24H.2 ;停止鍵 (沒用到)
SIGN_WEATHER EQU 24H.3 ;氣溫判斷
SIGN_ZHAN EQU 24H.4 ;保溫標志
SIGN_CASE EQU 24H.5 ;緩沖加熱
SIGN_PT EQU 24H.6 ;
SIGN_30 EQU 24H.7 ;30S結束
SIGN_FU EQU 25H.0 ;符號標志
SIGN_FU_E EQU 25H.1 ;符號標志
;;;;;;;;;;;;;;;;;;
ORG 00H
LJMP MAIN
ORG 00BH
LJMP TIME_0
ORG 50H
MAIN:MOV TL0,#0F3H
MOV TH0,#0D8H
MOV TMOD,#01H
SETB ET0
MOV DATEX_1,#00H
MOV DATEX_3,#00H
MOV DATEX_9,#00H
MOV DATEX_5,#00H
MOV DATEX_6,#00H
MOV DATEX_7,#00H
MOV DATEX_10,#00H
MOV DATEX_2,#10
MOV COMPY_1,#00H
MOV COMPY_2,#00H
MOV EMPTY_2,#00H
MOV EMPTY_1,#00H
MOV ZHAN_KONG,#00H
MOV ZHAN_TIME,#00H
CLR SINGN_END
CLR SINGN_T
CLR SINGN_R
CLR SIGN_WEATHER
CLR SIGN_ZHAN
CLR SIGN_CASE
CLR SIGN_PT
CLR SIGN_30
CLR SIGN_FU
CLR SIGN_FU_E
MOV ZHAN_KONG,#1EH
MOV R0,#55H
MOV CASE_2,#4EH
MOV MOHU_NO_4,#00H
MOV MOHU_NO_5,#00H
MOV MOHU_NO,#00H
MOV MOHU_NO_L,#00H
SETB OUT_PUT
MOV SP,#60H
START: MOV P1,#00001100B ;顯示開關控制-開顯示-光標開-字符閃爍
LCALL Ming_Lin_1 ;調用命令輸出子程序
MOV P1,#00111000B ;功能設置-8位數據接口-雙行顯示-5*7點陣
LCALL Ming_Lin_1 ;調用命令輸出子程序
MOV P1,#00000001B ;清屏
LCALL Ming_Lin_1 ;調用命令輸出子程序
MOV P1,#00000110B ;輸入方式設置,增量方式不移位
LCALL Ming_Lin_1
MOV P1,#84H
LCALL Ming_Lin_1
MOV P1,#54H
LCALL DADE
;==============
MOV P1,#85H
ACALL Ming_Lin
MOV P1,#69H
ACALL DADE
;=============
MOV P1,#86H
ACALL Ming_Lin
MOV P1,#6DH
ACALL DADE
;===========
MOV P1,#87H
ACALL Ming_Lin
MOV P1,#65H
ACALL DADE
;=========
MOV P1,#88H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;==========
MOV P1,#8BH
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;========
MOV P1,#0C0H
ACALL Ming_Lin
MOV P1,#53H
ACALL DADE
;===========
MOV P1,#0C1H
ACALL Ming_Lin
MOV P1,#54H
ACALL DADE
;=============
MOV P1,#0C2H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;==========
MOV P1,#0C5H
ACALL Ming_Lin
MOV P1,#63H
ACALL DADE
;==========
MOV P1,#0C7H
ACALL Ming_Lin
MOV P1,#4EH
ACALL DADE
;==========
MOV P1,#0C8H
ACALL Ming_Lin
MOV P1,#54H
ACALL DADE
;=========
MOV P1,#0C9H
ACALL Ming_Lin
MOV P1,#3AH
ACALL DADE
;=========
MOV P1,#0CCH
ACALL Ming_Lin
MOV P1,#2EH
ACALL DADE
;================
MOV P1,#0CEH
ACALL Ming_Lin
MOV P1,#63H
ACALL DADE
;*******************鍵盤掃描和數據處理
BEGIN: LCALL SCAN
LCALL DELAY1
LCALL DELAY1
LCALL IN_PUT
;SETB SINGN_R ;/
;SETB SIGN_WEATHER
;MOV ST_2,#3;/
;MOV ST_1,#0;/
;MOV DATEX_5,#2;/
;MOV DATEX_6,#7 ;/
MOV A,DATEX_5 ;BCD碼轉換成十六進制
MOV B,#10
MUL AB
MOV DATEX_12,A
MOV A,DATEX_6
ADD A,DATEX_12
MOV DATEX_12,A
JNB SIGN_WEATHER,BEGIN_1
;***************
MOV P1,#81H
ACALL Ming_Lin
MOV P1,#73H
ACALL DADE
;**************
BEGIN_1:LCALL LCM
JB SINGN_R,WORK_1
AJMP BEGIN
WORK_1: MOV A,ST_2 ;BCD碼轉換成十六進制
MOV B,#10
MUL AB
MOV DATEX_11,A
MOV A,ST_1
ADD A,DATEX_11
MOV DATEX_11,A
LCALL CPU ;計算溫差及加熱方式
JNB SIGN_WEATHER,WORK_2
LCALL WEATHER_1
WORK_2: LCALL COOK_1
SETB TR0
SETB EA
CLR OUT_PUT ;開始加熱
WORK: ;MOV DATEX_5,#3;/
;MOV DATEX_6,# 5;/
LCALL LCM ;開始工作并加熱
JNB SINGN_END,WORK_4
SETB SIGN_CASE
WORK_4:
AJMP WORK
;;;;=====================================
WEATHER_1:MOV A,DATEX_11
CLR C
CJNE A,#80,WEATHER_2
WEATHER_2:JC WEATHER_3 ;<80
NOP
RET
WEATHER_3:CLR C
CJNE A,#70,WEATHER_4
WEATHER_4:JC WEATHER_5
CLR C ;>70
MOV A,EMPTY_1
SUBB A,#60
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A ;>70
RET
WEATHER_5:CLR C
CJNE A,#60,WEATHER_6
WEATHER_6: JC WEATHER_7
CLR C ;>60
MOV A,EMPTY_1
SUBB A,#60
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_7:CLR C
CJNE A,#50,WEATHER_8
WEATHER_8: JC WEATHER_9
CLR C ;>50
MOV A,EMPTY_1
SUBB A,#45
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_9:CLR C
CJNE A,#40,WEATHER_10
WEATHER_10:JC WEATHER_11
CLR C ;>40
MOV A,EMPTY_1
SUBB A,#20
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
RET
WEATHER_11:CLR C
CJNE A,#30,WEATHER_12
WEATHER_12:JC WEATHER_13
CLR C ;>30
MOV A,EMPTY_1
SUBB A,#15
MOV EMPTY_1,A
MOV A,EMPTY_2
SUBB A,#00H
MOV EMPTY_2,A
WEATHER_13:RET
;=========================================計算差值
CPU: MOV A,DATEX_11 ;ST
LCALL ASSESS
MOV DATEX_14,R4
MOV DATEX_13,R3
MOV A,DATEX_12 ;NT
LCALL ASSESS
MOV A,DATEX_12
CLR C
CJNE A,#30,CPU_2
CPU_2:JNC CPU_3
MOV A,DATEX_13
CLR C
ADD A,R3
MOV EMPTY_1,A
MOV A,DATEX_14
ADDC A,R4
MOV EMPTY_2,A
RET
CPU_3:MOV A,DATEX_13
CLR C
SUBB A,R3
MOV EMPTY_1,A
MOV A,DATEX_14
SUBB A,R4
MOV EMPTY_2,A
RET
;***********************************************查表經驗值的占空比
;***********************************************
; 模糊控制
;**********************************************
;**********************************************
;A_E EQU 58H ;模糊控制偏差的變化量ΔE
;M_E EQU 59H ;測得溫度與設定溫度的偏差E
U_B EQU 5AH ;輸出為電熱絲加熱量U 大
U_M EQU 5BH ;輸出為電熱絲加熱量U 中
U_S EQU 5CH ;輸出為電熱絲加熱量U 小
CASE_2 EQU 5DH ;占存
;*************************************************
;***************************************************
MOHU_CONTROL:JB SIGN_FU_E,MOHU_CONTROL_1
MOV A,M_E ;B
CLR C
CJNE A,#25,MOHU_1
MOHU_1: JC MOHU_CONTROL_1
MOV A,A_E
CLR C
JB SIGN_FU,WUCHA_N
CJNE A,#1,E_1
E_1: JC WUCHA_N ;>0.2
MOV DATEX_2,U_B ;;U_B
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHA_N:CLR C ;<-0.2
JNB SIGN_FU,WUCHA_0
CJNE A,#1,E_2
E_2: JC WUCHA_0
MOV DATEX_2,U_M ;;U_M
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHA_0:
MOV DATEX_2,U_B ;-0.2~0.2 ;U_B
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
MOHU_CONTROL_1:JB SIGN_FU_E,MOHU_CONTROL_2
MOV A,M_E ;M
CLR C
CJNE A,#10,MOHU_2
MOHU_2: JC MOHU_CONTROL_2
MOV A,A_E
CLR C
JB SIGN_FU,WUCHAX_N
CJNE A,#1,EX_1
EX_1: JC WUCHAX_N ;>0.2
MOV DATEX_2,U_M ;;U_M
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHAX_N:CLR C ;<-0.2
JNB SIGN_FU,WUCHAX_0
CJNE A,#1,EX_2
EX_2: JC WUCHAX_0
MOV DATEX_2,U_M ;U_M
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHAX_0:MOV DATEX_2,U_B ;-0.2~0.2 ;;;U_B
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
MOHU_CONTROL_2:JB SIGN_FU_E,MOHU_CONTROL_3
MOV A,A_E ;S
CLR C
JB SIGN_FU,WUCHAY_N
CJNE A,#1,EY_1
EY_1: JC WUCHAY_N ;>0.2
MOV DATEX_2,U_S ;;U_S
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHAY_N:CLR C ;<-0.2
JNB SIGN_FU,WUCHAY_0
CJNE A,#1,EY_2
EY_2: JC WUCHAY_0
MOV DATEX_2,U_S ;;U_S;
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
WUCHAY_0:MOV DATEX_2,U_M ;-0.2~0.2 ;;U_M
CLR SIGN_FU
SETB SIGN_CASE ;PWM開始輸出
RET
MOHU_CONTROL_3:CLR SIGN_CASE ;PWM關閉輸出
CLR SIGN_ZHAN
SETB OUT_PUT ;關閉加熱
CLR SIGN_FU_E
RET
;***************************************
;***********************************************查表經驗值的占空比
;***********************************************
COOK_1:MOV A,DATEX_11
CLR C
CJNE A,#80,COOK_2
COOK_2:JC COOK_3 ;<80
NOP
RET
COOK_3:CLR C
CJNE A,#70,COOK_4
COOK_4:JC COOK_5
;>70
MOV U_B,#91 ;1000W
MOV U_M,#64 ;491W
MOV U_S,#23 ;63W
RET
COOK_5:CLR C
CJNE A,#60,COOK_6
COOK_6:JC COOK_7 ;>60
MOV U_B,#91 ;1000W
MOV U_M,#64 ;491W
MOV U_S,#23 ;63W
RET
COOK_7:CLR C
CJNE A,#50,COOK_8
COOK_8:JC COOK_9 ;>50
MOV U_B,#91 ;1000W
MOV U_M,#64 ;491W
MOV U_S,#16 ;30W
RET
COOK_9:CLR C
CJNE A,#40,COOK_10
COOK_10:JC COOK_11
MOV U_B,#91 ;1000W
MOV U_M,#64 ;491W
MOV U_S,#10 ;12W
RET
COOK_11:CLR C
CJNE A,#30,COOK_12
COOK_12:JC COOK_13
MOV U_B,#91 ;1000W
MOV U_M,#64 ;491W
MOV U_S,#10 ;12W
COOK_13:RET
;**************************************************
;****************************************************
;**************************************************
;****************************************************
;=============================== ;數據處理填裝 R4 R3.R2
ASSESS:
CLR C
CJNE A,#50H,LOOP_1
LOOP_1:JC LOOP_2 ;<80C
NOP ;>80C
RET
LOOP_2:CLR C
CJNE A,#46H,LOOP_3
LOOP_3:JC LOOP_4 ;<70C
;>70C
CLR C
SUBB A,#70
MOV B,#10
MUL AB
CLR C
ADD A,#320
MOV R3,A
MOV R4,#00H
MOV R2,#40
INC R4
RET
LOOP_4:CLR C
CJNE A,#3CH,LOOP_5
LOOP_5:JC LOOP_6 ;<60
; >60
CLR C
SUBB A,#60
MOV B,#10
MUL AB
CLR C
ADD A,#220
MOV R3,A
MOV R4,#00H
MOV R2,#40
JNC LOOPK_1
INC R4
LOOPK_1: RET
LOOP_6:CLR C
CJNE A,#32H,LOOP_7
LOOP_7:JC LOOP_8 ;<50
CLR C ; >50
SUBB A,#50
MOV B,#200
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#23
ACALL DIVD
CLR C
MOV A,DIVDL
ADD A,#133
MOV DIVDL,A
JNC LOOPY_2
INC DIVDH
LOOPY_2:MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_23
MOVC A,@A+DPTR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -