📄 wl007.lst
字号:
C51 COMPILER V7.20 WL007 03/29/2005 15:46:59 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE WL007
OBJECT MODULE PLACED IN wl007.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wl007.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: 伟纳电子ME300B单片机开发系统演示程序 - 读写AT24C02演示程序 *
3 * 文件: wl007.C *
4 * 日期: 2004-1-5 *
5 * 版本: 1.0 *
6 * 作者: 伟纳电子 - Freeman *
7 * 邮箱: freeman@willar.com *
8 * 网站: http://www.willar.com *
9 ********************************************************************************
10 * 描述: *
11 * 读写AT24C02演示程序 *
12 * *
13 * *
14 * *
15 ********************************************************************************
16 * 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
17 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
18 *******************************************************************************/
19
20
21 #include <reg51.h>
22 #include <intrins.h>
23
24 #define OP_READ 0xa1 // 器件地址以及读取操作
25 #define OP_WRITE 0xa0 // 器件地址以及写入操作
26 #define MAX_ADDR 0x7f // AT24C02最大地址
27
28 unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
29 // 写入到AT24C01的数据串
30
31 sbit SDA = P3^4;
32 sbit SCL = P3^3;
33
34
35 void start();
36 void stop();
37 unsigned char shin();
38 bit shout(unsigned char write_data);
39 unsigned char read_random(unsigned char random_addr);
40 void write_byte( unsigned char addr, unsigned char write_data);
41 void fill_byte(unsigned char fill_data);
42 void delayms(unsigned char ms);
43
44 main(void)
45 {
46 1 unsigned char i;
47 1 SDA = 1;
48 1 SCL = 1;
49 1 fill_byte(0xff); // 全部填充0xff
50 1
51 1 for(i = 0 ; i < 8; i++) //写入显示代码到AT24Cxx
52 1 {
53 2 write_byte(i, dis_code[i]);
54 2 }
55 1
C51 COMPILER V7.20 WL007 03/29/2005 15:46:59 PAGE 2
56 1 i = 0;
57 1 while(1)
58 1 {
59 2
60 2 P0 = read_random(i); // 循环读取24Cxx内容,并输出到P0口
61 2 i++;
62 2 i &= 0x07; // 循环读取范围为0x00~0x07
63 2 delayms(250);
64 2 }
65 1 }
66
67 void start()
68 // 开始位
69 {
70 1 SDA = 1;
71 1 SCL = 1;
72 1 _nop_();
73 1 _nop_();
74 1 SDA = 0;
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 _nop_();
79 1 SCL = 0;
80 1 }
81
82 void stop()
83 // 停止位
84 {
85 1 SDA = 0;
86 1 _nop_();
87 1 _nop_();
88 1 SCL = 1;
89 1 _nop_();
90 1 _nop_();
91 1 _nop_();
92 1 _nop_();
93 1 SDA = 1;
94 1 }
95
96 unsigned char shin()
97 // 从AT24Cxx移入数据到MCU
98 {
99 1 unsigned char i,read_data;
100 1 for(i = 0; i < 8; i++)
101 1 {
102 2 SCL = 1;
103 2 read_data <<= 1;
104 2 read_data |= (unsigned char)SDA;
105 2 SCL = 0;
106 2 }
107 1 return(read_data);
108 1 }
109 bit shout(unsigned char write_data)
110 // 从MCU移出数据到AT24Cxx
111 {
112 1 unsigned char i;
113 1 bit ack_bit;
114 1 for(i = 0; i < 8; i++) // 循环移入8个位
115 1 {
116 2 SDA = (bit)(write_data & 0x80);
117 2 _nop_();
C51 COMPILER V7.20 WL007 03/29/2005 15:46:59 PAGE 3
118 2 SCL = 1;
119 2 _nop_();
120 2 _nop_();
121 2 SCL = 0;
122 2 write_data <<= 1;
123 2 }
124 1 SDA = 1; // 读取应答
125 1 _nop_();
126 1 _nop_();
127 1 SCL = 1;
128 1 _nop_();
129 1 _nop_();
130 1 _nop_();
131 1 _nop_();
132 1 ack_bit = SDA;
133 1 SCL = 0;
134 1 return ack_bit; // 返回AT24Cxx应答位
135 1 }
136
137 void write_byte(unsigned char addr, unsigned char write_data)
138 // 在指定地址addr处写入数据write_data
139 {
140 1 start();
141 1 shout(OP_WRITE);
142 1 shout(addr);
143 1 shout(write_data);
144 1 stop();
145 1 delayms(10); // 写入周期
146 1 }
147
148 void fill_byte(unsigned char fill_data)
149 // 填充数据fill_data到EEPROM内
150 {
151 1 unsigned char i;
152 1 for(i = 0; i < MAX_ADDR; i++)
153 1 {
154 2 write_byte(i, fill_data);
155 2 }
156 1
157 1 }
158
159 unsigned char read_current()
160 // 在当前地址读取
161 {
162 1 unsigned char read_data;
163 1 start();
164 1 shout(OP_READ);
165 1 read_data = shin();
166 1 stop();
167 1 return read_data;
168 1 }
169
170 unsigned char read_random(unsigned char random_addr)
171 // 在指定地址读取
172 {
173 1 start();
174 1 shout(OP_WRITE);
175 1 shout(random_addr);
176 1 return(read_current());
177 1 }
178
179 void delayms(unsigned char ms)
C51 COMPILER V7.20 WL007 03/29/2005 15:46:59 PAGE 4
180 // 延时子程序
181 {
182 1 unsigned char i;
183 1 while(ms--)
184 1 {
185 2 for(i = 0; i < 120; i++);
186 2 }
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 246 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -