📄 24c041.lst
字号:
C51 COMPILER V8.02 24C041 11/03/2007 09:12:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24C041
OBJECT MODULE PLACED IN 24c041.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 24c041.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************/
2 /*作 者:焦建国 指导老师:宋树祥 */
3 /* function:按K1键从0到7显示,按K2清除24C04中的数据*/
4 /*2007-2, 湖南工学院 */
5 /*****************************************///除去两个按键的功能为最简24C04子程序
6 #include <reg52.h>
7 #include <intrins.h>
8
9 #define OP_READ 0xa1 // 器件地址以及读取操作
10 #define OP_WRITE 0xa0 // 器件地址以及写入操作
11 #define MAX_ADDR 0xfe // AT24C02最大地址
12
13 unsigned char code dis_code[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0
-x86,0x8E}; ///*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,*/
14
15 // 写入到AT24C01的数据串
16
17 sbit SDA = P3^4;//P3^0;
18 sbit SCL = P3^3;// P3^1;
19
20
21 void start();
22 void stop();
23 unsigned char shin();
24 bit shout(unsigned char write_data);
25 unsigned char read_random(unsigned char random_addr);
26 void write_byte( unsigned char addr, unsigned char write_data);
27 void fill_byte(unsigned char fill_data);
28 void delayms(unsigned char ms);
29 sbit k1=P1^0;
30 sbit k2=P1^1;
31
32 main(void)
33 {
34 1 unsigned char i;
35 1 SDA = 1;
36 1 SCL = 1;
37 1 // fill_byte(0xff); // 全部填充0xff
38 1
39 1 // for(i = 0 ; i < 8; i++) //写入显示代码到AT24Cxx
40 1 // {
41 1 // write_byte(i, dis_code[i]);
42 1 // }
43 1
44 1 // i = 0;
45 1
46 1 while(1)
47 1 {
48 2 if(k1==0) //写入显示代码到AT24Cxx
49 2 {
50 3 for(i = 0 ; i < 16; i++)
51 3 write_byte(i, dis_code[i]);
52 3 }
53 2 if(k2==0)
54 2 fill_byte(0xff);
C51 COMPILER V8.02 24C041 11/03/2007 09:12:09 PAGE 2
55 2
56 2
57 2 P0 = read_random(i); // 循环读取24Cxx内容,并输出到P0口
58 2 P2 = 0xdf;
59 2
60 2 i++;
61 2 i =i& 0x0f; // 循环读取范围为0x00~0x07
62 2 delayms(250); delayms(100);
63 2 }
64 1 }
65
66 void start()
67 // 开始位
68 {
69 1 SDA = 1;
70 1 SCL = 1;
71 1 _nop_();
72 1 _nop_();
73 1 SDA = 0;
74 1 _nop_();
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 SCL = 0;
79 1 }
80
81 void stop()
82 // 停止位
83 {
84 1 SDA = 0;
85 1 _nop_();
86 1 _nop_();
87 1 SCL = 1;
88 1 _nop_();
89 1 _nop_();
90 1 _nop_();
91 1 _nop_();
92 1 SDA = 1;//--焦建国制作
93 1 }
94
95 unsigned char shin()
96 // 从AT24Cxx移入数据到单片机
97 {
98 1 unsigned char i,read_data;
99 1 for(i = 0; i < 8; i++)
100 1 {
101 2 SCL = 1;
102 2 read_data <<= 1;
103 2 read_data |= (unsigned char)SDA;
104 2 SCL = 0;
105 2 }
106 1 return(read_data);
107 1 }
108 bit shout(unsigned char write_data)
109 // 从单片机移出数据到AT24Cxx
110 {
111 1 unsigned char i;
112 1 bit ack_bit;
113 1 for(i = 0; i < 8; i++) // 循环移入8个位
114 1 {
115 2 SDA = (bit)(write_data & 0x80);
116 2 _nop_();
C51 COMPILER V8.02 24C041 11/03/2007 09:12:09 PAGE 3
117 2 SCL = 1;
118 2 _nop_();
119 2 _nop_();
120 2 SCL = 0;
121 2 write_data <<= 1;
122 2 }
123 1 SDA = 1; // 读取应答
124 1 _nop_();
125 1 _nop_();
126 1 SCL = 1;
127 1 _nop_();
128 1 _nop_();
129 1 _nop_();
130 1 _nop_();
131 1 ack_bit = SDA;
132 1 SCL = 0;
133 1 return ack_bit; // 返回AT24Cxx应答位
134 1 }
135
136 void write_byte(unsigned char addr, unsigned char write_data)
137 // 在指定地址addr处写入数据write_data
138 {
139 1 start();
140 1 shout(OP_WRITE);
141 1 shout(addr);
142 1 shout(write_data);
143 1 stop();
144 1 delayms(10); // 写入周期
145 1 }
146
147 void fill_byte(unsigned char fill_data)
148 // 填充数据fill_data到EEPROM内
149 {
150 1 unsigned char i;
151 1 for(i = 0; i < MAX_ADDR; i++)
152 1 {
153 2 write_byte(i, fill_data);
154 2 }
155 1
156 1 }
157
158 unsigned char read_current()
159 // 在当前地址读取
160 {
161 1 unsigned char read_data;
162 1 start();
163 1 shout(OP_READ);
164 1 read_data = shin();
165 1 stop();
166 1 return read_data;
167 1 }
168
169 unsigned char read_random(unsigned char random_addr)
170 // 在指定地址读取
171 {
172 1 start();
173 1 shout(OP_WRITE);
174 1 shout(random_addr);
175 1 return(read_current());
176 1 }
177
178 void delayms(unsigned char ms)
C51 COMPILER V8.02 24C041 11/03/2007 09:12:09 PAGE 4
179 // 延时子程序
180 {
181 1 unsigned char i;
182 1 while(ms--)
183 1 {
184 2 for(i = 0; i < 120; i++);
185 2 }
186 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 257 ----
CONSTANT SIZE = 16 ----
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 + -