📄 i2c.lst
字号:
C51 COMPILER V7.07 I2C 11/08/2007 09:01:05 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN i2c.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE i2c.c OPTIMIZE(2,SPEED) BROWSE DEFINE(monitor51) DEBUG OBJECTEXTEND
stmt level source
1 /*VIICC.H*/
2 #pragma db cd small
3 #include <intrins.h>
4 #include <reg52.h>
5 #define NOP nop ( ); nop ( ); nop ( ); nop ( )
6 #define SDA P1^7
7 #define SCL P1^6
8 #define uchar unsigned char
9
10 void sta( );
11 void cack( );
12 void stop( );
13 void mnack( );
14 void mack( );
15 void wrbyt(uchar shu);
16 void wrnbyta(uchar slaw,uchar gg[],uchar n);
17 void wrnbyt(uchar slaw,uchar ff[],uchar number);
18 uchar rdbyt( );
19 void rdnbyt(uchar slar,uchar qq[],uchar number);
20 //源程序由9个函数组成,程序清单如下:
21 voidsta( )/*启动I2C总线*/
22 {
23 1 SDA=1;
*** ERROR C141 IN LINE 23 OF I2C.C: syntax error near '='
24 1 SCL=1;
*** ERROR C141 IN LINE 24 OF I2C.C: syntax error near '='
25 1 NOP;
26 1 SDA=0;
27 1 NOP;
28 1 SCL=0;
29 1 }
30
31 void stop( )/*停止I2C总线
32 */
33 {
34 1 SDA=0;
35 1 SCL=1;
36 1 NOP;
37 1 SDA=1;
38 1 NOP;
39 1 SCL=0;
40 1 }
41
42 void mack( )/*发送应答位*/
43 {
44 1 SDA=0;
45 1 SCL=1;
46 1 NOP;
47 1 SCL=0;
48 1 SDA=1;
49 1 }
50
51 void mnack( )/*发送非应答位*/
52 {
53 1 SDA=1;
C51 COMPILER V7.07 I2C 11/08/2007 09:01:05 PAGE 2
54 1 SCL=1;
55 1 NOP;
56 1 SCL=0;
57 1 SDA=0;
58 1 }
59
60 void cack( )/*应答位检查*/
61 {
62 1 SDA=1;
63 1 SCL=1;
64 1 F0=0;
65 1 if(SDA==1)
66 1 F0=1;
67 1 SCL=0;
68 1 nop( );
69 1 }
70 /*向虚拟I2C总线上发送1个数据字节*/
71 void wrbyt(uchar shu)
72 {
73 1 uchar i;
74 1 for(i=0;i<8;i++){
75 2 if((shu&0x80)>0){
76 3 SDA=1;
77 3 SCL=1;
78 3 NOP;
79 3 SCL=0;
80 3 SDA=0;
81 3 }
82 2 else{
83 3 SDA=0;
84 3 SCL=1;
85 3 NOP;
86 3 SCL=0;
87 3 }
88 2 shu=shu<<1;
89 2 }
90 1 }
91 /*从I2C总线上读取1个数据字节*/
92 uchar rdbyt( )
93 {
94 1 uchar nn=0xff,mm=0x80,uu=0x7f;
95 1 uchar j;
96 1 for(j=0;j<8;j++){
97 2 SDA=1;
98 2 SCL=1;
99 2 if(SDA==0)
100 2 nn=(nn&uu);
101 2 else
102 2 nn=(nn|mm);。
103 2 nn=crol(nn,1);
104 2 SCL=0;
105 2 }
106 1 return(nn);
107 1 }
108
109 void wrnbyta(uchar slaw,uchar gg[],uchar n)
110 {
111 1 do{
112 2 sta( );
113 2 wrbyt(slaw);
114 2 cack( );
115 2 }while(F0==1);
C51 COMPILER V7.07 I2C 11/08/2007 09:01:05 PAGE 3
116 1 wrbyt(gg[n]);
117 1 cack( );
118 1 }
119 /*向虚拟I2C总线上发送n个字节的数据*/
120 void wrnbyt(uchar slaw,uchar ff[],uchar number)
121 {
122 1 uchar idata k;
123 1 do{
124 2 sta( );
125 2 wrbyt(slaw);
126 2 ?cack( );
127 2 }while(F0==1);
128 1 for(k=0;k<number;k++){。
129 2 wrbyt(ff[k]);
130 2 cack( );
131 2 while(F0==1)
132 2 wrnbyta(slaw,ff,k);
133 2 }
134 1 stop( );
135 1 }
136 /*从虚拟I2C总线上读取n个字节的数据*/
137 void rdnbyt(uchar slar,uchar qq[],uchar number)
138 {
139 1 uchar idata data0,l;
140 1 do{
141 2 sta( );
142 2 wrbyt(slar);
143 2 cack( );
144 2 }while(F0==1);?
145 1 for(l=0;l<number-1;l++){
146 2 data0=rdbyt( );
147 2 qq[l]=data0;
148 2 mack( );
149 2 }
150 1 data0=rdbyt( );
151 1 qq[l]=data0;
152 1 mnack( );
153 1 stop( );
154 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 2 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -