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

📄 sz03.lst

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


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------------------------------
                       2      ;文件名称:SZ03.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                        ;--------------------------------
  003A                21                         SEC0  EQU  3AH     ;存放旧的秒数
  003B                22                         MM_D  EQU  3BH     ;倒数时间分钟数
  003C                23                         SS_D  EQU  3CH     ;倒数时间秒钟数
                      24                        ;--------------------------------
                      25      ;按键输入引脚定义
  00A4                26         K1    EQU  P2.4     ;按键1引脚定义
  00A5                27         K2    EQU  P2.5     ;按键2引脚定义
  00A6                28         K3    EQU  P2.6     ;按键3引脚定义
  00A7                29         K4    EQU  P2.7     ;按键4引脚定义
                      30      
                      31      ;压电喇叭和指示灯引脚定义 
  00B4                32         SPK   EQU  P3.4     ;压电喇叭控制信号
  0090                33         WLED  EQU  P1.0     ;工作指示灯引脚定义
                      34      
                      35      ;程序开始执行地址 
0000                  36         ORG   0H          ;程序代码由地址0开始执行
0000 800B             37         JMP   MAIN
000B                  38         ORG   0BH         ;定时器 0 中断地址设置
000B 8056             39         JMP   TO_SRV
                      40     
                      41      ;--------- 主 程 序 --------――
                      42      
000D                  43       MAIN:                ;开始
                      44            ;...................
000D C200             45             CLR    ALB        ;清除闹铃标志 
                      46            ;...................
000F 3138             47         ACALL  BZ          ;压电喇叭连续两次鸣响一声
0011 3138             48         ACALL  BZ          
0013 3145             49         ACALL  LED_BL      ;LED 闪动,表示程序开始执行
0015 312B             50         ACALL  INIT        ;初始变化量
0017 1154             51         ACALL  INIT_TIMER  ;设置定时器
                      52      
                      53      ;加载显示器初值数据
0019 74C0             54       MOV   A, #0C0H  
001B F580             55       MOV   P0, A    
                      56      
                      57      ;无穷循环
001D                  58      LOOP:                 ;无穷循环
A51 MACRO ASSEMBLER  SZ03                                                                 01/04/2007 21:53:58 PAGE     2

001D 119E             59         ACALL  CONV        ;转换 时时 分分 数据
                      60           ;....................
001F 31BF             61            ACALL  TIME_PRO   ;检查闹铃时间    
                      62           ;....................
0021 11D1             63         ACALL  DISP        ;扫描显示  
                      64      
0023 20A406           65         JB    K1, M1       ;未按下K1键则继续扫描
0026 3145             66         ACALL  LED_BL      ;LED闪动
0028 11EB             67         ACALL  SET_TIME    ;设置目前时间
002A 80F1             68         JMP    LOOP        ;继续循环执行
                      69       
                      70       ;设置闹铃时间 
002C 20A506           71       M1:JB   K2,M2        ;未按下K2键则继续扫描
                      72           ;.....................
002F 3145             73            ACALL  LED_BL     
0031 3161             74            ACALL  SET_ATIME   ;设置闹铃时间
                      75           ;.....................
0033 80E8             76         JMP    LOOP        ;继续循环执行
                      77       
                      78        ;设置倒计时间
0035 20A606           79       M2:JB  K3, M3        ;未按下K3键则继续扫描 
                      80                        ;---------------------------------
0038 3145             81                          ACALL  LED_BL 
003A 31E5             82                          ACALL  DOWN_ATIME   ;设置倒计时间
                      83                         ;--------------------------------
003C 80DF             84         JMP   LOOP         ;继续循环执行
                      85      
003E 20A711           86       M3:JB  K4,M4         ;未按下K4键则继续扫描
                      87           ;...................
0041 B200             88            CPL  ALB         
0043 300008           89            JNB  ALB,M31
                      90           
                      91           ;闹铃启动连续3次发出响声
0046 3138             92            ACALL  BZ
0048 3138             93            ACALL  BZ
004A 3138             94            ACALL  BZ
                      95           ;...................
004C 80CF             96         JMP  LOOP          ;继续循环执行
                      97           ;....................
004E                  98           M31:
004E 3138             99              ACALL  BZ         ;闹铃停止,发出一声响
0050 80CB            100              JMP   LOOP        ;继续循环执行
                     101           ;...................
0052                 102       M4:
0052 80C9            103         JMP   LOOP         ;继续循环执行
                     104      
                     105      ;----- 实现走时功能的子程序 ------――
                     106     
                     107      ;使用定时器0模式0计时
0054                 108      INIT_TIMER:   ;初始化定时器,使用定时器0模式1计时
0054 758900          109         MOV TMOD,#00000000B    ;设置定时器0工作模式为0
0057 75A882          110         MOV IE,  #10000010B    ;启用定时器0中断产生
005A 758A1C          111         MOV TL0, #(8192-4900)MOD 32      ;加载低字节
005D 758C66          112         MOV TH0, #(8192-4900)/32         ;加载高字节
0060 D28C            113         SETB TR0               ;启动定时器0开始计时
0062 22              114         RET
                     115      ;-----------―――
                     116      ;中断服务程序
0063                 117      TO_SRV:    ;定时器0计时中断程序每隔5ms中断一次
0063 C0E0            118         PUSH  ACC                  ;将累加器放入堆栈
0065 758A1C          119         MOV  TL0, #(8192-4900)MOD 32   ;加载低字节
0068 758C66          120         MOV  TH0, #(8192-4900)/32      ;加载高字节
006B 0537            121         INC  DEDA                    ;5ms计数值加1    
                     122       ;秒输出
006D E537            123         MOV  A, DEDA
006F B4C829          124         CJNE  A,#200,TT1      ;是否1s到了
A51 MACRO ASSEMBLER  SZ03                                                                 01/04/2007 21:53:58 PAGE     3

0072 753700          125         MOV  DEDA,  #0        ;计数值清除为0
0075 B290            126         CPL  WLED             ;LED灯亮灭变换
0077 0536            127         INC  SEC              ;秒计数加1
0079 E536            128         MOV  A,  SEC
007B B43C1D          129         CJNE  A, #60, TT1;是否1min到了
                     130       ;分输出
007E 0535            131        INC  MIN            ;分计数加1
0080 753600          132        MOV  SEC,  #0      ;秒计数清除为0
0083 E535            133        MOV  A,  MIN
0085 B43C13          134        CJNE  A, #60, TT1  ;是否1h到了
                     135       ;时输出
0088 0534            136         INC  HOUR          ;小时计数加1
008A 753500          137         MOV  MIN,  #0      ;分计数清除为0
008D E534            138         MOV  A,  HOUR
008F B41809          139         CJNE  A,#24, TT1  ;是否24h到了
0092 753600          140         MOV   SEC,  #0    ;秒钟变量清除为0
0095 753500          141         MOV   MIN,  #0    ;分钟变量清除为0
0098 753400          142         MOV   HOUR, #0   ;小时变量清除为0
009B                 143       TT1:
009B D0E0            144         POP  ACC         ;将累加器由堆栈取出
009D 32              145         RETI
                     146     
                     147      ;----―― 实现显示功能的子程序 ---――――
                     148     
                     149      ;转换 时时:分分 数据
009E                 150      CONV:
                     151       ;转换小时数据
009E E534            152         MOV  A,  HOUR
00A0 75F00A          153         MOV  B,  #10
00A3 84              154         DIV  AB
00A4 9000C1          155         MOV  DPTR,#TABLE  ;查表转换
00A7 93              156         MOVC  A,  @A+DPTR
00A8 F530            157         MOV  BUF,  A
00AA E5F0            158         MOV  A, B
00AC 93              159         MOVC  A,  @A+DPTR
00AD F531            160         MOV  BUF+1,  A
                     161       ;转换分钟数据
00AF E535            162         MOV  A,  MIN
00B1 75F00A          163         MOV  B,  #10
00B4 84              164         DIV  AB
00B5 9000C1          165         MOV  DPTR,#TABLE  ;查表转换
00B8 93              166         MOVC  A,  @A+DPTR
00B9 F532            167         MOV  BUF+2,  A
00BB E5F0            168         MOV  A, B
00BD 93              169         MOVC  A,  @A+DPTR
00BE F533            170         MOV  BUF+3,  A
00C0 22              171         RET
                     172      
                     173      ;字型数据编码表
00C1                 174      TABLE:
00C1 C0F9A4B0        175         DB  0C0H,0F9H,0A4H,0B0H
00C5 999282F8        176         DB  99H,92H,82H,0F8H
00C9 80908883        177         DB  80H,90H,88H,83H
00CD C6A1868E        178         DB  0C6H,0A1H,86H,8EH
                     179      
                     180      ;---------――――
                     181      ;扫描显示
00D1                 182      DISP:
00D1 7830            183         MOV  R0,  #BUF   ;指向显示器显示缓冲区起始地址
00D3 7A04            184         MOV  R2,  #4     ;循环执行4次
00D5 75E0F7          185         MOV  ACC, #11110111b;加载扫描信号初值11110111B
00D8                 186       S1:
00D8 C0E0            187         PUSH  ACC
00DA E6              188         MOV  A, @R0      ;取出显示器数据
00DB F580            189         MOV  P0, A       ;由P0送出一位显示器数据
00DD D0E0            190         POP  ACC

⌨️ 快捷键说明

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