?? 24c02.lst
字號:
C51 COMPILER V8.08 24C02 04/22/2009 13:44:22 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24C02.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 24C02.C DEBUG OBJECTEXTEND
line level source
1
2
3 #include <reg51.h>
4 #include <intrins.h>
5
6 #define OP_READ 0xa1 // 器件地址以及讀取操作
7 #define OP_WRITE 0xa0 // 器件地址以及寫入操作
8 #define MAX_ADDR 0x7f // AT24C02最大地址
9 #define uchar unsigned char
10
11 unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
12 // 寫入到AT24C01的數據串
13
14 sbit SDA = P3^4;
15 sbit SCL = P3^3;
16
17
18 void start();
19 void stop();
20 unsigned char shin();
21 bit shout(unsigned char write_data);
22 unsigned char read_random(unsigned char random_addr);
23 void write_byte( unsigned char addr, unsigned char write_data);
24 void fill_byte(unsigned char fill_data);
25 void delayms(unsigned char ms);
26
27 main(void)
28 {
29 1 unsigned char i;
30 1 SDA = 1;
31 1 SCL = 1;
32 1 fill_byte(0xff); // 全部填充0xff
33 1
34 1 for(i = 0 ; i < 8; i++) //寫入顯示代碼到AT24Cxx
35 1 {
36 2 write_byte(i, dis_code[i]);
37 2 }
38 1
39 1 i = 0;
40 1 while(1)
41 1 {
42 2
43 2 P0 = read_random(i); // 循環讀取24Cxx內容,并輸出到P0口
44 2 i++;
45 2 i &= 0x07; // 循環讀取范圍為0x00~0x07
46 2 delayms(250);
47 2 }
48 1 }
49
50 void start()
51 // 開始位
52 {
53 1 SDA = 1;
54 1 SCL = 1;
55 1 _nop_();
C51 COMPILER V8.08 24C02 04/22/2009 13:44:22 PAGE 2
56 1 _nop_();
57 1 SDA = 0;
58 1 _nop_();
59 1 _nop_();
60 1 _nop_();
61 1 _nop_();
62 1 SCL = 0;
63 1 }
64
65 void stop()
66 // 停止位
67 {
68 1 SDA = 0;
69 1 _nop_();
70 1 _nop_();
71 1 SCL = 1;
72 1 _nop_();
73 1 _nop_();
74 1 _nop_();
75 1 _nop_();
76 1 SDA = 1;
77 1 }
78
79 unsigned char shin()
80 // 從AT24Cxx移入數據到MCU
81 {
82 1 unsigned char i,read_data;
83 1 for(i = 0; i < 8; i++)
84 1 {
85 2 SCL = 1;
86 2 read_data <<= 1;
87 2 read_data |= (unsigned char)SDA;
88 2 SCL = 0;
89 2 }
90 1 return(read_data);
91 1 }
92 bit shout(unsigned char write_data)
93 // 從MCU移出數據到AT24Cxx
94 {
95 1 unsigned char i;
96 1 bit ack_bit;
97 1 for(i = 0; i < 8; i++) // 循環移入8個位
98 1 {
99 2 SDA = (bit)(write_data & 0x80);
100 2 _nop_();
101 2 SCL = 1;
102 2 _nop_();
103 2 _nop_();
104 2 SCL = 0;
105 2 write_data <<= 1;
106 2 }
107 1 SDA = 1; // 讀取應答
108 1 _nop_();
109 1 _nop_();
110 1 SCL = 1;
111 1 _nop_();
112 1 _nop_();
113 1 _nop_();
114 1 _nop_();
115 1 ack_bit = SDA;
116 1 SCL = 0;
117 1 return ack_bit; // 返回AT24Cxx應答位
C51 COMPILER V8.08 24C02 04/22/2009 13:44:22 PAGE 3
118 1 }
119
120 void write_byte(unsigned char addr, unsigned char write_data)
121 // 在指定地址addr處寫入數據write_data
122 {
123 1 start();
124 1 shout(OP_WRITE);
125 1 shout(addr);
126 1 shout(write_data);
127 1 stop();
128 1 delayms(10); // 寫入周期
129 1 }
130
131 void fill_byte(unsigned char fill_data)
132 // 填充數據fill_data到EEPROM內
133 {
134 1 unsigned char i;
135 1 for(i = 0; i < MAX_ADDR; i++)
136 1 {
137 2 write_byte(i, fill_data);
138 2 }
139 1
140 1 }
141
142 unsigned char read_current()
143 // 在當前地址讀取
144 {
145 1 unsigned char read_data;
146 1 start();
147 1 shout(OP_READ);
148 1 read_data = shin();
149 1 stop();
150 1 return read_data;
151 1 }
152
153 unsigned char read_random(unsigned char random_addr)
154 // 在指定地址讀取
155 {
156 1 start();
157 1 shout(OP_WRITE);
158 1 shout(random_addr);
159 1 return(read_current());
160 1 }
161
162 void delayms(unsigned char ms)
163 // 延時子程序
164 {
165 1 unsigned char i;
166 1 while(ms--)
167 1 {
168 2 for(i = 0; i < 120; i++);
169 2 }
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 246 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
C51 COMPILER V8.08 24C02 04/22/2009 13:44:22 PAGE 4
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 + -