📄 ds1302-dsy.lst
字号:
A51 MACRO ASSEMBLER DS1302_DSY 03/29/2005 16:20:14 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN DS1302-DSY.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE DS1302-DSY.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************************
2 ;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - DS1302数码管显示电子钟 *
3 ;* 文件: DS1302_DSY.asm *
4 ;* 日期: 2005-3-20 *
5 ;* 版本: 1.0 *
6 ;* 作者: gguoqing *
7 ;* 邮箱: gguoqing@willar.com *
8 ;* 网站: http://www.willar.com *
9 ;********************************************************************************
10 ;* 描述: *
11 ;* DS1302数码管显示电子钟 *
12 ;* *
13 ;* 使用方法参考readme.txt文档 *
14 ;* *
15 ;* *
16 ;********************************************************************************
17 ;* 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
18 ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
19 ;********************************************************************************
20
21
22 ;ME300B
23 ;8位数码管显示
24 ;P0 为段码口、P2 为位码口
25 ;晶振 11.0592M
26 ;时钟芯片:DS1302
27
28 ;************** DS1302 端口位定义 **************
0091 29 IO_DATA BIT P1.1 ; 数据传送总线
0090 30 SCLK BIT P1.0 ; 时钟控制总线
0092 31 RST BIT P1.2 ; 复位总线
32
0094 33 K1 EQU P1.4 ;独立键
0095 34 K2 EQU P1.5
0096 35 K3 EQU P1.6
0097 36 K4 EQU P1.7
37
00B7 38 BEEP EQU P3.7 ;蜂鸣器
0093 39 RELAY EQU P1.3 ;继电器
40
0022 41 T_CONU EQU 22H ;中断计数
0023 42 TIME_L EQU 23H ;定时初值
0024 43 TIME_H EQU 24H
44
0050 45 TIME_DATA EQU 50H ;显示时间单元首地址
0060 46 DATE_DATA EQU 60H ;显示日期单元首地址
0058 47 DS_DATA EQU 58H ;显示定时时间单元首地址
48 ;------------------------------------------------
0000 49 ORG 0000H
0000 2100 50 AJMP MAIN
51
000B 52 ORG 000BH
000B 2165 53 AJMP INT_T0
54
0100 55 ORG 0100H
56 ;------------------------------------------------
0100 57 MAIN:
0100 758901 58 MOV TMOD,#01H ;T0,方式1
A51 MACRO ASSEMBLER DS1302_DSY 03/29/2005 16:20:14 PAGE 2
0103 752300 59 MOV TIME_L,#00H ;50MS定时值
0106 75244C 60 MOV TIME_H,#4CH
0109 752200 61 MOV T_CONU,#00H ;中断次数
010C 75A882 62 MOV IE,#82H ;EA=1,ET0=1
63
010F 7400 64 MOV A,#00H
0111 7840 65 MOV R0,#40H ;从40H单元开始
0113 7940 66 MOV R1,#40H ;清64个单元
0115 F6 67 M_CLEAR: MOV @R0,A
0116 08 68 INC R0
0117 D9FC 69 DJNZ R1,M_CLEAR
70
0119 757F0A 71 MOV 7FH,#0AH ;送熄灭符
011C D2B7 72 SETB BEEP
011E 1206BA 73 LCALL TIME_DELAY ;调显示延时
0121 120180 74 LCALL PROSET ;DS1302初始化
75
0124 76 MAIN1:
0124 120190 77 LCALL GET_TIME ;从DS1302读数据程序
0127 120235 78 LCALL CHULI ;实时时间数据处理
012A 7850 79 MOV R0,#TIME_DATA ;显示时、分、秒
012C 1202A2 80 LCALL DISP
012F 7850 81 MOV R0,#TIME_DATA
0131 1202AE 82 LCALL TIME_DISPLAY
0134 1202DA 83 LCALL SET_KEY ;键功能程序
0137 12068A 84 LCALL COMP ;实时时间与定时时间比较
013A 2094E7 85 JB K1,MAIN1
013D D1DC 86 CALL BEEP_BL
013F 87 MAIN2:
013F 120235 88 LCALL CHULI ;日期数据处理
0142 7860 89 MOV R0,#DATE_DATA
0144 1202A2 90 LCALL DISP ;显示年、月、日
0147 7860 91 MOV R0,#DATE_DATA
0149 1202AE 92 LCALL TIME_DISPLAY
014C 2094F0 93 JB K1,MAIN2
014F D1DC 94 CALL BEEP_BL
0151 95 MAIN3:
0151 120630 96 LCALL DS_CHULI ;定时时间数据处理
0154 7858 97 MOV R0,#DS_DATA
0156 12065B 98 LCALL DS_SP ;显示定时时间
0159 7858 99 MOV R0,#DS_DATA
015B 120667 100 LCALL DS_DISPLAY
015E 2094F0 101 JB K1,MAIN3
0161 D1DC 102 CALL BEEP_BL
0163 2124 103 AJMP MAIN1
104 ;--------------------------------------------
105 ;中断服务子程序
106 ;300MS对闪动标记取反一次
107 ;--------------------------------------------
0165 108 INT_T0:
0165 C0E0 109 PUSH ACC
0167 C0D0 110 PUSH PSW
0169 85238A 111 MOV TL0,TIME_L
016C 85248C 112 MOV TH0,TIME_H
016F 0522 113 INC T_CONU
0171 E522 114 MOV A,T_CONU
0173 B40605 115 CJNE A,#06H,INT_END
0176 752200 116 MOV T_CONU,#00H
0179 B20A 117 CPL 0AH
017B 118 INT_END:
017B D0D0 119 POP PSW
017D D0E0 120 POP ACC
017F 32 121 RETI
122 ;--------------------------------------------
123 ;DS1302 初始化子程序
124 ; (R0)=数据 (R1)=地址
A51 MACRO ASSEMBLER DS1302_DSY 03/29/2005 16:20:14 PAGE 3
125 ;--------------------------------------------
0180 126 PROSET:
0180 C292 127 CLR RST ;DS1302复位
0182 C290 128 CLR SCLK
0184 00 129 NOP
0185 00 130 NOP
0186 D292 131 SETB RST
132
133 ;MOV R1,#80H ;写秒寄存器
134 ;MOV R0,#00H ;启动振荡器
135 ;LCALL WRITE
136
137 ;MOV R1,#82H ;写分寄存器
138 ;MOV R0,#58H
139 ;LCALL WRITE
140
141 ;MOV R1,#84H ;写时寄存器
142 ;MOV R0,#80H
143 ;LCALL WRITE
144
0188 7990 145 MOV R1,#90H ;写充电寄存器
018A 78AB 146 MOV R0,#0ABH
018C 1201C2 147 LCALL WRITE
018F 22 148 RET
149 ;===============================================
150 ;读时间、日期数据子程序
151 ;存放单元 40H - 46H
152 ;===============================================
0190 153 GET_TIME:
0190 7981 154 MOV R1,#81H ;读秒
0192 1201FD 155 LCALL READ
0195 8840 156 MOV 40H,R0
157
0197 7983 158 MOV R1,#83H ;读分
0199 1201FD 159 LCALL READ
019C 8841 160 MOV 41H,R0
161
019E 7985 162 MOV R1,#85H ;读时
01A0 1201FD 163 LCALL READ
01A3 8842 164 MOV 42H,R0
165
01A5 7987 166 MOV R1,#87H ;读出日期
01A7 1201FD 167 LCALL READ
01AA 8843 168 MOV 43H,R0
169
01AC 7989 170 MOV R1,#89H ;读出月份
01AE 1201FD 171 LCALL READ
01B1 8844 172 MOV 44H,R0
173
01B3 798B 174 MOV R1,#8BH ;读出星期
01B5 1201FD 175 LCALL READ
01B8 8846 176 MOV 46H,R0
177
01BA 798D 178 MOV R1,#8DH ;读出年
01BC 1201FD 179 LCALL READ
01BF 8845 180 MOV 45H,R0
181
01C1 22 182 RET
183 ;================================================
184 ;写 DS1302 子程序
185 ;================================================
01C2 186 WRITE:
01C2 C290 187 CLR SCLK
01C4 00 188 NOP
01C5 00 189 NOP
01C6 D292 190 SETB RST
A51 MACRO ASSEMBLER DS1302_DSY 03/29/2005 16:20:14 PAGE 4
01C8 00 191 NOP
01C9 E9 192 MOV A,R1
01CA 7A08 193 MOV R2,#08H
01CC 194 WRI_01:
01CC 13 195 RRC A ;传输地址到DS1302
01CD 00 196 NOP
01CE 00 197 NOP
01CF C290 198 CLR SCLK
01D1 00 199 NOP
01D2 00 200 NOP
01D3 9291 201 MOV IO_DATA,C
01D5 00 202 NOP
01D6 00 203 NOP
01D7 D290 204 SETB SCLK
01D9 00 205 NOP
01DA 00 206 NOP
01DB DAEF 207 DJNZ R2,WRI_01
01DD C290 208 CLR SCLK
01DF 00 209 NOP
01E0 00 210 NOP
01E1 E8 211 MOV A,R0
01E2 7A08 212 MOV R2,#08H
01E4 213 WRI_02:
01E4 13 214 RRC A ;传输数据到DS1302
01E5 00 215 NOP
01E6 C290 216 CLR SCLK
01E8 00 217 NOP
01E9 00 218 NOP
01EA 9291 219 MOV IO_DATA,C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -