AT89C51 clock

This commit is contained in:
2018-05-23 00:12:48 +08:00
parent d20c61f48e
commit 726486111d
17 changed files with 3572 additions and 1 deletions

View File

@@ -0,0 +1,253 @@
A51 MACRO ASSEMBLER STARTUP 05/23/2018 00:05:56 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: C:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj
ects\STARTUP.obj) EP
LOC OBJ LINE SOURCE
1 $nomod51
2 ;------------------------------------------------------------------------------
3 ; This file is part of the C51 Compiler package
4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
5 ; Version 8.01
6 ;
7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
8 ;------------------------------------------------------------------------------
9 ; STARTUP.A51: This code is executed after processor reset.
10 ;
11 ; To translate this file use A51 with the following invocation:
12 ;
13 ; A51 STARTUP.A51
14 ;
15 ; To link the modified STARTUP.OBJ file to your application use the following
16 ; Lx51 invocation:
17 ;
18 ; Lx51 your object file list, STARTUP.OBJ controls
19 ;
20 ;------------------------------------------------------------------------------
21 ;
22 ; User-defined <h> Power-On Initialization of Memory
23 ;
24 ; With the following EQU statements the initialization of memory
25 ; at processor reset can be defined:
26 ;
27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
28 ; <i> Note: The absolute start-address of IDATA memory is always 0
29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
0080 30 IDATALEN EQU 80H
31 ;
32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
33 ; <i> The absolute start address of XDATA memory
0000 34 XDATASTART EQU 0
35 ;
36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
37 ; <i> The length of XDATA memory in bytes.
0000 38 XDATALEN EQU 0
39 ;
40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
41 ; <i> The absolute start address of PDATA memory
0000 42 PDATASTART EQU 0H
43 ;
44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
45 ; <i> The length of PDATA memory in bytes.
0000 46 PDATALEN EQU 0H
47 ;
48 ;</h>
49 ;------------------------------------------------------------------------------
50 ;
51 ;<h> Reentrant Stack Initialization
52 ;
53 ; The following EQU statements define the stack pointer for reentrant
54 ; functions and initialized it:
55 ;
56 ; <h> Stack Space for reentrant functions in the SMALL model.
57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
A51 MACRO ASSEMBLER STARTUP 05/23/2018 00:05:56 PAGE 2
58 ; <i> Stack space for reentrant functions in the SMALL model.
0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
61 ; <i> Set the top of the stack to the highest location.
0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
63 ; </h>
64 ;
65 ; <h> Stack Space for reentrant functions in the LARGE model.
66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
67 ; <i> Stack space for reentrant functions in the LARGE model.
0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
70 ; <i> Set the top of the stack to the highest location.
0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
72 ; </h>
73 ;
74 ; <h> Stack Space for reentrant functions in the COMPACT model.
75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
76 ; <i> Stack space for reentrant functions in the COMPACT model.
0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
78 ;
79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
80 ; <i> Set the top of the stack to the highest location.
0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
82 ; </h>
83 ;</h>
84 ;------------------------------------------------------------------------------
85 ;
86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
87 ; <e>Compact Model Page Definition
88 ;
89 ; <i>Define the XDATA page used for PDATA variables.
90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
91 ;
92 ; Enable pdata memory page initalization
0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
94 ;
95 ; <o> PPAGE number <0x0-0xFF>
96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
0000 97 PPAGE EQU 0
98 ;
99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
100 ; <i> most 8051 variants use P2 as uppermost address byte
00A0 101 PPAGE_SFR DATA 0A0H
102 ;
103 ; </e>
104 ;------------------------------------------------------------------------------
105
106 ; Standard SFR Symbols
00E0 107 ACC DATA 0E0H
00F0 108 B DATA 0F0H
0081 109 SP DATA 81H
0082 110 DPL DATA 82H
0083 111 DPH DATA 83H
112
113 NAME ?C_STARTUP
114
115
116 ?C_C51STARTUP SEGMENT CODE
117 ?STACK SEGMENT IDATA
118
---- 119 RSEG ?STACK
0000 120 DS 1
121
122 EXTRN CODE (?C_START)
123 PUBLIC ?C_STARTUP
A51 MACRO ASSEMBLER STARTUP 05/23/2018 00:05:56 PAGE 3
124
---- 125 CSEG AT 0
0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
127
---- 128 RSEG ?C_C51STARTUP
129
0000 130 STARTUP1:
131
132 IF IDATALEN <> 0
0000 787F 133 MOV R0,#IDATALEN - 1
0002 E4 134 CLR A
0003 F6 135 IDATALOOP: MOV @R0,A
0004 D8FD 136 DJNZ R0,IDATALOOP
137 ENDIF
138
139 IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
153
154 IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
157
158 IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
166
167 IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
172
173 IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
179
180 IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
184
0006 758100 F 185 MOV SP,#?STACK-1
186
187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
188 ;<h> Code Banking
189 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
A51 MACRO ASSEMBLER STARTUP 05/23/2018 00:05:56 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 05/23/2018 00:05:56 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_C51STARTUP. . . C SEG 000CH REL=UNIT
?C_START . . . . . C ADDR ----- EXT
?C_STARTUP . . . . C ADDR 0000H A
?STACK . . . . . . I SEG 0001H REL=UNIT
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
IBPSTACK . . . . . N NUMB 0000H A
IBPSTACKTOP. . . . N NUMB 0100H A
IDATALEN . . . . . N NUMB 0080H A
IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
PBPSTACK . . . . . N NUMB 0000H A
PBPSTACKTOP. . . . N NUMB 0100H A
PDATALEN . . . . . N NUMB 0000H A
PDATASTART . . . . N NUMB 0000H A
PPAGE. . . . . . . N NUMB 0000H A
PPAGEENABLE. . . . N NUMB 0000H A
PPAGE_SFR. . . . . D ADDR 00A0H A
SP . . . . . . . . D ADDR 0081H A
STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
XBPSTACK . . . . . N NUMB 0000H A
XBPSTACKTOP. . . . N NUMB 0000H A
XDATALEN . . . . . N NUMB 0000H A
XDATASTART . . . . N NUMB 0000H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)

151
clock/c/Listings/clock.lst Normal file
View File

@@ -0,0 +1,151 @@
C51 COMPILER V9.59.0.0 CLOCK 05/23/2018 00:05:56 PAGE 1
C51 COMPILER V9.59.0.0, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN .\Objects\clock.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE clock.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\clo
-ck.lst) TABS(2) OBJECT(.\Objects\clock.obj)
line level source
1 #include <AT89X51.H>
2 #define uint unsigned int
3 #define uchar unsigned char
4 sbit led1=P1^0;
5 sbit k1=P1^1;
6 sbit k2=P1^2;
7 sbit k3=P1^3;
8 sbit k4=P1^4;
9 sbit k5=P1^5;
10
11 void xiaoai();
12 uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
13 uchar code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
14 uint miao,fen,xiaoshi,ge,shi,bai,qian,wan,shiwan,t;
15
16 void times(uint z)
17 {
18 1 uint i,j;
19 1 for(i=0; i<z; i++)
20 1 for(j=0; j<121; j++);
21 1 }
22
23 void xiaoai()
24 {
25 1 ge=miao%10;
26 1 shi=miao/10;
27 1 bai=fen%10;
28 1 qian=fen/10;
29 1 wan=xiaoshi%10;
30 1 shiwan=xiaoshi/10;
31 1
32 1 P0=duan[ge];
33 1 P2=wei[7];
34 1 times(1);
35 1 P2=0xff;
36 1
37 1 P0=duan[shi];
38 1 P2=wei[6];
39 1 times(1);
40 1 P2=0xff;
41 1
42 1 P0=duan[bai];
43 1 P2=wei[5];
44 1 times(1);
45 1 P2=0xff;
46 1
47 1 P0=duan[qian];
48 1 P2=wei[4];
49 1 times(1);
50 1 P2=0xff;
51 1
52 1 P0=duan[wan];
53 1 P2=wei[3];
54 1 times(1);
C51 COMPILER V9.59.0.0 CLOCK 05/23/2018 00:05:56 PAGE 2
55 1 P2=0xff;
56 1
57 1 P0=duan[shiwan];
58 1 P2=wei[2];
59 1 times(1);
60 1 P2=0xff;
61 1 }
62
63 void main()
64 {
65 1 EA=1;
66 1 TMOD=0x01;
67 1 ET0=1;
68 1 TH0=(65535-50000)/256;
69 1 TL0=(65535-50000)%256;
70 1
71 1 while(1)
72 1 {
73 2 xiaoai();
74 2
75 2 if(k1==0)
76 2 TR0=1;
77 2 else if(k2==0)
78 2 TR0=0;
79 2 else if(k3==0) {
80 3 miao=0;
81 3 fen=0;
82 3 xiaoshi=0;
83 3 }
84 2 else if(TR0==0&&k4==0)
85 2 {
86 3 fen=fen+1;
87 3 while(!k4) {
88 4 xiaoai();
89 4 }
90 3 }
91 2 else if(TR0==0&&k5==0) {
92 3 xiaoshi=xiaoshi+1;
93 3 while(!k5) {
94 4 xiaoai();
95 4 }
96 3 }
97 2
98 2
99 2 if(t==20){
100 3 t=0;
101 3 miao=miao+1;
102 3 }
103 2 else if(miao==60) {
104 3 miao=0;
105 3 fen=fen+1;
106 3 }
107 2 else if(fen==60) {
108 3 fen=0;
109 3 xiaoshi=xiaoshi+1;
110 3 }
111 2 else if(xiaoshi==24)
112 2 xiaoshi=0;
113 2
114 2 xiaoai();
115 2 }
116 1 }
C51 COMPILER V9.59.0.0 CLOCK 05/23/2018 00:05:56 PAGE 3
117
118 void int0() interrupt 1
119 {
120 1 t++;
121 1 TH0=(65535-50000)/256;
122 1 TL0=(65535-50000)%256;
123 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 480 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

263
clock/c/Listings/clock.m51 Normal file
View File

@@ -0,0 +1,263 @@
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2018 00:05:56 PAGE 1
BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
C:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\STARTUP.obj, .\Objects\clock.obj TO .\Objects\clock PRINT (.\Listings\clock.m51)
MEMORY MODEL: SMALL
INPUT MODULES INCLUDED:
.\Objects\STARTUP.obj (?C_STARTUP)
.\Objects\clock.obj (CLOCK)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?UIDIV)
LINK MAP OF MODULE: .\Objects\clock (?C_STARTUP)
TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 0014H UNIT ?DT?CLOCK
IDATA 001CH 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 0008H *** GAP ***
CODE 000BH 0003H ABSOLUTE
000EH 07F2H *** GAP ***
CODE 0800H 00F9H UNIT ?PR?XIAOAI?CLOCK
CODE 08F9H 00B0H UNIT ?PR?MAIN?CLOCK
CODE 09A9H 0055H UNIT ?C?LIB_CODE
CODE 09FEH 0024H UNIT ?PR?_TIMES?CLOCK
CODE 0A22H 0018H UNIT ?CO?CLOCK
CODE 0A3AH 0013H UNIT ?PR?INT0?CLOCK
CODE 0A4DH 000CH UNIT ?C_C51STARTUP
OVERLAY MAP OF MODULE: .\Objects\clock (?C_STARTUP)
SEGMENT
+--> CALLED SEGMENT
---------------------
?C_C51STARTUP
+--> ?PR?MAIN?CLOCK
?PR?MAIN?CLOCK
+--> ?PR?XIAOAI?CLOCK
?PR?XIAOAI?CLOCK
+--> ?CO?CLOCK
+--> ?PR?_TIMES?CLOCK
SYMBOL TABLE OF MODULE: .\Objects\clock (?C_STARTUP)
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2018 00:05:56 PAGE 2
VALUE TYPE NAME
----------------------------------
------- MODULE ?C_STARTUP
C:0A4DH SEGMENT ?C_C51STARTUP
I:001CH SEGMENT ?STACK
C:0000H PUBLIC ?C_STARTUP
D:00E0H SYMBOL ACC
D:00F0H SYMBOL B
D:0083H SYMBOL DPH
D:0082H SYMBOL DPL
N:0000H SYMBOL IBPSTACK
N:0100H SYMBOL IBPSTACKTOP
N:0080H SYMBOL IDATALEN
C:0A50H SYMBOL IDATALOOP
N:0000H SYMBOL PBPSTACK
N:0100H SYMBOL PBPSTACKTOP
N:0000H SYMBOL PDATALEN
N:0000H SYMBOL PDATASTART
N:0000H SYMBOL PPAGE
N:0000H SYMBOL PPAGEENABLE
D:00A0H SYMBOL PPAGE_SFR
D:0081H SYMBOL SP
C:0A4DH SYMBOL STARTUP1
N:0000H SYMBOL XBPSTACK
N:0000H SYMBOL XBPSTACKTOP
N:0000H SYMBOL XDATALEN
N:0000H SYMBOL XDATASTART
C:0000H LINE# 126
C:0A4DH LINE# 133
C:0A4FH LINE# 134
C:0A50H LINE# 135
C:0A51H LINE# 136
C:0A53H LINE# 185
C:0A56H LINE# 196
------- ENDMOD ?C_STARTUP
------- MODULE CLOCK
C:0000H SYMBOL _ICE_DUMMY_
C:0800H PUBLIC xiaoai
D:0080H PUBLIC P0
D:0090H PUBLIC P1
D:00A0H PUBLIC P2
B:00A8H.7 PUBLIC EA
D:0008H PUBLIC shiwan
B:0090H.1 PUBLIC k1
B:0090H.2 PUBLIC k2
B:0090H.3 PUBLIC k3
B:0090H.4 PUBLIC k4
B:0090H.5 PUBLIC k5
C:0A02H PUBLIC _times
C:08F9H PUBLIC main
D:000AH PUBLIC miao
C:0A22H PUBLIC duan
D:000CH PUBLIC qian
D:000EH PUBLIC bai
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2018 00:05:56 PAGE 3
D:0089H PUBLIC TMOD
D:0010H PUBLIC fen
D:0012H PUBLIC shi
C:0A32H PUBLIC wei
D:0014H PUBLIC wan
B:00A8H.1 PUBLIC ET0
D:0016H PUBLIC ge
D:008CH PUBLIC TH0
D:008AH PUBLIC TL0
B:0088H.4 PUBLIC TR0
D:0018H PUBLIC t
D:001AH PUBLIC xiaoshi
C:0A3AH PUBLIC int0
C:09FEH SYMBOL L?0042
------- PROC L?0041
------- ENDPROC L?0041
C:09FEH SYMBOL L?0042
------- PROC _TIMES
D:0006H SYMBOL z
------- DO
D:0004H SYMBOL i
D:0002H SYMBOL j
------- ENDDO
C:0A02H LINE# 16
C:0A02H LINE# 17
C:0A02H LINE# 19
C:0A0CH LINE# 20
C:0A21H LINE# 21
------- ENDPROC _TIMES
------- PROC XIAOAI
C:0800H LINE# 23
C:0800H LINE# 24
C:0800H LINE# 25
C:080FH LINE# 26
C:081EH LINE# 27
C:082DH LINE# 28
C:083CH LINE# 29
C:084BH LINE# 30
C:085AH LINE# 32
C:086AH LINE# 33
C:0871H LINE# 34
C:0878H LINE# 35
C:087BH LINE# 37
C:088BH LINE# 38
C:088EH LINE# 39
C:0891H LINE# 40
C:0894H LINE# 42
C:08A4H LINE# 43
C:08A7H LINE# 44
C:08AAH LINE# 45
C:08ADH LINE# 47
C:08BDH LINE# 48
C:08C0H LINE# 49
C:08C3H LINE# 50
C:08C6H LINE# 52
C:08D6H LINE# 53
C:08D9H LINE# 54
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2018 00:05:56 PAGE 4
C:08DCH LINE# 55
C:08DFH LINE# 57
C:08EFH LINE# 58
C:08F2H LINE# 59
C:08F5H LINE# 60
C:08F8H LINE# 61
------- ENDPROC XIAOAI
------- PROC MAIN
C:08F9H LINE# 63
C:08F9H LINE# 64
C:08F9H LINE# 65
C:08FBH LINE# 66
C:08FEH LINE# 67
C:0900H LINE# 68
C:0903H LINE# 69
C:0906H LINE# 71
C:0906H LINE# 72
C:0906H LINE# 73
C:0909H LINE# 75
C:090CH LINE# 76
C:0910H LINE# 77
C:0913H LINE# 78
C:0917H LINE# 79
C:091AH LINE# 80
C:091FH LINE# 81
C:0923H LINE# 82
C:0927H LINE# 83
C:0929H LINE# 84
C:092FH LINE# 85
C:092FH LINE# 86
C:0937H LINE# 87
C:093AH LINE# 88
C:093DH LINE# 89
C:093FH LINE# 90
C:093FH LINE# 91
C:0945H LINE# 92
C:094DH LINE# 93
C:0950H LINE# 94
C:0953H LINE# 95
C:0955H LINE# 96
C:0955H LINE# 99
C:095DH LINE# 100
C:0961H LINE# 101
C:0969H LINE# 102
C:096BH LINE# 103
C:0973H LINE# 104
C:0977H LINE# 105
C:097FH LINE# 106
C:0981H LINE# 107
C:0989H LINE# 108
C:098DH LINE# 109
C:0995H LINE# 110
C:0997H LINE# 111
C:099FH LINE# 112
C:09A3H LINE# 114
C:09A6H LINE# 115
------- ENDPROC MAIN
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2018 00:05:56 PAGE 5
------- PROC INT0
C:0A3AH LINE# 118
C:0A3CH LINE# 120
C:0A44H LINE# 121
C:0A47H LINE# 122
C:0A4AH LINE# 123
------- ENDPROC INT0
------- ENDMOD CLOCK
------- MODULE ?C?UIDIV
C:09A9H PUBLIC ?C?UIDIV
------- ENDMOD ?C?UIDIV
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 020AH BYTE (25%) *
******************************************************************************
Program Size: data=29.0 xdata=0 code=607
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)