📄 x5045.lst
字号:
C51 COMPILER V7.20 X5045 02/24/2005 17:41:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE X5045
OBJECT MODULE PLACED IN .\x5045.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\BAK\V型机LCD程序2004-12-09\x5045.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECT
-EXTEND PRINT(.\x5045.lst) TABS(8) OBJECT(.\x5045.obj)
line level source
1 /*-------------------------------------------------------
2 X5045源程序
3
4 --------------------------------------------------------*/
5 #include "regx52.h"
6 #include "x5045.h"
7
8 sbit SO=P2^5;
9 sbit SI=P2^4;
10 sbit SCK=P2^3;
11
12 //片选择信号定义
13 #define RAMCS 0x00
14 #define LCDCS1 0x01
15 #define LCDCS2 0x02
16 #define LCDCS3 0x03
17 #define EEPCS 0x04//DOGCS
18 #define ROMCS 0x05
19 #define KEYCS 0x06
20 #define NOSET 0x07
21
22 //25045可编程看门狗监控EEPROM指令集
23 #define WREN 0x06 //00000110 //设置写使能锁存器(允许写操作)
24 #define WRDI 0x04 //00000100 //复位写使能锁存器(禁止写操作)
25 #define RDSR 0x05 //00000101 //读状态寄存器
26 #define WRSR 0x01 //00000001 //写状态寄存器(块锁定)
27 #define READ 0x03 //00000011 //从开始于所选地址的存储器列阵中读出数据
28 #define WRTE 0x02 //00000010 //把数据写入开始于所选地址的存储器阵列中,1至4字节
29 #define uchar unsigned char
30
31 extern void p1tune(unsigned char temp);
32 extern unsigned char idata disdata[32];
33
34 //写使能子程序
35 void wren_dog(void)
36 {
37 1
38 1 SCK=0;//
39 1 p1tune(EEPCS);//CS=0
40 1 Write8(WREN);//
41 1 SCK=0;//for debug
42 1 p1tune(RAMCS);//CS=1
43 1 }
44 /*
45 //写禁止子程序
46 void wrdi_dog(void)
47 {
48 unsigned char data i;
49 SCK=0;
50 p1tune(EEPCS);
51 i++;
52 Write8(WRDI);
53 SCK=0;
54 p1tune(RAMCS);
C51 COMPILER V7.20 X5045 02/24/2005 17:41:00 PAGE 2
55
56 }
57 */
58 //写状态寄存器
59 void wrsr_dog(unsigned char status_reg)
60 {
61 1
62 1 while(rdsr_dog()&0x01==1) ;
63 1 wren_dog();//使能“写”
64 1
65 1 p1tune(EEPCS);
66 1
67 1 Write8(WRSR);
68 1 Write8(status_reg);
69 1
70 1 p1tune(RAMCS);
71 1 wip_poll();
72 1 }
73
74
75 //读状态寄存器
76 unsigned char rdsr_dog(void)
77 {
78 1 // unsigned char com=0x05;//RDSR;
79 1 unsigned char data cTemp;
80 1
81 1 SCK=0;
82 1 p1tune(EEPCS);
83 1 Write8(RDSR);
84 1 cTemp=Read8();
85 1
86 1 SCK=0;
87 1 p1tune(RAMCS);
88 1 return(cTemp);
89 1 }
90
91 //字节读
92 unsigned char byte_read(bit HiHalf,unsigned char Addr)
93 {
94 1 unsigned char data EepromData,ReadInstruct=0x00;
95 1 //while(rdsr_dog()&0x01==1) {}
96 1 EA=0;
97 1 wren_dog();
98 1
99 1 SCK=0;
100 1 p1tune(EEPCS);
101 1 SO=1;
102 1 SI=1;
103 1 if(HiHalf)
104 1 ReadInstruct=0x08;
105 1 //
106 1 ReadInstruct|=READ;//READ;
107 1 Write8(ReadInstruct);
108 1 Write8(Addr);
109 1 EepromData=Read8();
110 1 SCK=0;
111 1 EA=1;
112 1 p1tune(RAMCS);
113 1
114 1 return(EepromData);
115 1
116 1 }
C51 COMPILER V7.20 X5045 02/24/2005 17:41:00 PAGE 3
117 //字节写
118
119 void byte_write(bit HiHalf,unsigned char Addr,unsigned char Data)
120 {
121 1 unsigned char data WriteInstuct=0x00;
122 1 //while(rdsr_dog()&0x01==1) {}
123 1
124 1 wren_dog();
125 1 SCK=0;
126 1 p1tune(EEPCS);
127 1 //SO=1;
128 1 //SI=1;
129 1 if(HiHalf)
130 1 WriteInstuct=0x08;
131 1 WriteInstuct|=WRTE;//WRTE;
132 1 Write8(WriteInstuct);
133 1 Write8(Addr);
134 1 Write8(Data);
135 1 p1tune(RAMCS);
136 1 wip_poll();
137 1
138 1 }
139
140 //检验写操作是否结束。
141 unsigned char wip_poll(void)
142 {
143 1 unsigned int i;
144 1 unsigned char wip;
145 1 for(i=0x1ff;i>0;i--)
146 1 {
147 2 wip=rdsr_dog();
148 2 wip&=0x01;
149 2 if(wip==0) break;
150 2 }
151 1 return(wip);
152 1
153 1 }
154
155 //单字节指令或数据写入X25045
156 //在SI线上输入的数据在SCK的上升沿被锁存。
157 void Write8(unsigned char byt)
158 {
159 1 unsigned char data i;
160 1
161 1 for(i=0;i<8;i++)
162 1 { if((byt&0x80)==0)//
163 2 SI=0;//
164 2 else//
165 2 SI=1;// //
166 2 SCK=0;
167 2 SCK=1;
168 2 byt=byt<<1;
169 2 }
170 1
171 1 }
172 //单字节数据从X25045读到单片机
173 //数据由SCK的下降沿输出到SO线上。
174 unsigned char Read8(void)
175 {
176 1 unsigned char i,j;
177 1 unsigned char byt;
178 1 bit bTemp;
C51 COMPILER V7.20 X5045 02/24/2005 17:41:00 PAGE 4
179 1
180 1 for(i=0;i<8;i++)
181 1 {
182 2 SCK=1;
183 2 j++;
184 2 SCK=0;
185 2
186 2 bTemp=SO;
187 2
188 2 if(bTemp)
189 2 byt|=0x01;
190 2 if(i<7)
191 2 byt=byt<<1;
192 2
193 2 }
194 1
195 1 return (byt);
196 1 }
197
198 void page_write(uchar Addr,uchar idata *DataAddr,uchar DataLen)
199 { //地址最高地址与最低地址A8位必须相同
200 1 unsigned char data WriteInstuct=0x00;
201 1 unsigned char data i,j;
202 1 EA=0;
203 1 /*
204 1 //while(rdsr_dog()&0x01==1) {}
205 1 wren_dog();
206 1 SCK=0;
207 1 p1tune(EEPCS);
208 1
209 1 //SO=1;
210 1 //SI=1;
211 1 if(Addr>=256)
212 1 WriteInstuct=0x08;
213 1 WriteInstuct|=WRTE;//WRTE;
214 1 Write8(WriteInstuct);
215 1 Write8(Addr);
216 1 for(i=0;i<DataLen;i++)
217 1 {
218 1 j=*DataAddr;
219 1 Write8(j);
220 1 SCK=0;
221 1
222 1 }
223 1 p1tune(RAMCS);
224 1 wip_poll();
225 1 */
226 1 for(i=0;i<DataLen;i++,DataAddr++,Addr++)
227 1 {
228 2 j=*DataAddr;
229 2 wrsr_dog(0x30); //写使能
230 2 byte_write(0,Addr,j);
231 2 wrsr_dog(0x3e);//写保护
232 2 }
233 1 EA=1;
234 1
235 1 }
236
237 void page_read(uchar Addr,uchar idata *DataAddr,uchar DataLen)
238 {
239 1 unsigned char data ReadInstruct=0x00;
240 1 //while(rdsr_dog()&0x01==1) {}
C51 COMPILER V7.20 X5045 02/24/2005 17:41:00 PAGE 5
241 1
242 1 uchar i;
243 1 EA=0;
244 1 /*
245 1 wren_dog();
246 1
247 1 SCK=0;
248 1 p1tune(EEPCS);
249 1 SO=1;
250 1 SI=1;
251 1 if(Addr>=256)
252 1 ReadInstruct=0x08;
253 1 //
254 1 ReadInstruct|=READ;//READ;
255 1 Write8(ReadInstruct);
256 1
257 1 Write8(Addr);
258 1
259 1 SCK=0;
260 1
261 1 for(i=0;i<DataLen;i++)
262 1 {
263 1
264 1 *DataAddr=Read8();
265 1
266 1 }
267 1 */
268 1 for(i=0;i<DataLen;i++,DataAddr++,Addr++)
269 1 {
270 2 *DataAddr=byte_read(0,Addr);
271 2
272 2 }
273 1 EA=1;
274 1
275 1 }
276
277
278
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 379 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 23
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -