?? 模糊控制和經驗的水溫調節(jié)系統(tǒng).asm
字號:
ADD A,#4
CLR C
CJNE A,#10,LOOPT_3
LOOPT_3:JC LOOPT_4 ;<10
INC R3
CLR C
SUBB A,#10
LOOPT_4:MOV B,#10
MUL AB
MOV R2,A
RET
LOOP_8:CLR C
CJNE A,#28H,LOOPF_9
LOOPF_9:JC LOOP_9 ;<40
CLR C ;>40
SUBB A,#40
MOV B,#20
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#3
ACALL DIVD
CLR C
MOV A,DIVDL
ADD A,#66
MOV DIVDL,A
JNC LOOPY_3
INC DIVDH
LOOPY_3:MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
ADD A,#7
CLR C
CJNE A,#10,LOOPT_5
LOOPT_5:JC LOOPT_6 ;<10
INC R3
CLR C
SUBB A,#10
LOOPT_6: MOV B,#10
MUL AB
MOV R2,A
RET
LOOP_9:CLR C
CJNE A,#1EH,LOOP_10
LOOP_10:JC LOOP_11 ;<30
CLR C ;>30
SUBB A,#30
MOV B,#20
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#3
ACALL DIVD
MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
MOV B,#10
MUL AB
MOV R2,A
RET
LOOP_11:CLR C ;<30
MOV B,A
MOV A,#30
SUBB A,B
MOV B,#20
MUL AB
MOV DIVDL,A
MOV DIVDH,B
MOV DIV_1,#3
ACALL DIVD
MOV R4,DIVDH
MOV R3,DIVDL
MOV A,TEMP
MOV DPTR,#TABLE_3
MOVC A,@A+DPTR
MOV B,#10
MUL AB
MOV R2,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;**********************************************************
;****************2個字節(jié)16進制的除法***********************
;**********************************************************
;被除數(shù)單元20H--21H(高位在前低位在后)
;除數(shù)單元22H高位在前低位在后)
;余數(shù)單元23(高位在前低位在后)
;結果存放在被除數(shù)單元20H--21H(高位在前低位在后)
;影響 B OV R7 F0
;參數(shù)定義:
DIVDL DATA 21H;定義被除數(shù)單元
DIVDH DATA 20H
DIV_1 DATA 22H;定義除數(shù)單元
TEMP DATA 23H;定義余數(shù)單元
;---------------------------------------------------------------
DIVD:
CLR C
MOV A,DIV_1 ;判斷除數(shù)是否為零置溢出標志
JNZ DIVD0 ;除數(shù)為零置溢出標志
SETB OV ;置溢出標志
SJMP DIVD_RET ;退出
DIVD0: MOV TEMP,#00H ;不為零,運算
MOV B,#16 ; 置循環(huán)次數(shù)
DIVD1: CLR C ;
MOV A,DIVDL ;進位位、余數(shù)、被除數(shù)單元
RLC A ;逐個左循環(huán)移位
MOV DIVDL,A ;
MOV A,DIVDH
RLC A
MOV DIVDH,A
MOV A,TEMP
RLC A
MOV TEMP,A
MOV F0,C ;保留進位位
CLR C
MOV A,TEMP
SUBB A,DIV_1 ;余數(shù)減除數(shù)
MOV R7,A
ANL C,/F0 ;是否夠減
JC DIVD2 ;不夠減,移下一位
MOV TEMP,R7 ;夠減刷新余數(shù)單元
INC DIVDL ;商上一
DIVD2: DJNZ B,DIVD1
CLR OV
DIVD_RET:
RET
;***********************************************************
;==================================中斷0響應,做時鐘和產生PWM
TIME_0:PUSH ACC
PUSH B
PUSH PSW
MOV TL0,#0F3H
MOV TH0,#0D8H
INC DATEX_1
JNB SIGN_ZHAN,TIME_X1
MOV A,DATEX_1
CJNE A,DATEX_2,TIME_X1
CPL OUT_PUT
TIME_X1:MOV A,DATEX_1
CJNE A,#64H,TIME_X
MOV DATEX_1,#00H
LCALL CLOCK
TIME_X: POP PSW
POP B
POP ACC
RETI
;=====================================時鐘
CLOCK:
INC DATEX_3
INC DATEX_10
JNB SIGN_CASE,CLOCKE_6
INC ZHAN_TIME
MOV A,ZHAN_TIME
CJNE A,ZHAN_KONG,CLOCKE_8
SETB SIGN_30
CLOCKE_8:JNB SIGN_30,CLOCKE_6
MOV ZHAN_TIME,#29
JNB SINGN_END,CLOCKE_6
SETB SIGN_ZHAN
CPL OUT_PUT
CLOCKE_6:MOV A,DATEX_10
CJNE A,#01H,CLOCK_2 ;;;???
MOV DATEX_10,#00H
LCALL IN_PUT ;;;;啟動MOHU_NO轉換
CLOCK_2:MOV A,DATEX_3
CJNE A,#3CH,CLOCK_1
MOV DATEX_3,#00H
INC DATEX_9
MOV A,DATEX_9
CJNE A,#64H,CLOCK_1
MOV DATEX_9,#0FFH
CLOCK_1:;LCALL LCM
CLR C
MOV A,COMPY_1
ADD A,#01H
MOV COMPY_1,A
JNC CLOCKP_3
INC COMPY_2
CLOCKP_3:JB SINGN_END,CLOCKP_4
MOV A,COMPY_1
CJNE A,EMPTY_1,CLOCKP_4
MOV A,COMPY_2
CJNE A,EMPTY_2,CLOCKP_4
SETB OUT_PUT ;;?????
SETB SINGN_END ;;????
CLOCKP_4: RET
;===============================MOHU_NO采集數(shù)據輸入單片機子程序
IN_PUT:
MOV P0,#0FFH
SETB IN0_PUT
NOP
CLR IN0_PUT
JB IN1_PUT,$ ;;;;???????????????????????????????????????????????????????
SETB IN2_PUT
MOV A,P0 ;;;;/////?????????
CLR IN2_PUT
;MOV @R0,A
;INC R0
;MOV A,R0
;CJNE A,#58H,IN_PUT_1
;MOV R0,#55H
;MOV A,@R0 ;求三個數(shù)的平均值
;INC R0
;CLR C
;ADD A,@R0
;MOV MOHU_NO_4,A ;求三個數(shù)的平均值
;MOV A,#00H
;ADDC A,#00H
;MOV MOHU_NO_5,A
;CLR C
;INC R0 ;求三個數(shù)的平均值
;MOV A,MOHU_NO_4
;ADD A,@R0
;MOV A,MOHU_NO_5
;ADDC A,#00H
;MOV MOHU_NO_5,A ;求三個數(shù)的平均值
;MOV DIVDL,MOHU_NO_4
;MOV DIVDH,MOHU_NO_5
;MOV DIV_1,#3
;LCALL DIVD
;MOV A,DIVDL ;求三個數(shù)的平均值
MOV DIVDL,A
CLR C
CJNE A,CASE_2,NEXT_1
NEXT_1:JNC NEXT_3
MOV A,CASE_2
CLR C
SUBB A,DIVDL
MOV A_E,A ;偏差的變化量ΔE
SETB SIGN_FU ;負號標志
AJMP NEXT_2
IN_PUT_1:LJMP IN_PUT_2
NEXT_3:CLR C
MOV A,DIVDL
SUBB A,CASE_2
MOV A_E,A ;偏差的變化量ΔE
NEXT_2:MOV A,DATEX_11
CLR C
SUBB A,#20
MOV B,#5
MUL AB
MOV B,A
CLR C
CJNE A,DIVDL,NEXTX_5
NEXTX_5:JNC NEXTX_6
MOV A,DIVDL
CLR C
SUBB A,B
MOV M_E,A
SETB SIGN_FU_E
AJMP NEXTX_7
NEXTX_6:CLR C
MOV A,B
SUBB A,DIVDL
MOV M_E,A ;測得溫度與設定溫度的偏差E
NEXTX_7:JNB SIGN_30,NEXTY_8
LCALL MOHU_CONTROL ;調用模糊控制
NEXTY_8:MOV CASE_2,DIVDL
MOV A,DIVDL
MOV B,#5
DIV AB
ADD A,#20
MOV DATEX_8,B ;十六進制轉換成BCD碼
MOV B,#10
DIV AB
MOV DATEX_5,A ;十六進制轉換成BCD碼
MOV DATEX_6,B
MOV A,DATEX_8 ;十六進制轉換成BCD碼
MOV B,#2
MUL AB
MOV DATEX_7,A ;十六進制轉換成BCD碼
MOV R0,#55H
IN_PUT_2:RET
;=========================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;鍵盤掃描子程序
SCAN:
MOV P0,#7FH
MOV A,P0
CJNE A,#7FH, KEY1
MOV P0,#0BFH
MOV A,P0
CJNE A,#0BFH, KEY5
MOV P0,#0DFH
MOV A,P0
CJNE A,#0DFH,KEY9
MOV P0,#0EFH
MOV A,P0
CJNE A,#0EFH,T_O
RET
T_O:LJMP KEY13
KEY1:CJNE A,#77H,KEY2
NOP
RET
KEY2:CJNE A,#7BH,KEY3
NOP
RET
KEY3:CJNE A,#7DH,KEY4
NOP
RET
KEY4:CJNE A,#7EH,MM
NOP
MM:RET
KEY5:CJNE A,#0B7H,KEY6 ;數(shù)字鍵
MOV R7,#00H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY6:CJNE A,#0BBH,KEY7
MOV R7,#01H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY7:CJNE A,#0BDH,KEY8
MOV R7,#02H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY8:CJNE A,#0BEH,KEY9
MOV R7,#03H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY9:CJNE A,#0D7H,KEY10
MOV R7,#04H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY10:CJNE A,#0DBH,KEY11
MOV R7,#05H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY11:CJNE A,#0DDH,KEY12
MOV R7,#06H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY12:CJNE A,#0DEH,KEY13
MOV R7,#07H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY13:CJNE A,#0E7H,KEY14
MOV R7,#08H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY14:CJNE A,#0EBH,KEY15
MOV R7,#09H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
RET
KEY15:CJNE A,#0EDH,KEY16 ;停止鍵
LCALL DELAY1
SETB SIGN_WEATHER
LCALL DELAY1
LCALL DELAY1
RET ;電機正轉
KEY16:CJNE A,#0EEH,LL ;確認鍵
LCALL DELAY1
SETB SINGN_R
LCALL DELAY1
LCALL DELAY1
LL:RET
;;;;;;;;;;;;;
delay1:
MOV R5,#250
XX: MOV R6,#250
DJNZ R6,$
DJNZ R5, XX
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;
;;重新分配地址 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATEY_2 EQU 38H ;分鐘十位
DATEY_1 EQU 39H ;分鐘個位
DATEY_4 EQU 3AH ;秒鐘十位
DATEY_3 EQU 3BH ;秒鐘個位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
;單字節(jié)十六進制整數(shù)轉換成單字節(jié)BCD碼整數(shù)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HBCD: MOV B,#100
DIV AB
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;;:::::::::::
;;;;;;;;;;;;;;;;;;;;;;;;;;液晶子程序
LCM:
MOV A,DATEX_3
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV DATEY_3,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV DATEY_4,A
;;;;;;;;;;;
MOV A,DATEX_9
LCALL HBCD
MOV B,A
ANL A,#00001111B
MOV DATEY_1,A
MOV A,B
SWAP A
ANL A,#00001111B
MOV DATEY_2,A
;;;;;;;;;;;;;;
MOV P1,#08DH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_3
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#08CH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_4
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#08AH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#089H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEY_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CDH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_7
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CBH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_6
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0CAH
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,DATEX_5
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C3H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_2
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
MOV P1,#0C4H
ACALL Ming_Lin
MOV DPTR, #TABLE
MOV A,ST_1
MOVC A,@A+DPTR
MOV P1,A
ACALL DADE
RET
DADE:SETB P2.2
CLR P2.3
SETB P2.4 ;給下降沿
CPL P2.4
ACALL DALAY1
RET
Ming_Lin: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
;給下降沿
CPL P2.4
ACALL DALAY
RET
DALAY: MOV R5,#10H
ALJSDH:MOV R6,#123
DJNZ R6,$
DJNZ R5,ALJSDH
RET
DALAY1:MOV R7,#25
DJNZ R7,$
RET
Ming_Lin_1: CLR P2.2 ;RS=0
CLR P2.3 ;R/W=0
SETB P2.4
ACALL DALAY
;給下降沿
CPL P2.4
ACALL DALAY
RET
TABLE:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
TABLE_23:DB 00H,00H,01H,01H,02H,02H,03H,03H,03H,04H,04H,05H,05H, 06H ,06H,07H,07H,07H,08H,08H,09H,09H,0AH
TABLE_3: DB 00H,03H,07H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -