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

📄 完好的pwm1.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;PWM
;;;;;;;;;;;;;;;;;;;;;;;
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 ;A/D
IN1_PUT  EQU  P2.7 ;A/D
IN2_PUT  EQU  P2.5 ;A/D
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   ;A/D采集时间控制
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  ;比较(低位)
EMPTY_2    EQU  50H  ;用来存放占空时间(高位)
EMPTY_1    EQU  51H  ;用来存放占空时间(低位)
ZHAN_KONG  EQU  52H  ;用来判断保温
ZHAN_TIME  EQU  53H  ;用来保温计数
JISHU      EQU  54H  ;用来计数占空比
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


;;;;;;;;;;;;;;;;;;
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 COMPY_1,#00H
MOV COMPY_2,#00H
MOV EMPTY_2,#00H
MOV EMPTY_1,#00H
MOV ZHAN_KONG,#00H
CLR SINGN_END
CLR SINGN_T
CLR SINGN_R
CLR SIGN_WEATHER
CLR  SIGN_ZHAN
CLR SIGN_CASE
CLR SIGN_PT
MOV ZHAN_KONG,#1EH


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,#2;/
              MOV DATEX_6,# 9;/
               LCALL LCM  ;开始工作并加热

              JB SIGN_PT,WORK_3
              JNB SINGN_END,WORK_3
              SETB SIGN_PT
              ;***********
              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
             ;*********
              CLR C
              MOV A,DATEX_12
              CJNE A,DATEX_11,WORK_10
   WORK_10:   JNC WORK_6            ;>ST
              MOV A,DATEX_11
              CLR C
              SUBB A,DATEX_12
              MOV B,#7
              MUL AB
              MOV EMPTY_1,A
              MOV EMPTY_2,#00H
              MOV COMPY_1,#00H
              MOV COMPY_2,#00H
              CLR SINGN_END
              CLR OUT_PUT
              AJMP WORK_3
     WORK_6:   SETB OUT_PUT
               NOP

WORK_3:   JNB SIGN_PT,WORK_4
          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,#50
           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,#44
           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
;***********************************************查表经验值的占空比
;***********************************************
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
       MOV  DATEX_2,#28
       RET
COOK_5:CLR C
       CJNE A,#60,COOK_6
COOK_6:JC  COOK_7
       MOV  DATEX_2,#26
  RET
COOK_7:CLR C
       CJNE A,#50,COOK_8
COOK_8:JC  COOK_9
       MOV  DATEX_2,#20
  RET
COOK_9:CLR C
       CJNE A,#40,COOK_10
COOK_10:JC  COOK_11
       MOV  DATEX_2,#16
  RET
COOK_11:CLR C
        CJNE A,#30,COOK_12
COOK_12:JC  COOK_13
        MOV  DATEX_2,#10
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
       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

⌨️ 快捷键说明

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