📄 iic.lst
字号:
C51 COMPILER V8.05a IIC 09/27/2008 09:32:24 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\hex\iic.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\iic.c BROWSE INCDIR(.\h) DEBUG OBJECTEXTEND PRINT(.\iic.lst) OBJECT(.\h
-ex\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.05a IIC 09/27/2008 09:32:24 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
80
81
82 /*******************IIC主读1字节数据**********************/
83 uchar read_byte()
84 {
85 1 uchar i;
86 1 uchar r = 0;
87 1 IIC_SDA = 1;//设置数据线为输入方式
88 1 for(i=0;i<8;i++)
89 1 {
90 2 r<<=1;
91 2 IIC_SCL = 1;//时钟高,数据有效
92 2 Wait5us;
93 2 if(1 == IIC_SDA)
94 2 r++;
95 2 IIC_SCL = 0;
96 2 }
97 1 return r;//主机作为接收器,单字节不应答也就相当与产生非应答信号
98 1 }
99
100
101
102 /*******************IIC主发n字节数据**********************/
103 bit write_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
104 {
105 1 uchar i;
106 1 start_iic();//发开始信号
107 1 write_byte(slave);//发从器件地址
108 1 if(0 == iic_ack)
109 1 return 0;//没有收到应答信号
110 1 write_byte(addr);//要写的首地址
111 1 if(0 == iic_ack)
112 1 return 0;//没有收到应答信号
113 1 for(i=0;i<n;i++)
114 1 {
115 2 write_byte(*s);//数据地址指向的数据
116 2 if(0 == iic_ack)
C51 COMPILER V8.05a IIC 09/27/2008 09:32:24 PAGE 3
117 2 return 0;//没有收到应答信号
118 2 s++;
119 2 }
120 1 stop_iic();
121 1 return 1;
122 1 }
123
124 /*******************IIC主读n字节数据**********************/
125 bit read_nbyte(uchar slave,uchar addr,uchar *s,uchar n)
126 {
127 1 uchar i;
128 1 start_iic();//发开始信号
129 1 write_byte(slave);//写硬件地址
130 1 if(0 == iic_ack)
131 1 return 0;//没有收到应答信号
132 1 write_byte(addr);
133 1 if(0 == iic_ack)
134 1 return 0;//没有收到应答信号
135 1 start_iic();
136 1 write_byte(slave|1)
137 1 ;//读硬件地址
138 1 if(0 == iic_ack)
139 1 return 0;//没有收到应答信号
140 1 for(i=0;i<n;i++)
141 1 {
142 2 *s = read_byte();
143 2 ack_iic();//主机应答从机,保证报文顺利进行
144 2 s++;
145 2 }
146 1 nack_iic();
147 1 stop_iic();
148 1 return 1;
149 1 }
*** WARNING C316 IN LINE 149 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 + -