📄 iic.lst
字号:
C51 COMPILER V8.02 IIC 05/31/2008 12:47:21 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\hex\iic.obj
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE src\iic.c BROWSE INCDIR(.\h) DEBUG OBJECTEXTEND PRINT(.\lst\i
-ic.lst) OBJECT(.\hex\iic.obj)
line level source
1 #include"reg52.h"
2 #include"intrins.h"
3 #include"interface.h"
4 #include"my_type.h"
5 #include"function.h"
6 #include"global_var.h"
7
8 /*******************IIC开始信号**************************/
9 void start_iic()
10 {
11 1 IIC_SDA = 1;
12 1 IIC_SCL = 1;
13 1 Wait5us;
14 1 IIC_SDA = 0;//下跳开始
15 1 Wait5us;
16 1 IIC_SCL = 0;//钳住iic总线,准备发送和接收数据
17 1 Wait2us;
18 1 }
19
20 /*******************IIC结束信号**************************/
21 void stop_iic()
22 {
23 1 IIC_SDA = 0;
24 1 IIC_SCL = 1;
25 1 Wait5us;
26 1 IIC_SDA = 1;//上跳结束
27 1 Wait5us;
28 1 IIC_SCL = 0;//只有关闭I2C总线时才使IIC_SCL为低电平
29 1 Wait2us;
30 1 }
31
32 /*******************IIC应答信号**************************/
33 void ack_iic()
34 {
35 1 IIC_SDA = 0;
36 1 IIC_SCL = 1;
37 1 Wait5us;
38 1 IIC_SCL = 0;
39 1 IIC_SDA = 1;
40 1 Wait2us;
41 1 }
42
43 /******************IIC非应答信号**************************/
44 void nack_iic()
45 {
46 1 IIC_SDA = 1;
47 1 IIC_SCL = 1;
48 1 Wait5us;
49 1 IIC_SCL = 0;
50 1 IIC_SDA = 0;
51 1 Wait2us;
52 1 }
53
54 /*******************IIC主写1字节数据**********************/
C51 COMPILER V8.02 IIC 05/31/2008 12:47:21 PAGE 2
55 void write_byte(uchar c)
56 {
57 1 uchar i;
58 1 for(i=0;i<8;i++)
59 1 {
60 2 if(c&0x80)
61 2 IIC_SDA = 1;
62 2 else
63 2 IIC_SDA = 0;
64 2 IIC_SCL = 1;
65 2 Wait5us;
66 2 IIC_SCL = 0;
67 2 c<<=1;//准备下一位
68 2 }
69 1 IIC_SDA = 1;
70 1 IIC_SCL = 1;//释放数据线,等待接收从机应答信号
71 1 Wait5us;
72 1 if(IIC_SDA == 0)
73 1 iic_ack = 1;//有应答信号
74 1 else
75 1 iic_ack = 0;
76 1 IIC_SCL = 0;
77 1 }
78
79 /*******************IIC主读1字节数据**********************/
80 uchar read_byte()
81 {
82 1 uchar i;
83 1 uchar r = 0;
84 1 IIC_SDA = 1;//设置数据线为输入方式
85 1 for(i=0;i<8;i++)
86 1 {
87 2 r<<=1;
88 2 IIC_SCL = 1;//时钟高,数据有效
89 2 Wait5us;
90 2 if(1 == IIC_SDA)
91 2 r++;
92 2 IIC_SCL = 0;
93 2 }
94 1 return r;//主机作为接收器,单字节不应答也就相当与产生非应答信号
95 1 }
96
97 /*******************IIC主发n字节数据**********************/
98 bit write_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
99 {
100 1 uchar i;
101 1 start_iic();//发开始信号
102 1 write_byte(slave);//发从器件地址
103 1 if(0 == iic_ack)
104 1 return 0;//没有收到应答信号
105 1 write_byte(addr);//要写的首地址
106 1 if(0 == iic_ack)
107 1 return 0;//没有收到应答信号
108 1 for(i=0;i<n;i++)
109 1 {
110 2 write_byte(*s);//数据地址指向的数据
111 2 if(0 == iic_ack)
112 2 return 0;//没有收到应答信号
113 2 s++;
114 2 }
115 1 stop_iic();
116 1 return 1;
C51 COMPILER V8.02 IIC 05/31/2008 12:47:21 PAGE 3
117 1 }
118
119 /*******************IIC主读n字节数据**********************/
120 bit read_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
121 {
122 1 uchar i;
123 1 start_iic();//发开始信号
124 1 write_byte(slave);//写硬件地址
125 1 if(0 == iic_ack)
126 1 return 0;//没有收到应答信号
127 1 write_byte(addr);
128 1 if(0 == iic_ack)
129 1 return 0;//没有收到应答信号
130 1 start_iic();
131 1 write_byte(slave|1);//读硬件地址
132 1 if(0 == iic_ack)
133 1 return 0;//没有收到应答信号
134 1 for(i=0;i<n;i++)
135 1 {
136 2 *s = read_byte();
137 2 ack_iic();//主机应答从机,保证报文顺利进行
138 2 s++;
139 2 }
140 1 nack_iic();
141 1 stop_iic();
142 1 return 1;
143 1 }
*** WARNING C316 IN LINE 143 OF src\iic.c: unterminated conditionals
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 283 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -