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

📄 sz02.lst

📁 51单片机开发入门与典型实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  SZ02                                                                 01/04/2007 21:16:37 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN sz02.OBJ
ASSEMBLER INVOKED BY: C:\Keil 7.06\C51\BIN\A51.EXE sz02.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1      ;----------------------------------------------------------
                       2      ;文件名称:SZ02.ASM
                       3      ;程序功能:带定时闹铃时钟
                       4      ;----------------------------------------------------------
                       5      ;--------――― 时钟程序部分 ---――――――――
                       6      ;----- ――― 程序初始化 ――――――――――
                       7      ; 定义存放计时单元地址
                       8            ;....................
  0000                 9             ALB   EQU  20H.0    ;闹铃设置标志
                      10            ;....................    
  0030                11          BUF   EQU  30H ;30~33H 连续4字节存放显示器数据
  0034                12          HOUR  EQU  34H      ;存放小时变量
  0035                13          MIN   EQU  35H      ;存放分钟变量
  0036                14          SEC   EQU  36H      ;存放秒钟变量
  0037                15          DEDA  EQU  37H      ;存放5 ms 计数值
                      16            ;....................
  0038                17             HH    EQU  38H      ;闹铃设置小时变量
  0039                18             MM    EQU  39H      ;闹铃设置分钟变量
                      19            ;....................
                      20      ;按键输入引脚定义
  00A4                21         K1    EQU  P2.4     ;按键1引脚定义
  00A5                22         K2    EQU  P2.5     ;按键2引脚定义
  00A6                23         K3    EQU  P2.6     ;按键3引脚定义
  00A7                24         K4    EQU  P2.7     ;按键4引脚定义
                      25      
                      26      ;压电喇叭和指示灯引脚定义 
  00B4                27         SPK   EQU  P3.4     ;压电喇叭控制信号
  0090                28         WLED  EQU  P1.0     ;工作指示灯引脚定义
                      29      
                      30      ;程序开始执行地址 
0000                  31         ORG   0H          ;程序代码由地址0开始执行
0000 800B             32         JMP   MAIN
000B                  33         ORG   0BH         ;定时器 0 中断地址设置
000B 8052             34         JMP   TO_SRV
                      35     
                      36      ;--------- 主 程 序 --------――
                      37      
000D                  38       MAIN:                ;开始
                      39            ;...................
000D C200             40             CLR    ALB        ;清除闹铃标志 
                      41            ;...................
000F 3134             42         ACALL  BZ          ;压电喇叭连续两次鸣响一声
0011 3134             43         ACALL  BZ          
0013 3141             44         ACALL  LED_BL      ;LED 闪动,表示程序开始执行
0015 3127             45         ACALL  INIT        ;初始变化量
0017 1150             46         ACALL  INIT_TIMER  ;设置定时器
                      47      
                      48      ;加载显示器初值数据
0019 74C0             49       MOV   A, #0C0H  
001B F580             50       MOV   P0, A    
                      51      
                      52      ;无穷循环
001D                  53      LOOP:                 ;无穷循环
001D 119A             54         ACALL  CONV        ;转换 时时 分分 数据
                      55           ;....................
001F 31BB             56            ACALL  TIME_PRO   ;检查闹铃时间    
                      57           ;....................
0021 11CD             58         ACALL  DISP        ;扫描显示  
A51 MACRO ASSEMBLER  SZ02                                                                 01/04/2007 21:16:37 PAGE     2

                      59      
0023 20A406           60         JB    K1, M1       ;未按下K1键则继续扫描
0026 3141             61         ACALL  LED_BL      ;LED闪动
0028 11E7             62         ACALL  SET_TIME    ;设置目前时间
002A 80F1             63         JMP    LOOP        ;继续循环执行
                      64       
                      65       ;设置闹铃时间 
002C 20A506           66       M1:JB   K2,M2        ;未按下K2键则继续扫描
                      67           ;.....................
002F 3141             68            ACALL  LED_BL     
0031 315D             69            ACALL  SET_ATIME   ;设置闹铃时间
                      70           ;.....................
0033 80E8             71         JMP    LOOP        ;继续循环执行
                      72       
0035 20A602           73       M2:JB  K3, M3        ;未按下K3键则继续扫描 
0038 80E3             74         JMP   LOOP         ;继续循环执行
                      75      
003A 20A711           76       M3:JB  K4,M4         ;未按下K4键则继续扫描
                      77           ;...................
003D B200             78            CPL  ALB         
003F 300008           79            JNB  ALB,M31
                      80           
                      81           ;闹铃启动连续3次发出响声
0042 3134             82            ACALL  BZ
0044 3134             83            ACALL  BZ
0046 3134             84            ACALL  BZ
                      85           ;...................
0048 80D3             86         JMP  LOOP          ;继续循环执行
                      87           ;....................
004A                  88           M31:
004A 3134             89              ACALL  BZ         ;闹铃停止,发出一声响
004C 80CF             90              JMP   LOOP        ;继续循环执行
                      91           ;...................
004E                  92       M4:
004E 80CD             93         JMP   LOOP         ;继续循环执行
                      94      
                      95      ;----- 实现走时功能的子程序 ------――
                      96     
                      97      ;使用定时器0模式0计时
0050                  98      INIT_TIMER:   ;初始化定时器,使用定时器0模式1计时
0050 758900           99         MOV TMOD,#00000000B    ;设置定时器0工作模式为0
0053 75A882          100         MOV IE,  #10000010B    ;启用定时器0中断产生
0056 758A1C          101         MOV TL0, #(8192-4900)MOD 32      ;加载低字节
0059 758C66          102         MOV TH0, #(8192-4900)/32         ;加载高字节
005C D28C            103         SETB TR0               ;启动定时器0开始计时
005E 22              104         RET
                     105      ;-----------―――
                     106      ;中断服务程序
005F                 107      TO_SRV:    ;定时器0计时中断程序每隔5ms中断一次
005F C0E0            108         PUSH  ACC                  ;将累加器放入堆栈
0061 758A1C          109         MOV  TL0, #(8192-4900)MOD 32   ;加载低字节
0064 758C66          110         MOV  TH0, #(8192-4900)/32      ;加载高字节
0067 0537            111         INC  DEDA                    ;5ms计数值加1    
                     112       ;秒输出
0069 E537            113         MOV  A, DEDA
006B B4C829          114         CJNE  A,#200,TT1      ;是否1s到了
006E 753700          115         MOV  DEDA,  #0        ;计数值清除为0
0071 B290            116         CPL  WLED             ;LED灯亮灭变换
0073 0536            117         INC  SEC              ;秒计数加1
0075 E536            118         MOV  A,  SEC
0077 B43C1D          119         CJNE  A, #60, TT1;是否1min到了
                     120       ;分输出
007A 0535            121        INC  MIN            ;分计数加1
007C 753600          122        MOV  SEC,  #0      ;秒计数清除为0
007F E535            123        MOV  A,  MIN
0081 B43C13          124        CJNE  A, #60, TT1  ;是否1h到了
A51 MACRO ASSEMBLER  SZ02                                                                 01/04/2007 21:16:37 PAGE     3

                     125       ;时输出
0084 0534            126         INC  HOUR          ;小时计数加1
0086 753500          127         MOV  MIN,  #0      ;分计数清除为0
0089 E534            128         MOV  A,  HOUR
008B B41809          129         CJNE  A,#24, TT1  ;是否24h到了
008E 753600          130         MOV   SEC,  #0    ;秒钟变量清除为0
0091 753500          131         MOV   MIN,  #0    ;分钟变量清除为0
0094 753400          132         MOV   HOUR, #0   ;小时变量清除为0
0097                 133       TT1:
0097 D0E0            134         POP  ACC         ;将累加器由堆栈取出
0099 32              135         RETI
                     136     
                     137      ;----―― 实现显示功能的子程序 ---――――
                     138     
                     139      ;转换 时时:分分 数据
009A                 140      CONV:
                     141       ;转换小时数据
009A E534            142         MOV  A,  HOUR
009C 75F00A          143         MOV  B,  #10
009F 84              144         DIV  AB
00A0 9000BD          145         MOV  DPTR,#TABLE  ;查表转换
00A3 93              146         MOVC  A,  @A+DPTR
00A4 F530            147         MOV  BUF,  A
00A6 E5F0            148         MOV  A, B
00A8 93              149         MOVC  A,  @A+DPTR
00A9 F531            150         MOV  BUF+1,  A
                     151       ;转换分钟数据
00AB E535            152         MOV  A,  MIN
00AD 75F00A          153         MOV  B,  #10
00B0 84              154         DIV  AB
00B1 9000BD          155         MOV  DPTR,#TABLE  ;查表转换
00B4 93              156         MOVC  A,  @A+DPTR
00B5 F532            157         MOV  BUF+2,  A
00B7 E5F0            158         MOV  A, B
00B9 93              159         MOVC  A,  @A+DPTR
00BA F533            160         MOV  BUF+3,  A
00BC 22              161         RET
                     162      
                     163      ;字型数据编码表
00BD                 164      TABLE:
00BD C0F9A4B0        165         DB  0C0H,0F9H,0A4H,0B0H
00C1 999282F8        166         DB  99H,92H,82H,0F8H
00C5 80908883        167         DB  80H,90H,88H,83H
00C9 C6A1868E        168         DB  0C6H,0A1H,86H,8EH
                     169      
                     170      ;---------――――
                     171      ;扫描显示
00CD                 172      DISP:
00CD 7830            173         MOV  R0,  #BUF   ;指向显示器显示缓冲区起始地址
00CF 7A04            174         MOV  R2,  #4     ;循环执行4次
00D1 75E0F7          175         MOV  ACC, #11110111b;加载扫描信号初值11110111B
00D4                 176       S1:
00D4 C0E0            177         PUSH  ACC
00D6 E6              178         MOV  A, @R0      ;取出显示器数据
00D7 F580            179         MOV  P0, A       ;由P0送出一位显示器数据
00D9 D0E0            180         POP  ACC
00DB 85E0A0          181         MOV  P2, ACC     ;由P2送出扫描输出信号  
00DE 7D02            182         MOV  R5, #2      ;延迟一会儿
00E0 314C            183         ACALL  DELAY
                     184      ;改变扫描码 EX:XXXX1011 
00E2 03              185         RR   A           ;累加器向右移动一位
00E3 08              186         INC  R0          ;显示器显示缓冲区地址加1
00E4 DAEE            187         DJNZ R2, S1      ;循环判断是否继续执行
00E6 22              188         RET
                     189      
                     190      ;---―― 实现调整时间子程序 ――――――
A51 MACRO ASSEMBLER  SZ02                                                                 01/04/2007 21:16:37 PAGE     4

                     191     
                     192      ;设置目前时间
00E7                 193      SET_TIME:
00E7 C28C            194         CLR   TR0          ;定时器动作暂停
00E9 753600          195         MOV   SEC, #0      ;秒钟变量清除为0
00EC                 196       L0:
00EC 11CD            197         ACALL  DISP        ;扫描显示
                     198      
00EE 20A513          199         JB   K2,  L1       ;未按下K2键则继续扫描
00F1 30A5FD          200         JNB  K2,  $        ;有按下则等待放开来
                     201        ;K2小时调整   
00F4 0534            202         INC  HOUR          ;小时计数加1
00F6 E534            203         MOV  A, HOUR
00F8 B41803          204         CJNE  A,#24, L11   ;是否24H到了
00FB 753400          205         MOV  HOUR, #0      ;小时变量清除为0
00FE                 206       L11:
00FE 119A            207         ACALL  CONV        ;转换显示数据
0100 11CD            208         ACALL  DISP        ;扫描显示
0102 80E8            209         JMP    L0          ;继续程序执行
                     210      
0104 20A613          211       L1:JB  K3, L2        ;未按下K3键则继续扫描
0107 30A6FD          212          JNB  K3,$      ;有按下则等待放开来
                     213        ;K3分钟调整.
010A 0535            214         INC  MIN           ;分钟计数加1
010C E535            215         MOV  A,  MIN
010E B43C03          216         CJNE  A,#60, L21   ;是否60 min到了
0111 753500          217         MOV  MIN, #0       ;分钟变量清除为0
0114                 218       L21:
0114 119A            219         ACALL  CONV        ;转换显示数据
0116 11CD            220         ACALL  DISP        ;扫描显示
0118 80D2            221         JMP    L0          ;继续程序执行
                     222      
011A 20A7CF          223       L2: JB   K4,L0       ;未按下K4键则继续扫描
011D 30A7FD          224         JNB    K4, $       ;有按下则等待放开来
0120 3134            225         ACALL  BZ          ;压电喇叭鸣响一声
                     226        ;K4设置完成
0122 3141            227         ACALL  LED_BL      ;LED闪动

⌨️ 快捷键说明

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