📄 iic_b.lst
字号:
C51 COMPILER V7.08 IIC_B 09/27/2006 09:13:59 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE IIC_B
OBJECT MODULE PLACED IN IIC_B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC_B.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: 北京蓝海微芯LJD-SY-5200单片机开发系统演示程序 *
3 * 文件: 24C02.C *
4 * 日期: 2006-8-9 *
5 * 版本: 1.0 *
6 * 作者: 蓝海微芯 *
7 * 网站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * 24C02调用程序模块 *
-
11 * *
12 * *
13 ********************************************************************************
14 * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
15 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
16 *******************************************************************************/
17 #include<reg51.h> /*=== 头文件包含 ===*/
18 #include<intrins.h>
19 #include<absacc.h>
20 #include <IC_CARD_b.h>
21
22 /* iic延时 */
23 void iic_wait(void)
24 {
25 1 _nop_();
26 1 _nop_();
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1 _nop_();
32 1 _nop_();
33 1 _nop_();
34 1 _nop_();
35 1 _nop_();
36 1 _nop_();
37 1 _nop_();
38 1 _nop_();
39 1 _nop_();
40 1 _nop_();
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 _nop_();
45 1 _nop_();
46 1 _nop_();
47 1 _nop_();
48 1 }
49 /* 开启iic总线 */
50 void iic_start(void)
51 {
52 1 SDA = 1;
53 1 SCL = 1;
54 1 iic_wait();
C51 COMPILER V7.08 IIC_B 09/27/2006 09:13:59 PAGE 2
55 1 SDA = 0;
56 1 iic_wait();
57 1 SCL = 0;
58 1 }
59 /* 关闭iic总线 */
60 void iic_stop(void)
61 {
62 1 SDA=0;
63 1 SCL=0;
64 1 iic_wait();
65 1 SCL=1;
66 1 iic_wait();
67 1 SDA=1;
68 1 }
69 /* 发送ACK信号 */
70 void iic_ack(void)
71 {
72 1 SDA=0;
73 1 iic_wait();
74 1 SCL=1;
75 1 iic_wait();
76 1 SCL=0;
77 1 }
78 /* 发送NOACK信号 */
79 void iic_no_ack(void)
80 {
81 1 SDA=1;
82 1 iic_wait();
83 1 SCL=1;
84 1 iic_wait();
85 1 SCL=0;
86 1 }
87 /********************************************************************
88 函 数 名:iic_wait_ack
89 功 能:等待ACK信号
90 说 明:
91 入口参数:
92 返 回 值:1-ACK 0-ERROR
93 设 计:蓝海微芯
94 ***********************************************************************/
95 bit iic_wait_ack(void)
96 {
97 1 uchar errtime=255;
98 1 //uint errtime = 1000;
99 1
100 1 SDA=1;
101 1 iic_wait();
102 1 SCL=1;
103 1 iic_wait();
104 1
105 1 while(SDA)
106 1 {
107 2 errtime--;
108 2 if(!errtime)
109 2 return 0;
110 2 }
111 1
112 1 SCL=0;
113 1 return 1;
114 1 }
115 /********************************************************************
116 函 数 名:iic_send_byte
C51 COMPILER V7.08 IIC_B 09/27/2006 09:13:59 PAGE 3
117 功 能:MCU向iic设备发送一个字节
118 说 明:
119 入口参数:sbyte 待发送的字节数据
120 返 回 值:
121 设 计:蓝海微芯
122 ***********************************************************************/
123 void iic_send_byte(uchar sbyte)
124 {
125 1 uchar i = 8;
126 1
127 1 while(i--)
128 1 {
129 2 SCL = 0;
130 2 _nop_();
131 2 SDA = (bit)(sbyte&0x80);
132 2 sbyte <<= 1;
133 2 iic_wait();
134 2 SCL = 1;
135 2 iic_wait();
136 2 }
137 1
138 1 SCL=0;
139 1 }
140 /********************************************************************
141 函 数 名:iic_receive_byte
142 功 能:MCU从iic设备接收一个字节
143 说 明:
144 入口参数:
145 返 回 值:ddata 接收数据
146 设 计:蓝海微芯
147 ***********************************************************************/
148 uchar iic_receive_byte(void)
149 {
150 1 uchar i=8;
151 1 uchar ddata=0;
152 1
153 1 SDA=1;
154 1 while(i--)
155 1 {
156 2 ddata <<= 1;
157 2 SCL=0;
158 2 iic_wait();
159 2 SCL=1;
160 2 iic_wait();
161 2 ddata |= SDA;
162 2 }
163 1 SCL=0;
164 1 return ddata;
165 1 }
166 /********************************************************************
167 函 数 名:write_iic_data
168 功 能:向iic设备写入N个字节
169 说 明:
170 入口参数:write_data 存放写入字节的数组
171 address 指定从address处开始写入
172 num 写入的字节数
173 返 回 值:无
174 设 计:蓝海微芯
175 ***********************************************************************/
176 void write_iic_data(uchar write_data[], uchar address, uchar num)
177 {
178 1 uchar n;
C51 COMPILER V7.08 IIC_B 09/27/2006 09:13:59 PAGE 4
179 1
180 1 iic_start();
181 1 iic_send_byte(0xa0);
182 1 iic_wait_ack();
183 1 iic_send_byte(address);
184 1 iic_wait_ack();
185 1
186 1 for(n=0; n<num; n++)
187 1 {
188 2 iic_send_byte(write_data[n]);
189 2 iic_wait_ack();
190 2 }
191 1 iic_stop();
192 1 }
193 /********************************************************************
194 函 数 名:read_iic_data
195 功 能:从iic设备读取N个字节
196 说 明:
197 入口参数:read_data 存放读取字节的数组
198 address 指定从address处开始读取
199 num 读取的字节数
200 返 回 值:无
201 设 计:蓝海微芯
202 ***********************************************************************/
203 void read_iic_data(uchar read_data[], uchar address, uchar num)
204 {
205 1 uchar n;
206 1 uchar *pread_data;
207 1 pread_data = read_data;
208 1 iic_start();
209 1 iic_send_byte(0xa0);
210 1 iic_wait_ack();
211 1 iic_send_byte(address);
212 1 iic_wait_ack();
213 1 iic_start();
214 1 iic_send_byte(0xa1);
215 1 iic_wait_ack();
216 1
217 1 for (n=0; n<num; n++)
218 1 {
219 2 *pread_data = iic_receive_byte();
220 2 pread_data++;
221 2
222 2 if (n != (num - 1)) //最后一个数据不应答
223 2 {
224 3 iic_ack();
225 3 }
226 2 }
227 1 iic_no_ack();
228 1 iic_stop();
229 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 263 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V7.08 IIC_B 09/27/2006 09:13:59 PAGE 5
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -