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

📄 水温控制系统.asm

📁 及时准确地得到温度信息并对其进行适时的控制
💻 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设为定时模式1工作
	  MOV      TH0,   #3CH
	  MOV      TL0,   #0AFH               ;设定时器0中断周期为50毫秒
          MOV      R7,    #00H               ;用于保存50ms数 ,控制工作周期为1秒
          MOV      40H,   #01H
          MOV      48H,   #00H
          ;SETB    P2.6
          SETB     EA
	  SETB     ET1
	  SETB     ET0                        ;溢出中断允许
          SETB     IT0                        ;外部中断0的中断方式为边沿触发方式
          SETB     IT1                        ;外部中断1的中断方式为边沿触发方式
          CLR      TR1                        ;初始化关闭定时器1
          CLR      TR0                        ;初始化关闭定时器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 为实际的十进制数
;  -  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                               ;设置初始值
        MOV   33H,#00H                               ;此处用于保存2048的个数
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位数据处理完毕===============
;===============以下为比较温度=====================
  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            ;设定温度整合完毕

          CLR   C
          SUBB  A,#10
          MOV   41H,A
          ADD   A,#5
          MOV   42H,A
          ADD   A,#4
          MOV   43H,A            ;阀值温度设定完毕

          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位转换
                             ;起动A/D 的12位转换
         SETB  P2.7                          ;P2.7用于打开A/D的CE端,打开AD
         JB    P2.4,$                        ;P2.4用于指示转换完比与否,等待转换完毕

         CLR   P2.7                          ;关闭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位数据调整
         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的中断服务程序==============
;当过零检测电路的脉动冲到来,其下跳沿引起外部中断1
;=======    在此主要进行温度控制程序   ========
INT1: PUSH   A
      CLR   TR0
      CLR   TR1
      MOV   TH1,46H
      MOV   TL1,47H
      SETB   P3.0
       SETB   TR1
       SETB   TR0
     
             ;由于导通角的大小为0-10ms,不可忽略,可
                          ;能在些期间会有更优先的中断到来,所以暂时关闭
            ;P2.6接的是温度控制电路,其高电平时间就是导通角
            ;此处延时的长短为导通角
     
      ;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         ;小数点
      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      ;关比较
      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用于产8个脉冲
       MOV DPTR,#TAB
       MOV A,R6                     ;R3做为显示缓冲区
       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个数码管
           MOV  R1, #37H
           MOV   A,P2
           ORL   A,#07H
           MOV   P2,A                ;做为数码管位地址选择
          ; 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






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -