📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 11/18/2006 22:47:03 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*--------------------------------------------------------
2 i2c.c file
3 Creat by Computer-lov Date: 2005.7.19
4 Last edit date:2005.7.19
5 Copyright(C) 2005-2015 Computer-lov
6 All rights reserved
7 Welcome to my Blog: Http://computer00.21ic.org
8 -----------------------------------------------------------*/
9
10 #include "hardware.h"
11 #include "I2C.h"
12
13 #define delay()
14 //*****************************************************************************************************
15 //void delay(void) //延时子程序
16 //{
17 // unsigned char i;
18 // for(i=0;i<1;i++);
19 //}
20 //*****************************************************************************************************
21
22
23 //************************************** 将一个字节写入I2C总线 ***************************************
-**
24 unsigned char Write_a_data(unsigned char device_addr,unsigned char data_addr,unsigned char w_data)
25 {
26 1 unsigned char i,Device_Addr;
27 1 delay();
28 1 SDA=0; //产生一个起始位
29 1 delay();
30 1 Device_Addr=device_addr; //地址暂存
31 1 for(i=0;i<7;i++) //输出设备地址
32 1 {
33 2 SCL=0;
34 2 delay();
35 2 SDA=device_addr&0x80; //SDA上输出一位数据,高位在前
36 2 device_addr<<=1;
37 2 delay();
38 2 SCL=1;
39 2 delay();
40 2 }
41 1 SCL=0;
42 1 delay();
43 1 SDA=0; //SDA上输出0,表示写操作
44 1 delay();
45 1 SCL=1;
46 1 delay();
47 1 SCL=0;
48 1 delay();
49 1 SDA=1; //释放SDA线
50 1 delay();
51 1 SCL=1;
52 1 delay();
53 1 if(SDA){return 1;} //如果设备未响应,则返回出错代码1
54 1 for(i=0;i<8;i++) //输出数据地址
C51 COMPILER V7.06 I2C 11/18/2006 22:47:03 PAGE 2
55 1 {
56 2 SCL=0;
57 2 delay();
58 2 SDA=data_addr&0x80; //SDA上输出一位数据,高位在前
59 2 data_addr<<=1;
60 2 delay();
61 2 SCL=1;
62 2 delay();
63 2 delay();
64 2 }
65 1 SCL=0;
66 1 delay();
67 1 SDA=1; //释放SDA线
68 1 delay();
69 1 SCL=1;
70 1 delay();
71 1 if(SDA){return 2;} //如果设备未响应,则返回出错代码2
72 1 for(i=0;i<8;i++) //输出要写入的数据
73 1 {
74 2 SCL=0;
75 2 delay();
76 2 SDA=w_data&0x80; //SDA上输出一位数据,高位在前
77 2 w_data<<=1;
78 2 delay();
79 2 SCL=1;
80 2 delay();
81 2 }
82 1 SCL=0;
83 1 delay();
84 1 SDA=1; //释放SDA线
85 1 delay();
86 1 SCL=1;
87 1 delay();
88 1 if(SDA){return 3;} //如果设备未响应,则返回出错代码3
89 1 SCL=0;
90 1 delay();
91 1 SDA=0;
92 1 delay();
93 1 SCL=1;
94 1 delay();
95 1 SDA=1; //产生一个停止位,停止操作
96 1 return 0; //正确写入,返回0
97 1 }
98 //****************************************************************************************
99
100
101 #define SET_POINT 0xB0 //0xB0命令表示写入地址
102
103 //********************************* 从I2C总线中读取一个字节 *****************************
104 unsigned int Read_a_data(unsigned char device_addr,unsigned char data_addr)
105 {
106 1 unsigned char i,r_data; //,Device_Addr;
107 1 Write_a_data(device_addr,SET_POINT,data_addr);
108 1 SDA=0; //产生一个起始位
109 1 delay();
110 1 for(i=0;i<7;i++) //输出设备地址,一个7位的地址
111 1 {
112 2 SCL=0;
113 2 delay();
114 2 SDA=device_addr&0x80; //SDA上输出一位数据,高位在前
115 2 device_addr<<=1;
116 2 delay();
C51 COMPILER V7.06 I2C 11/18/2006 22:47:03 PAGE 3
117 2 SCL=1;
118 2 delay();
119 2 }
120 1 SCL=0;
121 1 delay();
122 1 SDA=1; //SDA上输出1,表示读操作
123 1 delay();
124 1 SCL=1;
125 1 delay();
126 1 SCL=0;
127 1 delay();
128 1 SDA=1; //释放SDA线
129 1 delay();
130 1 SCL=1;
131 1 delay();
132 1 if(SDA) return 0x0300; //如果设备未响应,则返回出错代码0x0300
133 1 for(i=0;i<8;i++) //读出数据
134 1 {
135 2 SCL=0;
136 2 delay();
137 2 r_data<<=1;
138 2 delay();
139 2 SCL=1;
140 2 if(SDA)r_data=r_data|0x01; //保存一位数据
141 2 delay();
142 2 }
143 1 SCL=0;
144 1 delay();
145 1 SDA=1; //置SDA高电平,表示停止读出
146 1 delay();
147 1 SCL=1;
148 1 delay();
149 1 SCL=0;
150 1 delay();
151 1 SDA=0;
152 1 delay();
153 1 SCL=1;
154 1 delay();
155 1 SDA=1; //产生一个停止位,停止读操作
156 1 return r_data; //返回数据
157 1 }
158 //****************************************************************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 199 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -