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

📄 sz01.lst

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


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------------------------------
                       2      ;文件名称:SZ01.ASM
                       3      ;程序功能:时钟
                       4      ;----------------------------------------------------------
                       5      
                       6      ;----- ――― 程序初始化 ――――――――――
                       7      ; 定义存放计时单元地址
                       8              
  0030                 9          BUF   EQU  30H ;30~33H 连续4字节存放显示器数据
  0034                10          HOUR  EQU  34H      ;存放小时变量
  0035                11          MIN   EQU  35H      ;存放分钟变量
  0036                12          SEC   EQU  36H      ;存放秒钟变量
  0037                13          DEDA  EQU  37H      ;存放5 ms 计数值
                      14            
                      15      ;按键输入引脚定义
  00A4                16         K1    EQU  P2.4     ;按键1引脚定义
  00A5                17         K2    EQU  P2.5     ;按键2引脚定义
  00A6                18         K3    EQU  P2.6     ;按键3引脚定义
  00A7                19         K4    EQU  P2.7     ;按键4引脚定义
                      20      
                      21      ;压电喇叭和指示灯引脚定义 
  00B4                22         SPK   EQU  P3.4     ;压电喇叭控制信号
  0090                23         WLED  EQU  P1.0     ;工作指示灯引脚定义
                      24      
                      25      ;程序开始执行地址 
0000                  26         ORG   0H          ;程序代码由地址0开始执行
0000 800B             27         JMP   MAIN
000B                  28         ORG   0BH         ;定时器 0 中断地址设置
000B 803B             29         JMP   TO_SRV
                      30     
                      31      ;--------- 主 程 序 --------――
                      32      
000D                  33       MAIN:                ;开始
                      34           
000D 311D             35         ACALL  BZ          ;压电喇叭连续两次鸣响一声
000F 311D             36         ACALL  BZ          
0011 312A             37         ACALL  LED_BL      ;LED 闪动,表示程序开始执行
0013 3110             38         ACALL  INIT        ;初始变化量
0015 1139             39         ACALL  INIT_TIMER  ;设置定时器
                      40      
                      41      ;加载显示器初值数据
0017 74C0             42       MOV   A, #0C0H  
0019 F580             43       MOV   P0, A    
                      44      
                      45      ;无穷循环
001B                  46      LOOP:                 ;无穷循环
001B 1183             47         ACALL  CONV        ;转换 时时 分分 数据
001D 11B6             48         ACALL  DISP        ;扫描显示  
                      49      
001F 20A406           50         JB    K1, M1       ;未按下K1键则继续扫描
0022 312A             51         ACALL  LED_BL      ;LED闪动
0024 11D0             52         ACALL  SET_TIME    ;设置目前时间
0026 80F3             53         JMP    LOOP        ;继续循环执行
                      54       
                      55       
0028 20A502           56       M1:JB   K2,M2        ;未按下K2键则继续扫描
002B 80EE             57         JMP    LOOP        ;继续循环执行
                      58       
A51 MACRO ASSEMBLER  SZ01                                                                 01/04/2007 21:35:15 PAGE     2

002D 20A602           59       M2:JB  K3, M3        ;未按下K3键则继续扫描 
0030 80E9             60         JMP   LOOP         ;继续循环执行
                      61      
0032 20A702           62       M3:JB  K4,M4         ;未按下K4键则继续扫描
0035 80E4             63         JMP  LOOP          ;继续循环执行
                      64          
0037                  65       M4:
0037 80E2             66         JMP   LOOP         ;继续循环执行
                      67      
                      68      ;----- 实现走时功能的子程序 ------――
                      69     
                      70      ;使用定时器0模式0计时
0039                  71      INIT_TIMER:   ;初始化定时器,使用定时器0模式1计时
0039 758900           72         MOV TMOD,#00000000B    ;设置定时器0工作模式为0
003C 75A882           73         MOV IE,  #10000010B    ;启用定时器0中断产生
003F 758A18           74         MOV TL0, #(8192-5000)MOD 32      ;加载低字节
0042 758C63           75         MOV TH0, #(8192-5000)/32         ;加载高字节
0045 D28C             76         SETB TR0               ;启动定时器0开始计时
0047 22               77         RET
                      78      ;-----------―――
                      79      ;中断服务程序
0048                  80      TO_SRV:    ;定时器0计时中断程序每隔5ms中断一次
0048 C0E0             81         PUSH  ACC                  ;将累加器放入堆栈
004A 758A18           82         MOV  TL0, #(8192-5000)MOD 32   ;加载低字节
004D 758C63           83         MOV  TH0, #(8192-5000)/32      ;加载高字节
0050 0537             84         INC  DEDA                    ;5ms计数值加1    
                      85       ;秒输出
0052 E537             86         MOV  A, DEDA
0054 B4C829           87         CJNE  A,#200,TT1      ;是否1s到了
0057 753700           88         MOV  DEDA,  #0        ;计数值清除为0
005A B290             89         CPL  WLED             ;LED灯亮灭变换
005C 0536             90         INC  SEC              ;秒计数加1
005E E536             91         MOV  A,  SEC
0060 B43C1D           92         CJNE  A, #60, TT1;是否1min到了
                      93       ;分输出
0063 0535             94        INC  MIN            ;分计数加1
0065 753600           95        MOV  SEC,  #0      ;秒计数清除为0
0068 E535             96        MOV  A,  MIN
006A B43C13           97        CJNE  A, #60, TT1  ;是否1h到了
                      98       ;时输出
006D 0534             99         INC  HOUR          ;小时计数加1
006F 753500          100         MOV  MIN,  #0      ;分计数清除为0
0072 E534            101         MOV  A,  HOUR
0074 B41809          102         CJNE  A,#24, TT1  ;是否24h到了
0077 753600          103         MOV   SEC,  #0    ;秒钟变量清除为0
007A 753500          104         MOV   MIN,  #0    ;分钟变量清除为0
007D 753400          105         MOV   HOUR, #0   ;小时变量清除为0
0080                 106       TT1:
0080 D0E0            107         POP  ACC         ;将累加器由堆栈取出
0082 32              108         RETI
                     109     
                     110      ;----―― 实现显示功能的子程序 ---――――
                     111     
                     112      ;转换 时时:分分 数据
0083                 113      CONV:
                     114       ;转换小时数据
0083 E534            115         MOV  A,  HOUR
0085 75F00A          116         MOV  B,  #10
0088 84              117         DIV  AB
0089 9000A6          118         MOV  DPTR,#TABLE  ;查表转换
008C 93              119         MOVC  A,  @A+DPTR
008D F530            120         MOV  BUF,  A
008F E5F0            121         MOV  A, B
0091 93              122         MOVC  A,  @A+DPTR
0092 F531            123         MOV  BUF+1,  A
                     124       ;转换分钟数据
A51 MACRO ASSEMBLER  SZ01                                                                 01/04/2007 21:35:15 PAGE     3

0094 E535            125         MOV  A,  MIN
0096 75F00A          126         MOV  B,  #10
0099 84              127         DIV  AB
009A 9000A6          128         MOV  DPTR,#TABLE  ;查表转换
009D 93              129         MOVC  A,  @A+DPTR
009E F532            130         MOV  BUF+2,  A
00A0 E5F0            131         MOV  A, B
00A2 93              132         MOVC  A,  @A+DPTR
00A3 F533            133         MOV  BUF+3,  A
00A5 22              134         RET
                     135      
                     136      ;字型数据编码表
00A6                 137      TABLE:
00A6 C0F9A4B0        138         DB  0C0H,0F9H,0A4H,0B0H
00AA 999282F8        139         DB  99H,92H,82H,0F8H
00AE 80908883        140         DB  80H,90H,88H,83H
00B2 C6A1868E        141         DB  0C6H,0A1H,86H,8EH
                     142      
                     143      ;---------――――
                     144      ;扫描显示
00B6                 145      DISP:
00B6 7830            146         MOV  R0,  #BUF   ;指向显示器显示缓冲区起始地址
00B8 7A04            147         MOV  R2,  #4     ;循环执行4次
00BA 75E0F7          148         MOV  ACC, #11110111b;加载扫描信号初值11110111B
00BD                 149       S1:
00BD C0E0            150         PUSH  ACC
00BF E6              151         MOV  A, @R0      ;取出显示器数据
00C0 F580            152         MOV  P0, A       ;由P0送出一位显示器数据
00C2 D0E0            153         POP  ACC

⌨️ 快捷键说明

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