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

📄 完好的pwm0.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       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个字节16进制的除法***********************
;**********************************************************
;被除数单元20H--21H(高位在前低位在后)
;除数单元22H高位在前低位在后)
;余数单元23(高位在前低位在后)
;结果存放在被除数单元20H--21H(高位在前低位在后)
;影响 B OV  R7  F0
;参数定义:
DIVDL         DATA        21H;定义被除数单元
DIVDH         DATA        20H
DIV_1         DATA        22H;定义除数单元
TEMP          DATA        23H;定义余数单元
;---------------------------------------------------------------
DIVD:
               CLR      C
               MOV      A,DIV_1   ;判断除数是否为零置溢出标志
               JNZ      DIVD0    ;除数为零置溢出标志
               SETB     OV       ;置溢出标志
               SJMP     DIVD_RET ;退出
DIVD0:         MOV      TEMP,#00H  ;不为零,运算
               MOV      B,#16   ;  置循环次数
DIVD1:         CLR      C       ;
               MOV      A,DIVDL ;进位位、余数、被除数单元
               RLC      A        ;逐个左循环移位
               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   ;余数减除数
               MOV      R7,A
               ANL      C,/F0    ;是否够减
               JC       DIVD2    ;不够减,移下一位
               MOV      TEMP,R7  ;够减刷新余数单元
               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
        INC JISHU
        MOV A,JISHU
        CJNE A,DATEX_2,TIME_X1
        MOV JISHU,#00H
        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 SINGN_END,CLOCKE_6
      INC ZHAN_TIME
      MOV A,ZHAN_TIME
      CJNE A,ZHAN_KONG,CLOCKE_6
      MOV ZHAN_TIME,#00H
      JNB SINGN_END,CLOCKE_6
      SETB SIGN_ZHAN
      CPL OUT_PUT

CLOCKE_6:MOV A,DATEX_10
      CJNE A,#03H,CLOCK_2  ;;;???
      MOV DATEX_10,#00H
      LCALL IN_PUT ;;;;启动A/D转换
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
;===============================A/D采集数据输入单片机子程序

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 B,#5
   DIV AB
   ADD A,#20
   MOV DATEX_8,B
   MOV B,#10
   DIV AB
   MOV DATEX_5,A
   MOV DATEX_6,B
   MOV A,DATEX_8
   MOV B,#2
   MUL AB
   MOV DATEX_7,A
   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
LCALL DELAY1
RET
KEY6:CJNE A,#0BBH,KEY7
MOV R7,#01H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY7:CJNE A,#0BDH,KEY8
MOV R7,#02H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY8:CJNE A,#0BEH,KEY9
MOV R7,#03H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY9:CJNE A,#0D7H,KEY10

MOV R7,#04H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1

RET
KEY10:CJNE A,#0DBH,KEY11
MOV R7,#05H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY11:CJNE A,#0DDH,KEY12
MOV R7,#06H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY12:CJNE A,#0DEH,KEY13
MOV R7,#07H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET
KEY13:CJNE A,#0E7H,KEY14
 MOV R7,#08H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
LCALL DELAY1
RET

KEY14:CJNE A,#0EBH,KEY15
MOV R7,#09H
MOV ST_2,ST_1
MOV ST_1,R7
LCALL DELAY1
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 + -