⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模糊控制和经验的水温调节系统.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;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 + -