📄 up51s007.lst
字号:
C51 COMPILER V7.08 UP51S007 12/13/2004 09:18:33 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE UP51S007
OBJECT MODULE PLACED IN up51S007.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE up51S007.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * *
3 * File : uP51s007.c *
4 * Date : 2004-9-5 *
5 * Version : 1.0 *
6 * *
7 * Author : kevin kevin@dz51.com *
8 * Company : Http://www.dz51.com *
9 * *
10 ********************************************************************************
11 * Descriptoon: *
12 * 读写AT24C01演示程序 *
13 * *
14 * 将跳线跳到流水灯,可以看到随dis_code内代码而产生的花样变化 *
15 * *
16 *******************************************************************************/
17 #include <reg51.h>
18 #include <intrins.h>
19
20 #define OP_READ 0xa1 // 器件地址以及读取操作
21 #define OP_WRITE 0xa0 // 器件地址以及写入操作
22 #define MAX_ADDR 0x7f // AT24C01最大地址
23
24 unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
25 // 写入到AT24C01的数据串
26 //
27
28 sbit SDA = P1^1;
29 sbit SCL = P1^0;
30
31
32 void start();
33 void stop();
34 unsigned char shin();
35 bit shout(unsigned char write_data);
36 unsigned char read_random(unsigned char random_addr);
37 void write_byte( unsigned char addr, unsigned char write_data);
38 void fill_byte(unsigned char fill_data);
39 void delayms(unsigned char ms);
40
41 main(void)
42 {
43 1 unsigned char i;
44 1 SDA = 1;
45 1 SCL = 1;
46 1 fill_byte(0xff); // 全部填充0xff
47 1
48 1 for(i = 0 ; i < 8; i++) //写入显示代码到AT24Cxx
49 1 {
50 2 write_byte(i, dis_code[i]);
51 2 }
52 1
53 1 i = 0;
54 1 while(1)
55 1 {
C51 COMPILER V7.08 UP51S007 12/13/2004 09:18:33 PAGE 2
56 2
57 2 P0 = read_random(i); // 循环读取24Cxx内容,并输出到P0口
58 2 i++;
59 2 i &= 0x07; // 循环读取范围为0x00~0x07
60 2 delayms(250);
61 2 }
62 1 }
63
64 void start()
65 // 开始位
66 {
67 1 SDA = 1;
68 1 SCL = 1;
69 1 _nop_();
70 1 _nop_();
71 1 SDA = 0;
72 1 _nop_();
73 1 _nop_();
74 1 _nop_();
75 1 _nop_();
76 1 SCL = 0;
77 1 }
78
79 void stop()
80 // 停止位
81 {
82 1 SDA = 0;
83 1 _nop_();
84 1 _nop_();
85 1 SCL = 1;
86 1 _nop_();
87 1 _nop_();
88 1 _nop_();
89 1 _nop_();
90 1 SDA = 1;
91 1 }
92
93 unsigned char shin()
94 // 从AT24Cxx移入数据到MCU
95 {
96 1 unsigned char i,read_data;
97 1 for(i = 0; i < 8; i++)
98 1 {
99 2 SCL = 1;
100 2 read_data <<= 1;
101 2 read_data |= (unsigned char)SDA;
102 2 SCL = 0;
103 2 }
104 1 return(read_data);
105 1 }
106 bit shout(unsigned char write_data)
107 // 从MCU移出数据到AT24Cxx
108 {
109 1 unsigned char i;
110 1 bit ack_bit;
111 1 for(i = 0; i < 8; i++) // 循环移入8个位
112 1 {
113 2 SDA = (bit)(write_data & 0x80);
114 2 _nop_();
115 2 SCL = 1;
116 2 _nop_();
117 2 _nop_();
C51 COMPILER V7.08 UP51S007 12/13/2004 09:18:33 PAGE 3
118 2 SCL = 0;
119 2 write_data <<= 1;
120 2 }
121 1 SDA = 1; // 读取应答
122 1 _nop_();
123 1 _nop_();
124 1 SCL = 1;
125 1 _nop_();
126 1 _nop_();
127 1 _nop_();
128 1 _nop_();
129 1 ack_bit = SDA;
130 1 SCL = 0;
131 1 return ack_bit; // 返回AT24Cxx应答位
132 1 }
133
134 void write_byte(unsigned char addr, unsigned char write_data)
135 // 在指定地址addr处写入数据write_data
136 {
137 1 start();
138 1 shout(OP_WRITE);
139 1 shout(addr);
140 1 shout(write_data);
141 1 stop();
142 1 delayms(10); // 写入周期
143 1 }
144
145 void fill_byte(unsigned char fill_data)
146 // 填充数据fill_data到EEPROM内
147 {
148 1 unsigned char i;
149 1 for(i = 0; i < MAX_ADDR; i++)
150 1 {
151 2 write_byte(i, fill_data);
152 2 }
153 1
154 1 }
155
156 unsigned char read_current()
157 // 在当前地址读取
158 {
159 1 unsigned char read_data;
160 1 start();
161 1 shout(OP_READ);
162 1 read_data = shin();
163 1 stop();
164 1 return read_data;
165 1 }
166
167 unsigned char read_random(unsigned char random_addr)
168 // 在指定地址读取
169 {
170 1 start();
171 1 shout(OP_WRITE);
172 1 shout(random_addr);
173 1 return(read_current());
174 1 }
175
176 void delayms(unsigned char ms)
177 // 延时子程序
178 {
179 1 unsigned char i;
C51 COMPILER V7.08 UP51S007 12/13/2004 09:18:33 PAGE 4
180 1 while(ms--)
181 1 {
182 2 for(i = 0; i < 120; i++);
183 2 }
184 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 + -