📄 www.ourhc.cn.lst
字号:
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 18:38:46 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:STC12C5A60S2单片机之AT24C04测试程序12T
5 使用芯片:STC12C5A60S2
6 晶振:11.0592MHZ
7 波特率:115200
8 编译环境:Keil
9 作者:zhangxinchun
10 网站:www.ourhc.cn
11 淘宝店:
12 汇诚科技 http://ourhc.taobao.com
13 郑兴电子直销部 http://shop68451856.taobao.com
14 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
15
16
17 *********************************************************************/
18 #include "REG52.H"
19 #include "INTRINS.H"
20
21 typedef unsigned char BYTE;
22 typedef unsigned short WORD;
23
24 sbit SCL = P3^4; //AT24C04的时钟
25 sbit SDA = P3^5; //AT24C04的数据
26
27 BYTE BUF[16]; //数据缓存区
28
29 BYTE code res[6] _at_ 0x23;
30
31 BYTE code TESTDATA[] =
32 {
33 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
34 0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
35 };
36
37 void Delay5us();
38 void Delay5ms();
39 void AT24C04_Start();
40 void AT24C04_Stop();
41 void AT24C04_SendACK(bit ack);
42 bit AT24C04_RecvACK();
43 void AT24C04_SendByte(BYTE dat);
44 BYTE AT24C04_RecvByte();
45 void AT24C04_ReadPage();
46 void AT24C04_WritePage();
47
48 void main()
49 {
50 1 AT24C04_WritePage();
51 1 Delay5ms();
52 1 AT24C04_ReadPage();
53 1
54 1 while (1);
55 1
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 18:38:46 PAGE 2
56 1 }
57
58 /**************************************
59 向AT24C04写1页(16字节)数据
60 将TESTDATA开始的16个测试数据写如设备的00~0F地址中
61 **************************************/
62 void AT24C04_WritePage()
63 {
64 1 BYTE i;
65 1
66 1 AT24C04_Start(); //起始信号
67 1 AT24C04_SendByte(0xa0); //发送设备地址+写信号
68 1 AT24C04_SendByte(0x00); //发送存储单元地址
69 1 for (i=0; i<16; i++)
70 1 {
71 2 AT24C04_SendByte(TESTDATA[i]);
72 2 }
73 1 AT24C04_Stop(); //停止信号
74 1 }
75
76 /**************************************
77 从AT24C04读取1页(16字节)数据
78 将设备的00~0F地址中的数据读出存放在DATA区的BUF中
79 **************************************/
80 void AT24C04_ReadPage()
81 {
82 1 BYTE i;
83 1
84 1 AT24C04_Start(); //起始信号
85 1 AT24C04_SendByte(0xa0); //发送设备地址+写信号
86 1 AT24C04_SendByte(0x00); //发送存储单元地址
87 1 AT24C04_Start(); //起始信号
88 1 AT24C04_SendByte(0xa1); //发送设备地址+读信号
89 1 for (i=0; i<16; i++)
90 1 {
91 2 BUF[i] = AT24C04_RecvByte();
92 2 if (i == 15)
93 2 {
94 3 AT24C04_SendACK(1); //最后一个数据需要会NAK
95 3 }
96 2 else
97 2 {
98 3 AT24C04_SendACK(0); //回应ACK
99 3 }
100 2 }
101 1 AT24C04_Stop(); //停止信号
102 1 }
103
104 /**************************************
105 延时5微秒(STC90C52RC@12M)
106 不同的工作环境,需要调整此函数
107 当改用1T的MCU时,请调整此延时函数
108 **************************************/
109 void Delay5us()
110 {
111 1 _nop_();
112 1 _nop_();
113 1 }
114
115 /**************************************
116 延时5毫秒(STC90C52RC@12M)
117 不同的工作环境,需要调整此函数
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 18:38:46 PAGE 3
118 当改用1T的MCU时,请调整此延时函数
119 **************************************/
120 void Delay5ms()
121 {
122 1 WORD n = 560;
123 1
124 1 while (n--);
125 1 }
126
127 /**************************************
128 起始信号
129 **************************************/
130 void AT24C04_Start()
131 {
132 1 SDA = 1; //拉高数据线
133 1 SCL = 1; //拉高时钟线
134 1 Delay5us(); //延时
135 1 SDA = 0; //产生下降沿
136 1 Delay5us(); //延时
137 1 SCL = 0; //拉低时钟线
138 1 }
139
140 /**************************************
141 停止信号
142 **************************************/
143 void AT24C04_Stop()
144 {
145 1 SDA = 0; //拉低数据线
146 1 SCL = 1; //拉高时钟线
147 1 Delay5us(); //延时
148 1 SDA = 1; //产生上升沿
149 1 Delay5us(); //延时
150 1 }
151
152 /**************************************
153 发送应答信号
154 入口参数:ack (0:ACK 1:NAK)
155 **************************************/
156 void AT24C04_SendACK(bit ack)
157 {
158 1 SDA = ack; //写应答信号
159 1 SCL = 1; //拉高时钟线
160 1 Delay5us(); //延时
161 1 SCL = 0; //拉低时钟线
162 1 Delay5us(); //延时
163 1 }
164
165 /**************************************
166 接收应答信号
167 **************************************/
168 bit AT24C04_RecvACK()
169 {
170 1 SCL = 1; //拉高时钟线
171 1 Delay5us(); //延时
172 1 CY = SDA; //读应答信号
173 1 SCL = 0; //拉低时钟线
174 1 Delay5us(); //延时
175 1
176 1 return CY;
177 1 }
178
179 /**************************************
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 18:38:46 PAGE 4
180 向IIC总线发送一个字节数据
181 **************************************/
182 void AT24C04_SendByte(BYTE dat)
183 {
184 1 BYTE i;
185 1
186 1 for (i=0; i<8; i++) //8位计数器
187 1 {
188 2 dat <<= 1; //移出数据的最高位
189 2 SDA = CY; //送数据口
190 2 SCL = 1; //拉高时钟线
191 2 Delay5us(); //延时
192 2 SCL = 0; //拉低时钟线
193 2 Delay5us(); //延时
194 2 }
195 1 AT24C04_RecvACK();
196 1 }
197
198 /**************************************
199 从IIC总线接收一个字节数据
200 **************************************/
201 BYTE AT24C04_RecvByte()
202 {
203 1 BYTE i;
204 1 BYTE dat = 0;
205 1
206 1 SDA = 1; //使能内部上拉,准备读取数据
207 1 for (i=0; i<8; i++) //8位计数器
208 1 {
209 2 dat <<= 1;
210 2 SCL = 1; //拉高时钟线
211 2 Delay5us(); //延时
212 2 dat |= SDA; //读数据
213 2 SCL = 0; //拉低时钟线
214 2 Delay5us(); //延时
215 2 }
216 1
217 1 return dat;
218 1 }
219 /********************************************************************
220 结束
221 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 236 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 2
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 + -