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

📄 ex3-10.lst

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 LST
字号:
A51 MACRO ASSEMBLER  EX3_10                                                               06/23/2007 17:37:30 PAGE     1


MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ex3-10.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex3-10.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;--------------程序信息-----------------
                       2     ;文件名   : ex3-10.asm
                       3     ;版本     : 1.0
                       4     ;作者     :
                       5     ;修改时间 :
                       6     
                       7     ;--------------程序说明------------------
                       8     ;CHAP 3.10   电子万年历实例
                       9     
                      10     ;-----------常量和变量声明---------------
                      11     
  0090                12             KEYIN EQU P1;                           预定义宏变量,键盘输入口
  00B0                13             E EQU P3.0;                                     LCD使能端
  00B1                14             RW EQU P3.1;                                    LCD读写端
  00B3                15             RS EQU P3.3;                                    LCD 数据命令选择端
  00A0                16             LCDP EQU P2;                                    LCD 数据端口
  0021                17             SETF BIT 21H;                           SET标识位
  0022                18             ALARMF BIT 22H;                 ALARM标识位
  00A7                19              BF     EQU LCDP.7;             LCD忙标志位
  0000                20              LINEF  BIT 00H;                        换行标志位
                      21     
                      22     ;--------------预定义--------------------
                      23     
0000                  24                    ORG 0000H
0000 020003           25                    LJMP START
                      26     
                      27     ;------------中断入口地址分配------------
                      28                    ;ORG 0003H
                      29                    ;LJMP INT0PRG
                      30                    ;ORG 000BH
                      31                    ;LJMP INT1PRG
                      32                    ;ORG 0013H;
                      33                    ;LJMP
                      34                    ;ORG 0030H
                      35     
0003                  36     START:
0003 7400             37                     MOV A,#00H;                     A,R1,R2寄存器清零
0005 F8               38                     MOV R0,A;
0006 F9               39                     MOV R1,A;
0007 C221             40                     CLR SETF;                       标识位清除
0009 C222             41                     CLR ALARMF;                     
000B 1200A3           42     INIT:           LCALL LCDINIT;          LCD初始化
000E 12012F           43                     LCALL RTCINIT;          实时时钟初始化
                      44     
                      45     ;--------------初始化子程序--------------
0011 856081           46          MOV SP,60H;
                      47     ;--------------主程序--------------------
0014                  48     MAIN:
0014 120132           49                     LCALL KEYBOARD;         扫描键盘,获取键值
0017 E8               50                     MOV A,R0;                       
0018 B40C53           51                     CJNE  A,#0CH,MAINEND;   判断是否SET键按下
001B 1201BB           52                     LCALL LCDSETDISP;       显示SET的预先显示字符
001E A900             53                     MOV R1,00H;             键入字符计数
0020 AA40             54                     MOV R2,40H;             单片机内部存储地址
0022 120132           55              SETPRG:LCALL KEYBOARD;         扫描键盘
0025 D221             56                     SETB SETF;
0027 E8               57                     MOV A,R0;               读出键值
0028 F540             58                     MOV 40H,A;              
A51 MACRO ASSEMBLER  EX3_10                                                               06/23/2007 17:37:30 PAGE     2

002A 900201           59                     MOV DPTR,#LCDPOSDB;     LCD内部DDRAM地址
002D E9               60                     MOV A,R1;
002E 93               61                     MOVC A,@A+DPTR;         获取当前键入值显示地址
002F F5A0             62                     MOV LCDP,A;             写地址命令
0031 1200CF           63                     LCALL WINSTR;
0034 90020F           64                     MOV DPTR,#NUM;          根据键值读取相应显示字符编码
0037 93               65                     MOVC A,@A+DPTR;         
0038 F5A0             66                     MOV LCDP,A;             写入显示数字
003A 1200DA           67                     LCALL WDATA;
003D 09               68                     INC R1;                 计数器增一
003E 0A               69                     INC R2;
003F E9               70                     MOV A,R1;
0040 B90EDF           71                     CJNE R1,#0EH,SETPRG;    判断输入是否完备
                      72     
0043 B40D28           73                     CJNE A,#0DH,MAINEND; 判断是否ALARM键按下
0046 120131           74                     LCALL  LCDALARMDISP; ALARM键按下的处理程序与SET键基本一致,不再解释
0049 A900             75                     MOV R1,00H;
004B AA50             76                     MOV R2,50H;
004D 120132           77            ALARMPRG:LCALL KEYBOARD;         扫描键盘
0050 D222             78                     SETB ALARMF;
0052 E8               79                     MOV A,R0;
0053 F550             80                     MOV 50H,A;
0055 900209           81                     MOV DPTR,#ALARMPOSDB;
0058 E9               82                     MOV A,R1;
0059 93               83                     MOVC A,@A+DPTR;
005A F5A0             84                     MOV LCDP,A;
005C 1200CF           85                     LCALL WINSTR;
005F 90020F           86                     MOV DPTR,#NUM;
0062 93               87                     MOVC A,@A+DPTR;
0063 F5A0             88                     MOV LCDP,A;
0065 1200DA           89                     LCALL WDATA;
0068 09               90                     INC R1;
0069 0A               91                     INC R2;
006A E9               92                     MOV A,R1;
006B B906DF           93                     CJNE R1,#06H,ALARMPRG;
006E                  94     MAINEND: 
006E 120130           95                     LCALL RTCREAD;
0071 120077           96                     LCALL DISPLAY;
                      97     
                      98     
0074 020014           99     LJMP MAIN
                     100     
                     101     
                     102     ;----------------子程序------------------
                     103     
                     104     ;---------------------------------
                     105     ;  万年历补充和更改子程序部分
                     106     ;---------------------------------
0077                 107     DISPLAY:                        ;显示更新子程序,RTCREAD 将秒,分,时,送30H, 31H, 32H
                     108                                     ;星期,日,月,年送33H, 34H, 35H, 36H
0077 E532            109                     MOV A,32H;              转化RTC读出数据为可显示的分位数据
0079 D4              110                     DA A;                   十六进制转化为BCD编码
007A FC              111                     MOV R4,A;
007B 540F            112                     ANL A,#0FH;             获取时钟"时"单位的个位
007D F54A            113                     MOV 4AH,A;              将个位存入更新函数个位刷新读取地址
007F EC              114                     MOV A,R4;       
0080 C4              115                     SWAP A;
0081 540F            116                     ANL A,#0FH;             获取时钟"时"单位的十位
0083 F549            117                     MOV 49H,A;
                     118                                             ;同样从RTCREAD获取的时间信息中,依次转换存入相应单

⌨️ 快捷键说明

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