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

📄 定时器6.lst

📁 这个是大学的计算机接口实验课上经常用到的原程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
0117 C083            191                         PUSH  DPH
0119 75D008          192                         MOV   PSW, #08H              ;选用寄存器组1
011C C28C            193                         CLR   TR0                    ;暂停计时
011E 74B7            194                         MOV   A,#0B7H                ;中断同步修正
0120 258A            195                         ADD   A,TL0
0122 F58A            196                         MOV   TL0,A
0124 743C            197                         MOV   A,#3CH
0126 258C            198                         ADD   A,TH0
0128 F58C            199                         MOV   TH0,A
012A D28C            200                         SETB  TR0                    ;恢复计时
012C 153C            201                         DEC   TCOUNT                 ;定时器T0每50 000毫秒溢出一次,则
012E E53C            202                         MOV   A,  TCOUNT             ; 溢出10次为0.5秒
0130 7028            203                         JNZ   OUTT0                  ;判断是否到半秒
0132 753C0A          204                         MOV   TCOUNT, #0AH           ;
0135 B297            205                         CPL   LED4                           ; 若到半秒LED取反
0137 309720          206                         JNB   LED4, OUTT0         ;LED每闪烁一次是一秒
013A 7831            207                         MOV   R0, #SH             ;移入秒位的地址
013C D220            208                         SETB  IFDEC                ;BCD子程序参数,使其做减法
013E 316A            209                         ACALL ADDBCD            ;调用BCD子程序, 秒减1
0140 BB9917          210                         CJNE  R3, #99H, OUTT0      ;判断秒要否借位
0143 753105          211                         MOV   SH, #05H            ;要借位则
0146 753009          212                         MOV   SL, #09H            ; 送数据59(否则显示99)
0149 7833            213                         MOV   R0, #MH             ;移入分位的地址
014B 316A            214                         ACALL ADDBCD                   ;分减1
014D BB990A          215                         CJNE  R3, #99H, OUTT0     ;判断分要否借位
0150 753305          216                         MOV   MH, #05H
0153 753209          217                         MOV   ML, #09H
0156 7835            218                         MOV   R0, #HH
0158 316A            219                         ACALL ADDBCD
015A D083            220                 OUTT0:  POP   DPH                           ;恢复现场
015C D082            221                         POP   DPL
015E D0D0            222                         POP   PSW
0160 D0E0            223                         POP   ACC
0162 D2AF            224                         SETB  EA
0164 32              225                         RETI                                ;中断返回
0165 00              226                         NOP
0166 00              227                         NOP
0167 02040D          228                         LJMP ERR                    ;软件陷阱
                     229             ;
                     230             ;
                     231                 ;**************************
                     232                 ;   BCD子程序(加1或减1 )  ;
                     233                 ;**************************
016A E6              234        ADDBCD: MOV   A, @R0           ;移入被操作数的高位
016B 18              235                 DEC   R0                ;指针减一
016C C4              236                 SWAP  A
016D 46              237                 ORL   A, @R0            ;移入被操作数的低位
016E 75F001          238                 MOV   B, #01H           ;B寄存器送立即数#01H
0171 A220            239                 MOV   C, IFDEC          ;若 减法标志位为1,则
0173 92F3            240                 MOV   B.3,  C           ;
0175 92F4            241                 MOV   B.4,  C           ; B寄存器的值被改为#99H
0177 92F7            242                 MOV   B.7,  C           ;
0179 25F0            243                 ADD   A, B              ; 对一个压缩的BCD码加#99H等于对其减一
017B D4              244                 DA    A                 ;BCD码调整
017C FB              245                 MOV   R3, A             ;暂存结果
017D 540F            246                 ANL   A, #0FH           ;取低位码
017F F6              247                 MOV   @R0, A           ;存数
0180 EB              248                 MOV   A, R3             ;取回结果
0181 08              249                 INC   R0                ;指针加一
0182 C4              250                 SWAP  A                ;交换
0183 540F            251                 ANL   A, #0FH          ;取结果数的高位
0185 F6              252                 MOV   @R0, A          ;存数
0186 22              253                 RET
0187 00              254                 NOP
0188 00              255                 NOP
0189 02040D          256                 LJMP        ERR             ;软件陷阱
A51 MACRO ASSEMBLER  定时器6                                                              04/14/2005 16:26:25 PAGE     5

                     257                 ;
                     258             ;**************
                     259             ;   加1程序   ;
                     260             ;**************
018C A83D            261             ADDONE: MOV  R0, ADDRES   ;移入被加数单元的地址
018E C220            262                      CLR   IFDEC         ;设定BCD子程序做加法
0190 316A            263                      ACALL ADDBCD      ;调用BCD子程序
0192 C3              264                      CLR   C             ;判断被加数是否大于
0193 EB              265                      MOV   A,  R3       ;最大值"MAX"
0194 B53E00          266                      CJNE  A,  MAX, JGOVER
0197 4004            267              JGOVER: JC    ENDADO
0199 E4              268                      CLR   A            ;若大于"MAX",则清零
019A F6              269                       MOV   @R0, A
019B 18              270                       DEC   R0
019C F6              271                       MOV   @R0, A
019D 22              272                  ENDADO: RET
019E 00              273                       NOP
019F 00              274                       NOP
01A0 02040D          275                       LJMP          ERR       ;软件陷阱
                     276                 ;
                     277             ;******************
                     278                 ;   调时快进程序  ;
                     279             ;******************
01A3 C239            280             QUICK:   CLR   LPLMOD      ;设定显示方式不闪烁
01A5 C23A            281                       CLR   HPLMOD
01A7 318C            282                       ACALL ADDONE      ;调用加1子程序
01A9 8C36            283                       MOV   L0,  R4       ;将工作模式选择数移入显存
01AB 0536            284                       INC   L0             ;加1转化成显示值
01AD 71D1            285                       ACALL KEYDLY       ;延时
01AF 71E9            286                       ACALL DL100
01B1 30B1EF          287                       JNB   MKEY, QUICK      ;判断键是否松开
01B4 D239            288                       SETB  LPLMOD          ;若松开则恢复闪烁显示方式
01B6 BE0204          289                       CJNE  R6, #02H, ENDQUK
01B9 D23A            290                       SETB  HPLMOD
01BB C239            291                       CLR   LPLMOD
01BD 22              292              ENDQUK: RET
01BE 00              293                       NOP
01BF 00              294                       NOP
01C0 02040D          295                       LJMP ERR             ;软件陷阱
                     296                 ;
                     297     ;
                     298             ;******************
                     299                 ;   功能菜单程序  ;
                     300                 ;******************
01C3 7E00            301                 MENU: MOV   R6,  #00H               ; 初始化;  R6 计功能键按键次数
01C5 753D05          302                    MOV   ADDRES,  #05H   ; 将 R5 的地址送入,以便于改变 R4 的值
01C8 753E04          303                    MOV   MAX, #04H        ; 定义工作模式选择寄存器R4 的最大值
01CB 753A36          304                    MOV   DSPLYP, #L0       ;定义显示指针指向显存
01CE D239            305                    SETB  LPLMOD                     ;设定低两位数闪烁
01D0 C23A            306                    CLR   HPLMOD
01D2 8C36            307                    MOV   L0,  R4            ;送显示数据"F-0X"
01D4 0536            308                    INC    L0
01D6 753700          309                    MOV   L1,  #00H
01D9 75380B          310                    MOV   L2,  #0BH
01DC 753900          311                    MOV   L3,  #00H
01DF D297            312                    SETB  LED4
                     313                 ;
01E1 711F            314            WAITFK: ACALL DISPLY              ;等待F键释放
01E3 30B0FB          315                    JNB   FKEY,  WAITFK
01E6 711F            316            MENU1:  ACALL DISPLY
01E8 20B130          317                     JB    MKEY,  JGFKEY       ;M键扫描
01EB 71D1            318                     ACALL KEYDLY             ;延时消抖动
01ED 20B12B          319                     JB    MKEY,  JGFKEY       ; 未按下则转F键扫描
01F0 BE0012          320                     CJNE  R6, #00H, NEXT1      ;
01F3 753000          321                     MOV   SL, #00H            ;若中途改变定时方式,则清除原计时数据
01F6 753100          322                     MOV   SH, #00H
A51 MACRO ASSEMBLER  定时器6                                                              04/14/2005 16:26:25 PAGE     6

01F9 753200          323                     MOV   ML, #00H
01FC 753300          324                     MOV   MH, #00H
01FF 753400          325                     MOV   HL, #00H
0202 753500          326                     MOV   HH, #00H
0205 7A00            327            NEXT1:  MOV   R2,  #00H            ;R2用于判断按键时间是否超过0.5秒
0207 318C            328            NEXT2:  ACALL ADDONE             ;调用加1程序
0209 8C36            329                     MOV   L0,  R4              ;移入工作方式选择数
020B 0536            330                     INC    L0
                     331                     ;
020D 711F            332            WAITMK: ACALL DISPLY                 ;等待M键释放
020F 0A              333                     INC   R2                    ;R2自增一
0210 C3              334                     CLR   C
0211 BAC800          335                     CJNE  R2, #0C8H, JGQUIC    ;若R2大于等于200则调用快进子程序
0214 4002            336            JGQUIC:  JC    WATMK1
0216 31A3            337                      ACALL QUICK
0218 30B1F2          338                WATMK1: JNB   MKEY,  WAITMK      ; R2小于200则等待M键释放
                     339                     ;
021B 20B0C8          340            JGFKEY: JB    FKEY,  MENU1        ;功能(F)键扫描
021E 71D1            341                    ACALL KEYDLY             ;延时消抖动
0220 20B0C3          342                    JB    FKEY,  MENU1        ;键未按下则转修改(M)键扫描
0223 0E              343                    INC   R6                   ;F键按键次数加1
0224 EE              344                    MOV   A,  R6              ;移入按键次数
0225 23              345                    RL    A                        ;指针放大
0226 90022A          346                    MOV   DPTR,  #FUNTAB
0229 73              347                    JMP   @A+DPTR            ;根据按键次数跳转到相应的程序段
022A 21E1            348               FUNTAB:       AJMP  WAITFK
022C 4136            349                     AJMP  SETLOW
022E 415B            350                     AJMP  SETHI
0230 417E            351                     AJMP  ENDMEN
0232 00              352                     NOP
0233 00              353                     NOP
0234 417E            354                     AJMP  ENDMEN
                     355             ;STWKMD:                             ;工作模式设定,不需另外改变菜单
                     356             ;
0236 753E60          357             SETLOW:   MOV   MAX, #60H         ;设置低位(秒位或分位)
0239 EC              358                       MOV   A,  R4             ;移入工作模式选择数
023A 23              359                       RL    A                             ;指针放大
023B 90023F          360                       MOV   DPTR,  #FTAB1
023E 73              361                       JMP   @A+DPTR          ;根据工作模式选择数跳转到相应的程序段
023F 414B            362                FTAB1:  AJMP  SETSS
0241 4153            363                     AJMP  SETM60
0243 414B            364                     AJMP  SETSS
0245 4153            365                     AJMP  SETM60
0247 00              366                     NOP
0248 00              367                     NOP
0249 21E1            368                    AJMP  WAITFK
024B 753A30          369     SETSS:      MOV   DSPLYP, #SL          ;设定显示区域为MM:SS
024E 753D31          370                     MOV   ADDRES, #SH
0251 21E1            371                     AJMP  WAITFK
0253 753A32          372             SETM60:  MOV   DSPLYP,  #ML       ; 设定显示区域为HH:MM
0256 753D33          373                     MOV   ADDRES,  #MH
0259 21E1            374                     AJMP  WAITFK
                     375                 ;
025B C239            376             SETHI:     CLR   LPLMOD               ;设置高位(分位或时位)
025D D23A            377                     SETB  HPLMOD              ;高两位数码管闪烁
025F 753E31          378                     MOV   MAX, #31H           ;最大数为30
0262 EC              379                     MOV   A,  R4              ;移入工作模式选择数
0263 23              380                     RL    A                    ;指针放大
0264 900268          381                     MOV   DPTR,  #FTAB2      ;移入表首地址
0267 73              382                     JMP   @A+DPTR           ;根据工作模式选择数跳转到相应的程序段
0268 4174            383             FTAB2:      AJMP  SETM30
026A 4179            384                         AJMP  SETHH
026C 4174            385                         AJMP  SETM30
026E 4179            386                         AJMP  SETHH
0270 00              387                         NOP
0271 00              388                         NOP
A51 MACRO ASSEMBLER  定时器6                                                              04/14/2005 16:26:25 PAGE     7

0272 21E1            389                         AJMP  WAITFK           ;返回等待键释放

⌨️ 快捷键说明

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