📄 万年历.lst
字号:
8051 Assembler Version 1.00 04/11/107 15:40:25 Page 1
C:\Documents and Settings\Administrator\桌面\新建文件夹\电子万年历.a51
1 0000 ;***********************************************
2 0000 ;日历温度显示牌参考程序
3 0000 ;作者:黄惟公
4 0000 ;2007.3.1
5 0000 ;***********************************************
6 0000 ORG 0000H
7 0000 010E AJMP MAIN
8 000B ORG 000BH ;T0中断服务程序入口
9 000B 020030 LJMP DISPLAY
10 000E ;***********************************************
11 000E ;30H~3DH单元显示缓冲区,定义如下:
12 000E ;30H 月十位 31H 月个位
13 000E ;32H 日十位 33H 日个位
14 000E ;34H 时十位 35H 时个位
15 000E ;36H 分十位 37H 分个位
16 000E ;38H 秒十位 39H 秒个位
17 000E ;3AH 星期位 3BH 未用
18 000E ;3CH 温度十位 3DH 温度个位
19 000E ;************************************************
20 000E ;编程思想:
21 000E ;用T0产生一个定时中断,在中断服务程序中,显示14个LED;
22 000E ;主程序中,读DS1302和DS1620的数据。
23 000E ;主程序中加了一点延时的原因:
24 000E ;在Proteus中,不停的访问DS1302和DS1620所占用CPU的时间太多,;加了延时后,访问减少,CPU的占有时间大大减少了,这已被实验证明。
25 000E ;****************************************************************
26 000E 758902 MAIN: MOV TMOD,#02H ;T0定时,工作方式2
27 0011 758C00 MOV TH0,#00H ;T0计数初值
28 0014 758A00 MOV TL0,#00H
29 0017 D2AF SETB EA
30 0019 D2A9 SETB ET0
31 001B D28C SETB TR0
32 001D 7930 MOV R1,#30H
33 001F 7E0E MOV R6,#14
34 0021
35 0021 1179 L0:ACALL PR1302
36 0023 1127 ACALL DELAY
37 0025
38 0025 0121 AJMP L0
39 0027
40 0027 7B00 DELAY: MOV R3,#0
41 0029 7D00 L1: MOV R5,#0
42 002B DDFE DJNZ R5,$
43 002D DBFA DJNZ R3,L1
44 002F 22 RET
45 0030 ;**********************************************
46 0030 ;显示程序
47 0030 ;**********************************************
48 0030 C0E0 DISPLAY:PUSH ACC
49 0032 90005B MOV DPTR,#TAB1
50 0035 EE MOV A,R6
51 0036 93 MOVC A,@A+DPTR
52 0037 F5A0 MOV P2,A
53 0039 90006A MOV DPTR,#TAB2
54 003C EE MOV A,R6
55 003D 93 MOVC A,@A+DPTR
56 003E F5B0 MOV P3,A
57 0040 E7 MOV A,@R1
8051 Assembler Version 1.00 04/11/107 15:40:25 Page 2
C:\Documents and Settings\Administrator\桌面\新建文件夹\电子万年历.a51
58 0041 900051 MOV DPTR,#TAB
59 0044 93 MOVC A,@A+DPTR
60 0045 F580 MOV P0,A
61 0047 09 INC R1
62 0048 DE04 DJNZ R6,LOOP
63 004A 7930 MOV R1,#30H
64 004C 7E0E MOV R6,#14
65 004E D0E0 LOOP: POP ACC
66 0050 32 RETI
67 0051 C0 F9 A4 TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
0054 B0 99 92
0057 82 F8 80
005A 98
68 005B TAB1:
69 005B 00 00 00 DB 00H,00H,00H,00H,00H,00H,00H,80H,40H,20H,10H,08H,04H,02H,01H
005E 00 00 00
0061 00 80 40
0064 20 10 08
0067 04 02 01
70 006A TAB2:
71 006A 00 20 10 DB 00H,20H,10H,08H,04H,02H,01H,00H,00H,00H,00H,00H,00H,00H,00H
006D 08 04 02
0070 01 00 00
0073 00 00 00
0076 00 00 00
72 0079 ;********************************************************
73 0079 ;处理DS1302子程序
74 0079 ;功能:1302得到的时间是以压缩的BCD码存在44~49H中,次程序把它们
75 0079 ;分解成单字节的BCD码,并存入显示缓冲区
76 0079 ;********************************************************
77 0079 11D1 PR1302:ACALL GET1302
78 007B E544 MOV A,44H ;S
79 007D C4 SWAP A
80 007E 540F ANL A,#0FH
81 0080 F538 MOV 38H,A
82 0082 E544 MOV A,44H
83 0084 540F ANL A,#0FH
84 0086 F539 MOV 39H,A
85 0088 E545 MOV A,45H ;M
86 008A C4 SWAP A
87 008B 540F ANL A,#0FH
88 008D F536 MOV 36H,A
89 008F E545 MOV A,45H
90 0091 540F ANL A,#0FH
91 0093 F537 MOV 37H,A
92 0095 E546 MOV A,46H ;H
93 0097 C4 SWAP A
94 0098 540F ANL A,#0FH
95 009A F534 MOV 34H,A
96 009C E546 MOV A,46H
97 009E 540F ANL A,#0FH
98 00A0 F535 MOV 35H,A
99 00A2 E547 MOV A,47H ;D
100 00A4 C4 SWAP A
101 00A5 540F ANL A,#0FH
102 00A7 F532 MOV 32H,A
103 00A9 E547 MOV A,47H
8051 Assembler Version 1.00 04/11/107 15:40:25 Page 3
C:\Documents and Settings\Administrator\桌面\新建文件夹\电子万年历.a51
104 00AB 540F ANL A,#0FH
105 00AD F533 MOV 33H,A
106 00AF E548 MOV A,48H ;M
107 00B1 C4 SWAP A
108 00B2 540F ANL A,#0FH
109 00B4 F530 MOV 30H,A
110 00B6 E548 MOV A,48H
111 00B8 540F ANL A,#0FH
112 00BA F531 MOV 31H,A
113 00BC E549 MOV A,49H ;W
114 00BE 540F ANL A,#0FH
115 00C0 14 DEC A
116 00C1 F53A MOV 3AH,A
117 00C3 E54A MOV A,4AH ;y
118 00C5 C4 SWAP A
119 00C6 540F ANL A,#0FH
120 00C8 F53C MOV 3CH,A
121 00CA E54A MOV A,4AH
122 00CC 540F ANL A,#0FH
123 00CE F53D MOV 3DH,A
124 00D0 22 RET
125 00D1
126 00D1 ;============================================
127 00D1 ;读DS1302时钟子程序
128 00D1 ;**************************************************
129 00D1 RST EQU P1.0
130 00D1 SCLK EQU P1.1
131 00D1 IO EQU P1.2
132 00D1 GET1302:
133 00D1 7844 MOV R0,#44H;
134 00D3 7F07 MOV R7,#7
135 00D5 7A81 MOV R2,#81H ;秒地址
136 00D7 C290 G13021: CLR RST
137 00D9 C291 CLR SCLK
138 00DB D290 SETB RST
139 00DD 8AF0 MOV B,R2 ;秒 分 时 日 月 星期 年 地址
140 00DF 1200F0 LCALL RTInputByte
141 00E2 120100 LCALL RTOutputByte
142 00E5 F6 MOV @R0,A ;秒
143 00E6 08 INC R0
144 00E7 0A INC R2
145 00E8 0A INC R2
146 00E9 D291 SETB SCLK
147 00EB C290 CLR RST
148 00ED DFE8 DJNZ R7,G13021
149 00EF 22 RET
150 00F0 ;===================================
151 00F0 RTInputByte:
152 00F0 7C08 MOV R4,#8
153 00F2 E5F0 Inbit1: MOV A,B
154 00F4 13 RRC A
155 00F5 F5F0 MOV B,A
156 00F7 9292 MOV IO, C
157 00F9 D291 SETB SCLK
158 00FB C291 CLR SCLK
159 00FD DCF3 DJNZ R4,Inbit1
160 00FF 22 RET
8051 Assembler Version 1.00 04/11/107 15:40:25 Page 4
C:\Documents and Settings\Administrator\桌面\新建文件夹\电子万年历.a51
161 0100 ;====================================
162 0100 RTOutputByte:
163 0100 7C08 MOV R4,#8
164 0102 A292 Outbit1: MOV C,IO
165 0104 13 RRC A
166 0105 D291 SETB SCLK
167 0107 C291 CLR SCLK
168 0109 DCF7 DJNZ R4,Outbit1
169 010B 22 RET
Defined Symbols:
IO 000092 146
RST 000090 144
SCLK 000091 145
Defined Labels:
DELAY 000027 39
DISPLAY 000030 48
G13021 0000D7 215
GET1302 0000D1 209
INBIT1 0000F2 242
L0 000021 33
L1 000029 41
LOOP 00004E 78
MAIN 00000E 14
OUTBIT1 000102 258
PR1302 000079 121
RTINPUTBYTE 0000F0 240
RTOUTPUTBYTE 000100 256
TAB 000051 81
TAB1 00005B 91
TAB2 00006A 106
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -