📄 模糊控制和经验的水温调节系统2.asm
字号:
;**************************************************
;****************************************************
;**************************************************
;****************************************************
;***********************************************************
;==================================中断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
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
CLOCKP_4: RET
;===============================MOHU_NO采集数据输入单片机子程序
;********************************************
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 CASEX_3,A
CLR C
CJNE A,CASE_2,NEXT_1
NEXT_1:JNC NEXT_3
MOV A,CASE_2
CLR C
SUBB A,CASEX_3
MOV A_E,A ;偏差的变化量ΔE
SETB SIGN_FU ;负号标志
AJMP NEXT_2
IN_PUT_1:LJMP IN_PUT_2
NEXT_3:CLR C
MOV A,CASEX_3
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,CASEX_3,NEXTX_5
NEXTX_5:JNC NEXTX_6
MOV A,CASEX_3
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,CASEX_3
MOV M_E,A ;测得温度与设定温度的偏差E
NEXTX_7:JNB SIGN_30,NEXTY_8
LCALL MOHU_CONTROL ;调用模糊控制
NEXTY_8:MOV CASE_2,CASEX_3
MOV A,CASEX_3
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 ;数字键
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 ;秒钟个位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
;单字节十六进制整数转换成单字节BCD码整数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 + -