📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 03/04/2008 10:55:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: D:\Program Files\keil c\C51\BIN\C51.EXE I2C.c BROWSE DEBUG OBJECTEXTEND SRC(.\I2C.SRC)
stmt level source
1 #include <reg52.h>
2 #include "lyj.h"
3 #include "I2C.h"
4
5 #ifdef I2C_SUPPORT
6 #define t_lp_n 2 //I2C 读写单步延时
7 //22.1184MHZ时,12机械周期情况下,t_lp_n =2可用
8 #define I2C_WRITE_DELAY 250 //I2C 写完需要一个10ms的延时;应根据晶体的震荡频率适当调节
9 //22.1184MHZ时,12机械周期情况下,I2C_WRITE_DELAY =250可用
10 sbit I2C_SCL = P1^0;
11 sbit I2C_SDA = P1^1;
12 //sbit I2C_WP = P3^5;
13
14 void t_lp(UINT i)
15 {
16 1 UINT j;
17 1 for(j = 0 ; j< i ; j++);
18 1 }
19 //I2C START 过程
20 void I2C_START()
21 {
22 1 I2C_SCL = 0;
23 1 t_lp(t_lp_n);
24 1 I2C_SDA = 1;
25 1 t_lp(t_lp_n);
26 1 I2C_SCL = 1;
27 1 t_lp(t_lp_n);
28 1 I2C_SDA = 0;
29 1 t_lp(t_lp_n);
30 1 I2C_SCL = 0;
31 1 t_lp(t_lp_n);
32 1 }
33 //I2C stop 过程
34 void I2C_STOP()
35 {
36 1 I2C_SCL = 0;
37 1 t_lp(t_lp_n);
38 1 I2C_SDA = 0;
39 1 t_lp(t_lp_n);
40 1 I2C_SCL = 1;
41 1 t_lp(t_lp_n);
42 1 I2C_SDA = 1;
43 1 t_lp(t_lp_n);
44 1 }
45
46 void I2C_CK()
47 {
48 1 I2C_SCL = 0;
49 1 t_lp(t_lp_n);
50 1 I2C_SCL = 1;
51 1 t_lp(t_lp_n);
52 1 I2C_SCL = 0;
53 1 t_lp(t_lp_n);
54 1 }
55
C51 COMPILER V7.06 I2C 03/04/2008 10:55:54 PAGE 2
56 bit I2C_OUT(UCHAR i2c_sda_out)
57 {
58 1 UCHAR i;
59 1 bit j;
60 1 for(i=0;i<8;i++)
61 1 {
62 2 I2C_SDA = (i2c_sda_out << i)&0x80;
63 2 I2C_CK();
64 2 }
65 1 I2C_SCL = 0;
66 1 t_lp(t_lp_n);
67 1 I2C_SCL = 1;
68 1 t_lp(t_lp_n);
69 1 j = I2C_SDA;
70 1 I2C_SCL = 0;
71 1 t_lp(t_lp_n);
72 1 return j;
73 1 }
74
75 UCHAR I2C_IN()
76 {
77 1 UCHAR i;
78 1 UCHAR j;
79 1 for(i=0;i<8;i++)
80 1 {
81 2 I2C_SCL = 0;
82 2 t_lp(t_lp_n);
83 2 I2C_SCL = 1;
84 2 t_lp(t_lp_n);
85 2
86 2 if (I2C_SDA == 1)
87 2 j = (j<<1) | 0x01;
88 2 else
89 2 j = j<<1 ;
90 2
91 2 I2C_SCL = 0;
92 2 t_lp(t_lp_n);
93 2 }
94 1 I2C_SDA = 1;
95 1 I2C_SCL = 0;
96 1 t_lp(t_lp_n);
97 1 I2C_SDA = 1;
98 1 t_lp(t_lp_n);
99 1 I2C_SCL = 1;
100 1 t_lp(t_lp_n);
101 1 I2C_SCL = 0;
102 1 t_lp(t_lp_n);
103 1 I2C_SDA = 0;
104 1 t_lp(t_lp_n);
105 1 I2C_STOP();
106 1 return j;
107 1 }
108
109
110 //I2C字节写函数,device_address器件级联地址,本硬件没有级联;word_address要写得字节的存储地址;I2C_DATA要
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -