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

📄 sxm413.asm

📁 这是一个可设计40个打铃点的打铃系统,供一些初学者学习用
💻 ASM
📖 第 1 页 / 共 2 页
字号:
         ACALL  GET_TABLE
         MOV    DIS1,#5EH     ;"D"
         MOV    DIS2,#79H     ;"E"
         MOV    DIS3,#38H     ;"L"
         MOV    DIS4,#40H     ;"-"
DIS_DEL: ACALL  DISPLAY
         MOV    A, P1
         CJNE   A,#0FFH,IN_DEL
         ACALL  TIME30S
         SJMP   DIS_DEL
;-------------------------------------
IN_DEL:  MOV    R7    ,#30
         JNB    P1.0  ,ADD3
         JNB    P1.6  ,SURE3
         JNB    P1.7  ,RETURN3
         AJMP   DELE
;--------------------------------------
ADD3:    ACALL  DISPLAY
         JNB    P1.0 , ADD3
         AJMP   AL_ADD
;--------------------------------------
SURE3:   ACALL  KEY_RELEASE
         MOV    A  ,AL_NUM
         DEC    A
         RL     A
         ADD    A  ,#80H
         MOV    R0 ,A
         MOV    @R0,0FFH
         INC    R0
         MOV    @R0,0FFH
         MOV    R2 ,AL_TOT
         MOV    R0 ,#80H
         MOV    A  ,AL_TOT
         JNZ    ORDE
         AJMP   SHOW_NULL
   ORDE: ACALL  PAIXUCHULI        ;将删除后的数列排序
         DEC    AL_TOT
         ACALL  WR_ALL_AL    ;重新写入24C02
         AJMP   AL_LIST
;--------------------------------------
RETURN3: ACALL  KEY_RELEASE
         AJMP   AL_LIST
;--------------------------------------
; 写入总数和所有打铃点
WR_ALL_AL:
        MOV   R0  ,#AL_TOT
        MOV   R3  ,#1
        MOV   R4  ,#TOT_AD
        ACALL WR_EEROM

        MOV   A   ,AL_TOT
        RL    A
        MOV   R3  ,A
        MOV   R0  ,#80H
        MOV   R4  ,#00H
        ACALL WR_EEROM
        RET

;定时中断服务子程序----------------
INT00:  PUSH   ACC
        PUSH   PSW
     ;   clr     tr0
        CLR    TF0
        mov    th0,#3ch
        mov    tl0,#0b0h

      ;  setb   tr0
        INC    R5              ;秒闪计数
        CJNE   R5  ,#10,EXIT   ;是否到0.5秒 ?
        MOV    R5  ,#0
        INC    R6
        cpl    P3.1
        CJNE   R6  ,#2,EXIT   ;是否到1秒?
        MOV    R6  ,#0
        INC    SEC             ;到达一秒
        DEC    R7              ;定时30秒
        MOV    A   ,SEC
        CJNE   A   ,#60,EXIT
        MOV    SEC ,#0
        INC    MIN             ;到达一分
        MOV    A   ,MIN
        CJNE   A   ,#60,EXIT
        MOV    MIN ,#0
        INC    HOUR            ;达到一小时
        MOV    A   ,HOUR
        CJNE   A   ,#24,EXIT
        MOV    HOUR,#0
 EXIT:
        POP    PSW
        POP    ACC
        RETi
;**********************************
;段码查找---------------------------
GET_TABLE:
        PUSH ACC
        MOV  A   ,H_MEM
        MOV  B   ,#10
        DIV  AB
        MOVC A   ,@A+DPTR
        MOV  DIS1,A
        MOV  A   ,B
        MOVC A   ,@A+DPTR
        MOV  DIS2,A
        MOV  A   ,M_MEM
        MOV  B   ,#10
        DIV  AB
        MOVC A   ,@A+DPTR
        MOV  DIS3,A
        MOV  A   ,B
        MOVC A   ,@A+DPTR
        MOV  DIS4,A
        MOV  A   ,S_MEM
        MOV  B   ,#10
        DIV  AB
        MOVC A   ,@A+DPTR
        MOV  DIS5,A
        MOV  A   ,B
        MOVC A   ,@A+DPTR
        MOV  DIS6,A

        POP  ACC
        RET

;----------------------------------
;打铃检测子程序
AL_TEST: PUSH  PSW
         MOV   R3  ,AL_TOT
         MOV   R0  ,#80H
WAIT4:   MOV   A   ,@R0
         XRL   A   ,HOUR
         JZ    M_TEST
         INC   R0
         INC   R0
         SJMP  EXT1
M_TEST:  INC   R0
         MOV   A    ,@R0
         XRL   A    ,MIN
         JNZ   EXT2
         SETB  P3.4
         SJMP  EXT0
   EXT2: INC   R0
   EXT1: DJNZ  R3   ,WAIT4
   EXT0: POP   PSW
         RET
;--------------------------------
;PAIXUCHULI排序处理程序
PAIXUCHULI:
         PUSH    ACC
         PUSH    PSW
         PUSH    B
         MOV     A  ,R0
         MOV     R4 ,A
         DEC     R2
         MOV     A  ,R2
         MOV     R3 ,A
         CLR     F0
LOOP:    MOV     A  ,R4
         MOV     R0 ,A
         MOV     A  ,R3
         MOV     R2 ,A
         CLR     F0
LOOP1:   ACALL   MIN_MAX
         DJNZ    R2 ,LOOP1
         JNB     F0 ,EXIT_LIST
         DJNZ    R3 ,LOOP
EXIT_LIST:
         POP     B
         POP     PSW
         POP     ACC
         RET

;*******30秒返回程序段***************
TIME30S:
         CJNE R7,#0,RT
         LJMP CLK_DIS
      RT:RET
;------------------------------------------------
MIN_MAX: MOV     B  ,R0
         INC     R0
         MOV     A  ,@R0
         INC     R0
         INC     R0
         CLR     C
         SUBB    A  ,@R0
         MOV     R0 ,B
         MOV     A  ,@R0
         INC     R0
         INC     R0
         SUBB    A  ,@R0
         JC      EXIT_MM
         SETB    F0
         MOV     A  ,@R0
         MOV     R0 ,B
         XCH     A  ,@R0
         INC     R0
         INC     R0
         MOV     @R0,A
         DEC     R0
         MOV     A  ,@R0
         INC     R0
         INC     R0
         XCH     A  ,@R0
         DEC     R0
         DEC     R0
         MOV     @R0,A
EXIT_MM: MOV     R0 ,B
         INC     R0
         INC     R0
         RET
;数码管扫描子程序-----------------

DISPLAY:PUSH    ACC
        PUSH    PSW
        PUSH    00H
        MOV     P0  ,#0
        MOV     A   ,#0FEH
        MOV     R0  ,#DIS1
DIS_LOOP:
        MOV     P2  ,A
        MOV     P0  ,@R0
        ACALL   DLY_DIS
        MOV     P0  ,#0
        RL      A
        INC     R0
        JB      ACC.6,DIS_LOOP
        MOV     P2  ,#0FFH
        POP     00H
        POP     PSW
        POP     ACC
        RET
;--------------------------------------------------
DLY_DIS:PUSH    02H
        PUSH    03H                 ; 延时1MS
        MOV     R2,#4
DLY_LOOP:
        MOV     R3,#204
        DJNZ    R3,$
        DJNZ    R2,DLY_LOOP
        POP     03H
        POP     02H
        RET
;----------------------------------------------
KEY_RELEASE:                       ;等待按键释放
        ACALL   GET_TABLE
        ACALL   DISPLAY
        MOV     A,P1
        CJNE    A,#0FFH,KEY_RELEASE
        RET
;写24C02 EEPROM数据子程序
;R0:RAM地址指针,R2:8位移位计数器
;R3:数据字节计数器
;R4:24C02 存储地址
;------------------------------------------
WR_EEROM:
          NOP
W_LOOP:   ACALL    START24
          MOV      A,#0A0H
          ACALL    WBYTE
          MOV      A,R4
          ACALL    WBYTE
          MOV      A,@R0
          ACALL    WBYTE
          ACALL    STOP24
          ACALL    DISPLAY
          INC      R0
          INC      R4
          DJNZ     R3,W_LOOP
          RET
;******读24C02 EEPROM数据子程序*********
;R0:RAM地址指针,R2:8位移位计数器
;R3:数据字节计数器
;R4:24C02 存储地址
;----------------------------------------
RD_EEROM:
          NOP
R_LOOP1:  ACALL   START24
          MOV     A,#0A0H
          ACALL   WBYTE
          MOV     A,R4
          ACALL   WBYTE
          ACALL   START24
          MOV     A,#0A1H
          ACALL   WBYTE
          ACALL   RBYTE
          MOV     @R0,A
          INC     R0
          INC     R4
          DJNZ    R3,R_LOOP1
          ACALL   STOP24
          RET
;-----------------------------------
RBYTE:    NOP
          CLR     SCL
          MOV     R2,#08H
          SETB    SDA
RBY0:     CLR     SCL
          NOP
          SETB    SCL
          NOP
          MOV     C,SDA
          RLC     A
          DJNZ    R2,RBY0
          CLR     SCL
          NOP
          CLR     SCL
          SETB    SDA
          NOP
          SETB    SCL
          RET
;-------------------------------------
WBYTE:   NOP
         MOV      R2,#08H
WBY0:    CLR      SCL
         RLC      A
         MOV      SDA,C
         NOP
         SETB     SCL
         DJNZ     R2,WBY0
         CLR      SCL
         NOP
         SETB     SCL
         NOP
         JB       SDA,$
         CLR      SCL
         NOP
         RET
;---------------------------------
START24: CLR      SCL
         NOP
         SETB     SDA
         NOP
         SETB     SCL
         NOP
         CLR      SDA
         NOP
         CLR      SCL
         RET
;---------------------------------
STOP24:  CLR     SCL
         NOP
         CLR     SDA
         NOP
         SETB    SCL
         NOP
         SETB    SDA
         NOP
         CLR     SCL
         RET
;==============================================
;段码表
TABLE: ;DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        ;DB     7FH,6FH,40H                     ;'8,9,-,B,C,D,E,F'
         DB  0C0H        ;"0" 
   DB  0F9H        ;"1"
   DB  0A4H        ;"2"
   DB  0B0H        ;"3"
   DB   99H        ;"4"
   DB   92H        ;"5"
   DB   82H        ;"6"
   DB  0F8H        ;"7"
   DB   80H        ;"8"
   DB   90H        ;"9"
END

⌨️ 快捷键说明

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