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

📄 timer and ring.asm

📁 教学打铃控制器,单片机,汇编语言,proteus仿真
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        JNB     AC,STOS
        SUBB    A,#6
STOS:   MOV     40H,A
SETOK2:  LCALL   LEDDIS
NOTDOWN2:LJMP    SECSET
;--------------------------             出口
SETENT: MOV     30H,40H
        MOV     31H,41H
        MOV     32H,42H
SETCAN: POP     CONDES
        POP     CONSOS
        LCALL   LEDDIS
        POP     DPLYLOC
        POP     PSW
        POP     ACC
        LJMP    MAIN
;------------------------------------方便掉用
DAASP:   ADD     A,#01
         DA      A
         RET
 ;******************************************打铃设置
BELLBRO:PUSH    CONSOS
        PUSH    CONDES
        PUSH    DPLYLOC
        MOV     TCDOWN,#20
        MOV     BELLM,#0EEH                 ;初始化打铃点分单元为"-"
        MOV     BELLH,#0EEH                 ;初始化打铃点时单元为"-"
        MOV     BELNUM,#00H
        MOV     A,BCBIN
        JZ      BEL_OK
        MOV     BNBIN,#01H
        XRL     A,#01H
        JZ      BELLLP
        LCALL   PAIXU
BELLLP: LCALL   SEARCH
BEL_OK: MOV     DPLYLOC,#54H             ;显示程序入口指针指向54H
        MOV     CONSOS,#50H
        MOV     CONDES,#59H             ;初始化转换程序
BLOOP:  MOV     A,TCDOWN
        JNZ     BLPGO
        LJMP    BELCAN
BLPGO:  LCALL   LEDDIS                  ;将50H-52H单元的内容拆解为六个BCD字节送往显示单元
        LCALL   DISPLAY
        LCALL   GETKEY
        MOV     A,KEYFLAG
        JZ      BLOOP
        MOV     A,KEYCODE
        MOV     TCDOWN,#20
        MOV     KEYFLAG,#00H
        MOV     B,A
        CJNE    A,#RIGHT,NOTBRIGHT
        LJMP    BELCAN
NOTBRIGHT:CJNE  A,#CANCEL,NOTCAN          ;取消
        LJMP    BELCAN
NOTCAN: CJNE    A,#ENTER,NOTBENT          ;确定
        LJMP    BELENT
NOTBENT:CJNE    A,#NEW,NOTBNEW            ;新增
        LJMP    BELNEW
NOTBNEW:MOV     A,BCBIN
        JZ      BLOOP
        MOV     A,B
        CJNE    A,#SETUP,NOTSET           ;设置
        LJMP    BELSET
NOTSET: CJNE    A,#DEL,NOTDEL             ;删除
        LJMP    BELDEL
NOTDEL: MOV     A,BCBIN
        JNZ     GOBELSET
        LJMP    BLOOP                     ;打铃点为0时,只作功能判断
GOBELSET:MOV    A,B
        CJNE    A,#UP,NOTUP5              ;向上
        MOV     A,BNBIN
        CJNE    A,BCBIN,NOTTOP2
        MOV     A,#01H
        MOV     BNBIN,A
        AJMP    NOTTOP3
NOTTOP2:ADD     A,#1
        MOV     BNBIN,A
NOTTOP3:LCALL   SEARCH
        LJMP    BLOOP
NOTUP5: MOV     A,B                         ;向下
        CJNE    A,#DOWN,NOTDOWN5
        MOV     A,BNBIN
        CLR     C
        SUBB    A,#1
        MOV     BNBIN,A
        JNZ     NOTOVER
        MOV     BNBIN,BCBIN
NOTOVER:LCALL   SEARCH
NOTDOWN5:LJMP   BLOOP
;------------------------------------------;新增
BELNEW:  MOV     TCDOWN,#20
         MOV     NEWFLAG,#0FFH
         MOV     A,BCBIN
         CJNE    A,#40,BNEXT
         MOV     BNBIN,A
         LJMP    BELSER
BNEXT:   ADD     A,#1
         MOV     BCBIN,A
         MOV     BNBIN,A
BELSER:  LCALL   SEARCH
;------------------------------------------;B设置
BELSET:  MOV     TCDOWN,#20
         MOV     A,51H
         CJNE    A,#23H,B24NEXT1
         AJMP    B24NEXT
B24NEXT1:JC      B24NEXT
         MOV     51H,#12H
         MOV     50H,#30H
         LCALL   LEDDIS
         AJMP    BELHSET
B24NEXT: MOV     A,50H
         CJNE    A,#59H,B59NEXT              ;判断时钟是否有效,无效,则置为12:30
         AJMP    BELHSET
B59NEXT: JC      BELHSET
         MOV     50H,#30H
         LCALL   LEDDIS
BELHSET: MOV     A,TCDOWN                    ;倒计时20S
         JNZ     BELSGO
         LJMP    BELCAN
BELSGO:  MOV     C,01H
         JNC     BHIDE
         LCALL   LEDDIS
         LCALL   DISPLAY
         AJMP    BELHSP
BHIDE:   PUSH    51H
         MOV     51H,#0FFH
         LCALL   LEDDIS
         LCALL   DISPLAY
         POP     51H
BELHSP:  LCALL   GETKEY
         MOV     A,KEYFLAG
         JZ      BELHSET
         MOV     A,KEYCODE
         MOV     TCDOWN,#20
         MOV     KEYFLAG,#00H
         MOV     B,A
         CJNE    A,#CANCEL,B_NOTCN
         LJMP    NEWCAN                  ;CANCEL,则转向取消设置程序
B_NOTCN: CJNE    A,#ENTER,B_NOTENT
         LJMP    BELSENT                  ;ENTER,则转向确定设置程序
B_NOTENT:CJNE    A,#RIGHT,B_NOTRIT
         LJMP    BELMSET                  ;按下RIGHT键,转入分钟设置
B_NOTRIT:MOV     A,KEYCODE
         CJNE    A,#UP,B_NOTUP
         MOV     A,51H
         CJNE    A,#23H,B_ADDH
         MOV     51H,#00H
         AJMP    B_SETOK
B_ADDH:  LCALL   DAASP
         MOV     51H,A
         LJMP    B_SETOK
B_NOTUP: MOV     A,B
         CJNE    A,#DOWN,B_NOTDOWN
         MOV     A,51H
         CJNE    A,#00H,B_SUBH
         MOV     51H,#23H
         AJMP    B_SETOK
B_SUBH:  SUBB    A,#1
         JNB     AC,B_STOH
         SUBB    A,#6
B_STOH:  MOV     51H,A
B_SETOK: LCALL   LEDDIS
B_NOTDOWN:LJMP    BELHSET
;-------------------------------------------B分设置
BELMSET: MOV    A,TCDOWN
        JNZ     BELMGO
        LJMP    BELCAN
BELMGO: MOV     C,01H
        JNC     B_HIDE1
        LCALL   LEDDIS
        LCALL   DISPLAY
        AJMP    B_MINSP
B_HIDE1:PUSH    50H
        MOV     50H,#0FFH
        LCALL   LEDDIS
        LCALL   DISPLAY
        POP     50H
B_MINSP:LCALL   GETKEY
        MOV     A,KEYFLAG
        JZ      BELMSET
        MOV     A,KEYCODE
        MOV     TCDOWN,#20
        MOV     KEYFLAG,#00H
        MOV     B,A
        CJNE    A,#CANCEL,B_NOTCN1
        LJMP    NEWCAN                  ;CANCEL,则转向取消设置程序
B_NOTCN1:CJNE   A,#ENTER,B_NOTENT1
        LJMP    BELSENT                  ;ENTER,则转向确定设置程序
B_NOTENT1:CJNE  A,#RIGHT,B_NOTRIT1
        LJMP    BELHSET                  ;按下RIGHT键,转入秒钟设置
B_NOTRIT1:MOV   A,KEYCODE
        CJNE    A,#UP,B_NOTUP1
        MOV     A,50H
        CJNE    A,#59H,B_ADDM
        MOV     50H,#00H
        AJMP    B_SETOK1
B_ADDM: LCALL   DAASP
        MOV     50H,A
        AJMP    B_SETOK1
B_NOTUP1: MOV   A,B
        CJNE    A,#DOWN,B_NOTDOWN1
        MOV     A,50H
        CJNE    A,#00H,B_SUBM
        MOV     50H,#59H
        AJMP    B_SETOK1
B_SUBM: SUBB    A,#1
        JNB     AC,B_STOM
        SUBB    A,#6
B_STOM: MOV     50H,A
B_SETOK1:LCALL   LEDDIS
B_NOTDOWN1:LJMP  BELMSET
NEWCAN:  MOV     A,NEWFLAG
         JZ      BSETCAN
         MOV     A,BCBIN
         CLR     C
         SUBB    A,#1
         MOV     BCBIN,A
         MOV     BNBIN,A
         LCALL   SEARCH
         MOV     A,BCBIN
         JZ      NCOUT2
         LJMP    BELLLP
NCOUT2:  MOV     BELLM,#0EEH
         MOV     BELLH,#0EEH
         LJMP    BEL_OK
BSETCAN: LJMP    BELLLP
;------------------------------------------;删除
BELDEL:  MOV     A,BCBIN
         JZ      BZOUT
         MOV     B,#2
         MUL     AB
         ADD     A,#7EH
         MOV     R0,A
         MOV     @R0,#0EEH
         INC     R0
         MOV     @R0,#0EEH
         MOV     R0,BCBIN
         CJNE    R0,#1,BELPAIXU
         AJMP    NOPAIXU
BELPAIXU:LCALL   PAIXU
         MOV     A,BCBIN
         CLR     C
         SUBB    A,#1
         MOV     BCBIN,A
         MOV     A,BNBIN
         CJNE    A,#01,BCONV
         MOV     BNBIN,#01
         AJMP    B_DELN3
BCONV:   CLR     C
         SUBB    A,#1
         MOV     BNBIN,A
B_DELN3: LJMP    BELLLP
NOPAIXU: MOV     BELNUM,#00H
         MOV     BCBIN,#00H
         MOV     BNBIN,#00H
BZOUT:   MOV     BELLM,#0EEH
         MOV     BELLH,#0EEH
         LJMP    BEL_OK
BELSENT:MOV    A,BNBIN                    ;确定
        MOV    B,#2
        MUL    AB
        ADD    A,#7EH
        MOV    R0,A
        MOV    @R0,51H
        INC    R0
        MOV    @R0,50H
BELSCAN:LJMP   BELLLP
BELENT: MOV    R0,#7FH
        MOV    @R0,BCBIN
        MOV    R0,#7FH
        MOV    R4,#00H
        MOV    A,#BCBIN
        MOV    B,#2
        MUL    AB
        ADD    A,#1
        MOV    R3,A
        LCALL  WR24
        POP    DPLYLOC
        POP    CONDES
        POP    CONSOS
        LJMP   MAIN                       ;退出程序
BELCAN: POP    DPLYLOC
        POP    CONDES
        POP    CONSOS
        LJMP   MAINRD
;------------------------
SEARCH: PUSH   ACC                       ;将当前打铃点的信息从RAM中传送到缓存中
        PUSH   00H
        PUSH   B
        MOV    A,BNBIN
        MOV    B,#10
        DIV    AB
        SWAP   A
        ORL    A,B                       ;将二进制转换为BCD码
        MOV    BELNUM,A
        MOV    B,#2
        MOV    A,BNBIN
        MUL    AB
        ADD    A,#7EH
        MOV    R0,A
        MOV    BELLH,@R0
        INC    R0
        MOV    BELLM,@R0
        POP    B
        POP    00H
        POP    ACC
        RET
;*****************************写24C02 EEPROM数据子程序*****************************
;R0:RAM地址指针,R2:8位移位计数器 ;R3:数据字节计数器;R4:24C02 存储地址
WR24:     NOP
W_LOOP:   LCALL    START24
          MOV      A,#0A0H
          LCALL    WBYTE
          MOV      A,R4
          LCALL    WBYTE
          MOV      A,@R0
          LCALL    WBYTE
          LCALL    STOP24
          MOV      R6,#4
DLP:      LCALL    DISPLAY
          DJNZ     R6,DLP
          INC      R0
          INC      R4
WAIT:     MOV      A,TH0
          CPL      A
          JZ       WAIT
          DJNZ     R3,W_LOOP
          RET

;*****************************读24C02 EEPROM数据子程序*****************************
;R0:RAM地址指针,R2:8位移位计数器;R3:数据字节计数器 ;R4:24C02 存储地址
RD24:     NOP
R_LOOP1:  LCALL   START24
          MOV     A,#0A0H
          LCALL   WBYTE
          MOV     A,R4
          LCALL   WBYTE
          LCALL   START24
          MOV     A,#0A1H
          LCALL   WBYTE
          LCALL   RBYTE
          MOV     @R0,A
          INC     R0
          INC     R4
          DJNZ    R3,R_LOOP1
          LCALL   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
;*****************************双字节排序程序*****************************
;入口参数:COUNT单元存放打铃点个数,BEGIN为排序的入口指针
PAIXU:  PUSH    ACC
        PUSH    PSW
        PUSH    B
        PUSH    00H
        PUSH    01H
        PUSH    02H
        PUSH    03H
        PUSH    04H
        PUSH    05H
        PUSH    06H
        MOV     R2,BCBIN
        DEC     R2          ;送外循环数
GOTO1:  MOV     A,R2
        MOV     R3,A        ;送内循环数
        MOV     R6,#01      ;送换位标志为1
        MOV     R0,#80H     ;R0为时指针
GOTO2:  MOV     A,R0
        INC     A
        MOV     R1,A        ;R1为分指针
        MOV     A,@R0
        MOV     R4,A        ;第一个时值送R4
        INC     R0
        INC     R0          ;时指针加2
        MOV     A,@R1
        MOV     R5,A       ;第一个分值送R5
        INC     R1
        INC     R1         ;分指针加2
        CLR     C          ;进位清0
        MOV     A,R4
        SUBB    A,@R0     ;第一个时值减第二个时值
        JZ      LESS1       ;相等
        JC      LESS        ;小于
        JNC     BIG        ;大于
LESS1:  CLR     C          ;进位清0
        MOV     A,R5
        SUBB    A,@R1     ;第一个分值减第二个分值
        JC      LESS        ;小于
BIG:    MOV     A,R4       ;大于或等于时
        XCH     A,@R0      ;时对换
        DEC     R0
        DEC     R0
        MOV     @R0,A
        INC     R0
        INC     R0
        MOV     A,R5
        XCH     A,@R1      ;分对换
        DEC     R1
        DEC     R1
        MOV     @R1,A
        INC     R1
        INC     R1
        MOV     R6,#02     ;对换标志置2
LESS:   DJNZ    R3,GOTO2
        DJNZ    R2,GOTO3
        SJMP    GOTO4
GOTO3:  DJNZ    R6,GOTO1
GOTO4:  POP     06H
        POP     05H
        POP     04H
        POP     03H
        POP     02H
        POP     01H
        POP     00H
        POP     B
        POP     PSW
        POP     ACC
        RET
;**********************************
TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,00H,00H,00H,40H,00H        ;," ", " ","-"," "
        END

⌨️ 快捷键说明

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