📄 iic.lst
字号:
C51 COMPILER V7.08 IIC 06/13/2007 16:48:12 PAGE 1
C51 COMPILER V7.08, 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
2 #include<w78e58b.h>
3 #include<intrins.h>
4
5 sbit sdata=P1^7;
6 sbit sclock=P1^6;
7
8 /********************* iic delay time function ************************/
9 void delay_iic(void)
10 {
11 1 int i;
12 1 for(i=0;i<400;i++)
13 1 {;}
14 1 }
15 /********************* iic wait function *******************************/
16 void iic_wait(void)
17 {
18 1 _nop_();
19 1 _nop_();
20 1 _nop_();
21 1 _nop_();
22 1 _nop_();
23 1 _nop_();
24 1 _nop_();
25 1 _nop_();
26 1 _nop_();
27 1 _nop_();
28 1 _nop_();
29 1 _nop_();
30 1 _nop_();
31 1 _nop_();
32 1 _nop_();
33 1 _nop_();
34 1 _nop_();
35 1 _nop_();
36 1 _nop_();
37 1 _nop_();
38 1 _nop_();
39 1 _nop_();
40 1 _nop_();
41 1 _nop_();
42 1 }
43 /*************** iic start function ******************************/
44 void iic_start(void)
45 {
46 1 sdata=1;
47 1 sclock=1;
48 1 iic_wait();
49 1 sdata=0;
50 1 iic_wait();
51 1 sclock=0;
52 1 }
53 /**************** iic stop function ********************************/
54 void iic_stop(void)
55 {
C51 COMPILER V7.08 IIC 06/13/2007 16:48:12 PAGE 2
56 1 sdata=0;
57 1 sclock=0;
58 1 iic_wait();
59 1 sclock=1;
60 1 iic_wait();
61 1 sdata=1;
62 1 }
63 /**************** send ask ****************************************/
64 void iic_ask(void)
65 {
66 1 sdata=0;
67 1 iic_wait();
68 1 sclock=1;
69 1 iic_wait();
70 1 sclock=0;
71 1 }
72 /*************** send no ask ******************************************/
73 void iic_no_ask(void)
74 {
75 1 sdata=1;
76 1 iic_wait();
77 1 sclock=1;
78 1 iic_wait();
79 1 sclock=0;
80 1 }
81 /*************** iic wait ack *****************************************/
82 bit iic_wait_ask(void)
83 {
84 1 unsigned char error_times=250;
85 1 sdata=1;
86 1 iic_wait();
87 1 sclock=1;
88 1 iic_wait();
89 1 while(sdata)
90 1 {
91 2 error_times--;
92 2 if(!error_times)
93 2 return(0);
94 2 }
95 1 sclock=0;
96 1 return(1);
97 1 }
98 /***************** iic send byte *******************************************/
99 void iic_send_byte(unsigned char sbyte)
100 {
101 1 unsigned char i=8;
102 1 while(i--)
103 1 {
104 2 sclock=0;
105 2 _nop_();
106 2 sdata=(bit)(sbyte&0x80);
107 2 sbyte<<=1;
108 2 iic_wait();
109 2 sclock=1;
110 2 iic_wait();
111 2 }
112 1 sclock=0;
113 1 }
114 /******************* iic receive byte ********************************/
115 unsigned char iic_receive_byte(void)
116 {
117 1 unsigned char i=8;
C51 COMPILER V7.08 IIC 06/13/2007 16:48:12 PAGE 3
118 1 unsigned char ddata=0;
119 1 sdata=1;
120 1 while(i--)
121 1 {
122 2 ddata<<=1;
123 2 sclock=0;
124 2 iic_wait();
125 2 sclock=1;
126 2 iic_wait();
127 2 sclock=1;
128 2 iic_wait();
129 2 ddata|=sdata;
130 2 }
131 1 sclock=0;
132 1 return(ddata);
133 1 }
134 /******************* write iic data(n byte) to address ************************/
135 void write_iic_data(unsigned char iic_page,unsigned char write_data[],unsigned char address,unsigned char
-num)
136 {
137 1 unsigned char n;
138 1 iic_start();
139 1 iic_send_byte(0xa0);
140 1 iic_wait_ask();
141 1 iic_send_byte(iic_page); // 24c64 address 12 bit
142 1 iic_wait_ask();
143 1 iic_send_byte(address);
144 1 iic_wait_ask();
145 1 for(n=0;n<num;n++)
146 1 {
147 2 iic_send_byte(write_data[n]);
148 2 iic_wait_ask();
149 2 }
150 1 iic_stop();
151 1 }
152 /********************* read iic data(n byte) to address **********************/
153 void read_iic_data(unsigned char iic_page,unsigned char read_data[],unsigned char address,unsigned char nu
-m)
154 {
155 1 unsigned char n;
156 1 unsigned char *p;
157 1 p=read_data;
158 1 iic_start();
159 1 iic_send_byte(0xa0);
160 1 iic_wait_ask();
161 1 iic_send_byte(iic_page);
162 1 iic_wait_ask();
163 1 iic_send_byte(address);
164 1 iic_wait_ask();
165 1 iic_start();
166 1 iic_send_byte(0xa1);
167 1 iic_wait_ask();
168 1 for(n=0;n<num;n++)
169 1 {
170 2 *p=iic_receive_byte();
171 2 p++;
172 2 if(n!=(num-1))
173 2 {
174 3 iic_ask();
175 3 }
176 2 }
177 1 iic_no_ask();
C51 COMPILER V7.08 IIC 06/13/2007 16:48:12 PAGE 4
178 1 iic_stop();
179 1
180 1 }
181
182
183
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -