📄 memory.lst
字号:
C51 COMPILER V7.06 MEMORY 12/17/2006 14:56:13 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MEMORY
OBJECT MODULE PLACED IN Memory.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE Memory.c LARGE OPTIMIZE(SIZE)
stmt level source
1 #include <REG52.H>
2
3
4 //void delay_us(unsigned char us);
5 //============= 93C46端口定义 ==============
6 sbit SPI_CS=P2^3; //片选
7 sbit SPI_SCLK=P2^2; //时钟
8 sbit SPI_DI=P2^1; //93C46数据输入口
9 sbit SPI_DO=P2^0; //93C46数据输出口
10 //================ END ====================
11
12 void SPI_Start()
13 {
14 1 SPI_CS = 0;
15 1 SPI_SCLK = 0;
16 1 SPI_CS = 1;
17 1 SPI_DI=1;
18 1 SPI_SCLK = 1;
19 1 SPI_SCLK = 0;
20 1 }
21
22 void SPI_SendByte(unsigned char SDATA)
23 {
24 1 unsigned char i;
25 1 SPI_SCLK = 0;
26 1 for(i=8;i>0;i--)
27 1 {
28 2 SPI_DI = SDATA&0x80;
29 2 SPI_SCLK = 1;
30 2 SDATA <<= 1;
31 2 SPI_SCLK = 0;
32 2 }
33 1 }
34
35 void WeitReady()
36 {
37 1 SPI_DO=1;
38 1 SPI_CS=1;
39 1 SPI_SCLK=1;
40 1 while(SPI_DO == 0)
41 1 {
42 2 SPI_SCLK=0;
43 2 SPI_SCLK=1;
44 2 }
45 1 SPI_CS=0;
46 1 }
47
48 void Mem_EnWrite()
49 {
50 1 unsigned char i,InData;
51 1 SPI_CS=0;
52 1 SPI_SCLK=0;
53 1 SPI_CS=1;
54 1 InData=0x98; // 10011XXXXX
55 1 for(i=10;i>0;i--) // 9
C51 COMPILER V7.06 MEMORY 12/17/2006 14:56:13 PAGE 2
56 1 {
57 2 SPI_DI=InData&0x80;
58 2 SPI_SCLK=1;
59 2 SPI_SCLK=0;
60 2 InData<<=1;
61 2 }
62 1 SPI_CS=0;
63 1 }
64
65 void Mem_Clrall()
66 {
67 1 unsigned char i,InData;
68 1 SPI_CS=0;
69 1 SPI_SCLK=0;
70 1 SPI_CS=1;
71 1 InData=0x88; // 10001XXXXX
72 1 for(i=10;i>0;i--) // 9
73 1 {
74 2 SPI_DI=InData&0x80;
75 2 SPI_SCLK=1;
76 2 SPI_SCLK=0;
77 2 InData<<=1;
78 2 }
79 1 SPI_SendByte(0);
80 1 SPI_CS=0;
81 1 WeitReady();
82 1 }
83
84 void Mem_Write(unsigned char Addr,unsigned char MData)
85 {
86 1 unsigned char i;
87 1 Mem_EnWrite();
88 1 SPI_Start();
89 1 SPI_DI = 0;
90 1 SPI_SCLK = 1;
91 1 SPI_SCLK = 0;
92 1 SPI_DI = 1;
93 1 SPI_SCLK = 1;
94 1 SPI_SCLK = 0;
95 1 for(i=7;i>0;i--)
96 1 {
97 2 Addr <<= 1;
98 2 SPI_DI=Addr&0x80;
99 2 SPI_SCLK = 1;
100 2 SPI_SCLK = 0;
101 2 }
102 1 SPI_SendByte(MData);
103 1 SPI_CS=0;
104 1 WeitReady();
105 1 }
106
107 unsigned char Mem_Read(unsigned char Addr)
108 {
109 1 unsigned char i,temp;
110 1 SPI_Start();
111 1 SPI_DI = 1;
112 1 SPI_SCLK = 1;
113 1 SPI_SCLK = 0;
114 1 SPI_DI = 0;
115 1 SPI_SCLK = 1;
116 1 SPI_SCLK = 0;
117 1 for(i=7;i>0;i--)
C51 COMPILER V7.06 MEMORY 12/17/2006 14:56:13 PAGE 3
118 1 {
119 2 Addr <<= 1;
120 2 SPI_DI=Addr&0x80;
121 2 SPI_SCLK = 1;
122 2 SPI_SCLK = 0;
123 2 }
124 1 SPI_DO=1;
125 1 for(i=8;i>0;i--)
126 1 {
127 2 temp <<= 1;
128 2 SPI_SCLK = 1;
129 2 temp |= SPI_DO;
130 2 SPI_SCLK = 0;
131 2 }
132 1 SPI_CS=0;
133 1 return temp;
134 1 }
135
136
137 //内存存储,编号从1开始,每个记录的位置为 编号*3-2,地址0存放记录总数
138 //时间使用BCD码存放
139
140 unsigned char Read_RingTime(unsigned char RingNum,unsigned char *p) //读取打铃时间
141 {
142 1 unsigned char RingCount,Addr;
143 1 RingCount=Mem_Read(0x00);
144 1 if (RingNum>RingCount) return(0);
145 1 Addr=RingNum*3-2;
146 1 *p=Mem_Read(Addr);
147 1 p++;
148 1 Addr++;
149 1 *p=Mem_Read(Addr);
150 1 p++;
151 1 Addr++;
152 1 *p=Mem_Read(Addr);
153 1 return(1);
154 1 }
155
156 void Write_RingTime(unsigned char RingNum,unsigned char *p)
157 {
158 1 Mem_Write(RingNum*3-2,*p++);
159 1 Mem_Write(RingNum*3-1,*p++);
160 1 Mem_Write(RingNum*3,*p);
161 1 }
162
163 void Ring_Paixu()
164 {
165 1 unsigned char RingCount,i,j,temp1[3],temp2[3];
166 1 RingCount=Mem_Read(0);
167 1 if (RingCount>1)
168 1 {
169 2 for (i=1;i<RingCount;i++)
170 2 {
171 3 Read_RingTime(i,temp1);
172 3 for(j=i+1;j<=RingCount;j++)
173 3 {
174 4 Read_RingTime(j,temp2);
175 4 if (temp1[0]<temp2[0]) continue;
176 4 else if (temp1[0]==temp2[0])
177 4 {
178 5 if (temp1[1]<temp2[1]) continue;
179 5 }
C51 COMPILER V7.06 MEMORY 12/17/2006 14:56:13 PAGE 4
180 4 else
181 4 Write_RingTime(i,temp2);
182 4 Write_RingTime(j,temp1);
183 4 }
184 3 }
185 2 }
186 1 }
187
188 unsigned char DelRing(unsigned char Num)
189 {
190 1 unsigned char i,temp,rMax;
191 1 rMax=Mem_Read(0)*3-2;
192 1 i=Num*3-2;
193 1 for(;i<=rMax;i++)
194 1 {
195 2 temp=Mem_Read(i+3);
196 2 Mem_Write(i,temp);
197 2 }
198 1 temp=Mem_Read(0);
199 1 temp--;
200 1 Mem_Write(0,temp);
201 1 Ring_Paixu();
202 1 return temp;
203 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 555 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 13
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -