📄 iic.lst
字号:
C51 COMPILER V8.02 IIC 12/10/2008 15:33:36 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg51.h"
2 sbit IIC_SDA=P3^7; /*IIC总线SDA引脚定义*/
3 sbit IIC_SCL=P3^6; /*IIC总线SCL引脚定义*/
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define IC24X_ORDER_WRITE 0xa0 /*AT24C02写指令*/
7 #define IC24X_ORDER_READ 0xa1 /*AT24C02读指令*/
8 #define IIC_TLOW 10 /*IIC总线等待时间*/
9
10 void IicDelay();
11 void IicStart();
12 void IicStop();
13 void IicAck();
14 void IicNAck();
15 void IicWrite(uchar ucData);
16 uchar IicRead();
17 void AT24C02WriteByte(uint uiAddr,uchar ucData);
18 uchar AT24C02ReadByte(uint uiAddr);
19 /*****************************************************************************
20 名称: AT24C02WriteByte()
21 说明: AT24C02写操作
22 参数: uint uiAddr 地址
23 uchar ucData 数据
24 返回: 无
25 *****************************************************************************/
26 void AT24C02WriteByte(uint uiAddr,uchar ucData)
27 {
28 1 IicStart();
29 1 IicWrite(IC24X_ORDER_WRITE);
30 1 IicAck();
31 1 IicWrite(uiAddr);
32 1 IicAck();
33 1 IicWrite(ucData);
34 1 IicAck();
35 1 IicStop();
36 1 IicDelay();
37 1 }
38
39 /*****************************************************************************
40 名称: AT24C02ReadByte()
41 说明: AT24C02读操作
42 参数: uint uiAddr 地址
43 返回: uchar 数据
44 *****************************************************************************/
45 uchar AT24C02ReadByte(uint uiAddr)
46 {
47 1 uchar ucData;
48 1
49 1 IicStart();
50 1 IicWrite(IC24X_ORDER_WRITE);
51 1 IicAck();
52 1 IicWrite(uiAddr);
53 1 IicAck();
54 1 IicStart();
55 1 IicWrite(IC24X_ORDER_READ);
C51 COMPILER V8.02 IIC 12/10/2008 15:33:36 PAGE 2
56 1 IicAck();
57 1 ucData=IicRead();
58 1 IicNAck();
59 1 IicStop();
60 1 return ucData;
61 1 }
62
63 /****************************************************************************
64 说明: IIC总线处理函数
65 *****************************************************************************/
66 void IicDelay(void) /*内部涵数*/
67 {
68 1 uchar a;
69 1 for(a=0;a<IIC_TLOW;a++);
70 1 }
71
72 void IicStart(void) /*内部涵数*/
73 {
74 1 IIC_SDA=1;
75 1 IicDelay();
76 1 IIC_SCL=1;
77 1 IicDelay();
78 1 IIC_SDA=0;
79 1 IicDelay();
80 1 IIC_SCL=0;
81 1 }
82
83 void IicStop(void) /*内部涵数*/
84 {
85 1 IIC_SCL=0;
86 1 IIC_SDA=0;
87 1 IIC_SCL=1;
88 1 IIC_SDA=1;
89 1 }
90
91 void IicAck(void) /*内部涵数*/
92 {
93 1 IIC_SDA=0;
94 1 IIC_SCL=1;
95 1 IicDelay();
96 1 IIC_SCL=0;
97 1 IIC_SDA=1;
98 1 }
99 void IicNAck(void) /*内部涵数*/
100 {
101 1 IIC_SDA=1;
102 1 IIC_SCL=1;
103 1 IicDelay();
104 1 IIC_SDA=0;
105 1 IIC_SCL=0;
106 1 }
107
108 void IicWrite(uchar ucData) /*内部涵数*/
109 {
110 1 uchar a;
111 1
112 1 for(a=0;a<8;a++)
113 1 {
114 2 if(ucData&0x80)
115 2 {
116 3 IIC_SDA=1;
117 3 }
C51 COMPILER V8.02 IIC 12/10/2008 15:33:36 PAGE 3
118 2 else
119 2 {
120 3 IIC_SDA=0;
121 3 }
122 2 IIC_SCL=1;
123 2 IIC_SCL=0;
124 2 ucData=ucData<<1;
125 2 }
126 1 }
127
128 uchar IicRead(void) /*内部涵数*/
129 {
130 1 uchar a,ucData=0;
131 1
132 1 for(a=0;a<8;a++)
133 1 {
134 2 IIC_SDA=1;
135 2 IIC_SCL=1;
136 2 ucData<<=1;
137 2 if(IIC_SDA==1)
138 2 {
139 3 ucData|=0x01;
140 3 }
141 2 else
142 2 {
143 3 ucData&=0xfe;
144 3 }
145 2 IIC_SCL=0;
146 2 }
147 1 return ucData;
148 1 }
149 /*********************************************************************/
150 void delay(uchar j) /*延时*/
151 {
152 1 uchar k,l;
153 1 for(l=0;l<=j;l++)
154 1 for(k=0;k<=250;k++);
155 1 }
156 /*********************************************************************/
157 void main(void)
158 {
159 1 //uchar i;
160 1
161 1 IIC_SDA=1;
162 1 IIC_SCL=1;
163 1 /*IIC时钟引脚至0*/
164 1 AT24C02WriteByte(22,0x99);
165 1 delay(80);
166 1 /*将dsp数组的数据写入24c02*/
167 1 while(1)
168 1 {
169 2 P0=AT24C02ReadByte(22);
170 2 delay(80); /*读出24c02中的数据并送P0口显示*/
171 2 }
172 1
173 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 253 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
C51 COMPILER V8.02 IIC 12/10/2008 15:33:36 PAGE 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -