📄 consistency_at24c512.lst
字号:
C51 COMPILER V8.02 CONSISTENCY_AT24C512 06/20/2007 16:56:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CONSISTENCY_AT24C512
OBJECT MODULE PLACED IN .\consistency_AT24C512.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\consistency_AT24C512.C DEBUG OBJECTEXTEND
line level source
1
2 #include<reg52.h>
3 #include<intrins.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define ulint unsigned long int
7 //#define WDI P3_4
8 uint AT24c64_address ; //A2,A1,A0,接GND。EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W
-=1,
9 //表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
10 #define delayNOP(); _nop_();_nop_();_nop_();_nop_();
11 #define NUM 10
12 uchar idata sendbuf[NUM];
13 uchar idata receivebuf[NUM];
14 bit bdata SystemError;
15 sbit SDA=P3^5;
16 sbit SCL=P3^4;
17 /*************************************************************************************/
18 #define row 49 //有多少行
19 #define list 6 //一行有多少个像素;
20
21 #define wbyte list/2 //两个像素合成了一个字节
22 #define jiepai 17 //一个花样循环有多少个节拍
23
24
25 #define list1 66
26 #define list2 78
27 #define list3 66
28 /*************************************************************************************/
29 //uint h_l=1;//电平有效形式,h_l=0是高电平有效,h_l=1是低电平有效
30
31 #define tset 1 //数码管RGB排列情况
32 //0是RGB RGB RGB
33 //1是RGBx RGBx RGBx
34 //2是xRGB xRGB xRGB
35 uint ts;
36 uint dpara;
37 #define adress 0x01//当前分控地址
38 uint arress_botten;
39 //#define dpara 207/8;
40 #define KEY P1
41
42 uchar code color_data[8]={0,4,2,1,6,5,3,7};//黑,红,绿,蓝,黄,紫,白//阳码
43 uchar code color_data01[7]={4,2,1,6,5,3,7};
44 /*定义颜色控制端口*/
45 sbit DQ_595=P1^3;/*蓝线 HS74HC595的数据输入*/
46 sbit CLK_595=P1^2;/*绿线 HS74HC595的时钟*/
47 sbit STB_595=P1^1;/*红线 HS74HC595的数据锁存*/
48 sbit EN_595=P1^0;/*黄线 HS74HC595的数据使能*/
49 sbit RE_DE=P3^3;/*MAX487的收发器控制,当RE_DE=1时当前487处于接收状态 当RE_DE=0时当前487处于发送状态*/
50
51
52 uchar data dat[8];
53 void iic_start();//启动IIC总线
54 void iic_stop();//停止IIC总线
C51 COMPILER V8.02 CONSISTENCY_AT24C512 06/20/2007 16:56:01 PAGE 2
55 void slave_ACK();//从机发送应答
56 void slave_NOACK(void);//从机发送非应答
57 void check_ACK(void);//主机应答位检查
58 void IICSendByte(uchar ch);//发送1BYTE
59 uchar IICReciveByte(void);//接收1BYTE
60 void AT24c64_write_byte(uint address,uchar dat);// 24c64存储1BYTE
61 uchar AT24c64_read_byte(uint address);//读指定的地址的1BYTE数据
62 void AT24c64_read_bytes(uint address,uchar *pdat,uchar length);//读指定地址后的连续的数据
63 void AT24c64_write_bytes(uint address,uchar *pdat,uchar length);//写一页数据到24c64中
64 delay_tt_ms(uchar tt);//延时TTMS
65 ///////////////////////////////
66 void iic_start(void)//启动IIC总线
67 {
68 1 EA=0;
69 1 SDA=1;
70 1 SCL=1;
71 1 delayNOP();//延时5us
72 1 SDA=0;
73 1 delayNOP();
74 1 SCL=0;
75 1 }
76 /////////////////////////////////
77 void iic_stop(void)//停止IIC总线
78 {
79 1 SDA=0;
80 1 SCL=1;
81 1 delayNOP();
82 1 SDA=1;
83 1 delayNOP();
84 1 SCL=0;
85 1 }
86 ////////////////////////////////
87 void slave_ACK(void)//从机发送应答
88 {
89 1 SDA=0;
90 1 SCL=1;
91 1 delayNOP();
92 1 SCL=0;
93 1 SDA=1;
94 1 }
95 /////////////////////////////////
96 void slave_NOACK(void)//从机发送非应答
97 {
98 1 SDA=1;
99 1 SCL=1;
100 1 delayNOP();
101 1 SDA=0;
102 1 SCL=0;
103 1 }
104 /////////////////////////////////
105 void check_ACK(void)//主机应答位检查
106 {
107 1 SDA=1;
108 1 SCL=1;
109 1 F0=0;//非应答标志F0
110 1 if(SDA==1)
111 1 F0=1;//表明非应答
112 1 SCL=0;
113 1 }
114 //////////////////////////////////
115 void IICSendByte(uchar ch)//发送1BYTE
116 {
C51 COMPILER V8.02 CONSISTENCY_AT24C512 06/20/2007 16:56:01 PAGE 3
117 1 uchar idata n=8;//1字节共8位
118 1 while(n--)
119 1 {
120 2 if((ch&0x80)==0x80)//发送高位
121 2 {
122 3 SDA=1;//传输1
123 3 SCL=1;
124 3 delayNOP();
125 3 SCL=0;
126 3 }
127 2 else
128 2 {
129 3 SDA=0;//传输0
130 3 SCL=1;
131 3 delayNOP();
132 3 SCL=0;
133 3 }
134 2 ch<<=1;//数据左移
135 2 }
136 1 }
137 //////////////////////////////////
138 uchar IICReceiveByte(void)//接收1BYTE
139 {
140 1 uchar idata n=8;
141 1 uchar tdata;
142 1 while(n--)
143 1 {
144 2 SDA=1;
145 2 SCL=1;
146 2 tdata<<=1;//左移一位
147 2 if(SDA==1)
148 2 tdata=tdata|0x01;//收到1,数据最后一位为1
149 2 else
150 2 tdata=tdata&0xfe;
151 2 SCL=0;
152 2 }
153 1 return(tdata);
154 1 }
155 ////////////////////////////////////
156 void AT24c64_write_byte(uint address,uchar dat)// 24c64存储1BYTE
157 {
158 1 uchar value;
159 1 iic_start();
160 1 value=AT24c64_address&0xfe; //发送器件地址
161 1 IICSendByte(value);
162 1 check_ACK();//检测应答
163 1 if(F0==1)
164 1 {
165 2 SystemError=1;
166 2 return;
167 2 }
168 1 value=address/0x100;//发送AT24C64内存地址高字节
169 1 IICSendByte(value);
170 1 check_ACK();
171 1 if(F0==1)
172 1 {
173 2 SystemError=1;
174 2 return;
175 2 }
176 1 value=address%0x100;//发送AT24C64内存地址低字节
177 1 IICSendByte(value);
178 1 check_ACK();
C51 COMPILER V8.02 CONSISTENCY_AT24C512 06/20/2007 16:56:01 PAGE 4
179 1 if(F0==1)
180 1 {
181 2 SystemError=1;
182 2 return;
183 2 }
184 1 value=dat;
185 1 IICSendByte(value);//发送数据
186 1 check_ACK();
187 1 if(F0==1)
188 1 {
189 2 SystemError=1;
190 2 return;
191 2 }
192 1 iic_stop();
193 1 }
194 ///////////////////////////////////
195 uchar AT24c64_read_byte(uint address)//读指定的地址的1BYTE数据
196 {
197 1 uchar value;
198 1 iic_start();
199 1 value=AT24c64_address&0xfe; //发送器件地址
200 1 IICSendByte(value);
201 1 check_ACK();
202 1 value=address/0x100;//发送地址高字节
203 1 IICSendByte(value);
204 1 check_ACK();
205 1 value=address%0x100;//发送地址低字节
206 1 IICSendByte(value);
207 1 check_ACK();
208 1 iic_stop();
209 1 iic_start();
210 1 value=AT24c64_address|0x01; //发送器件地址
211 1 IICSendByte(value);
212 1 check_ACK();
213 1 value=IICReceiveByte();
214 1 slave_NOACK(); //主不应答信号;主机发送非应答,迫使数据传输结束
215 1 iic_stop();
216 1 return(value);
217 1 }
218 //////////////////////////////////
219 void AT24c64_write_bytes(uint address,uchar *pdat,uchar length)//写一页数据到24c64中
220 {
221 1 uchar value,i;
222 1 iic_start();
223 1 value=AT24c64_address&0xfe; //发送器件地址
224 1 IICSendByte(value);
225 1 check_ACK();
226 1 if(F0==1)
227 1 {
228 2 SystemError=1;
229 2 return;
230 2 }
231 1 value=address/0x100;//发送地址高字节
232 1 IICSendByte(value);
233 1 check_ACK();
234 1 if(F0==1)
235 1 {
236 2 SystemError=1;
237 2 return;
238 2 }
239 1 value=address%0x100;//发送地址低字节
240 1 IICSendByte(value);
C51 COMPILER V8.02 CONSISTENCY_AT24C512 06/20/2007 16:56:01 PAGE 5
241 1 check_ACK();
242 1 if(F0==1)
243 1 {
244 2 SystemError=1;
245 2 return;
246 2 }
247 1 for(i=0;i<length;i++ )
248 1 {
249 2 value=*pdat;
250 2 IICSendByte(value);//发送数据
251 2 check_ACK();
252 2 if(F0==1)
253 2 {
254 3 SystemError=1;
255 3 return;
256 3 }
257 2 pdat++;
258 2 }
259 1 iic_stop();
260 1 }
261 //////////////////////////////////////
262 void AT24c64_read_bytes(uint address,uchar *pdat,uchar length)//读指定地址后的连续的数据
263 {
264 1 uchar value,i;
265 1 iic_start();
266 1 value=AT24c64_address&0xfe; //发送器件地址
267 1 IICSendByte(value);
268 1 check_ACK();
269 1 if(F0==1)
270 1 {
271 2 SystemError=1;
272 2 return;
273 2 }
274 1 value=address/0x100;//发送AT24C64内存地址高字节
275 1 IICSendByte(value);
276 1 check_ACK();
277 1 if(F0==1)
278 1 {
279 2 SystemError=1;
280 2 return;
281 2 }
282 1 value=address%0x100;//发送AT24C64内存地址低字节
283 1 IICSendByte(value);
284 1 check_ACK();
285 1 if(F0==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -