📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 08/06/2007 17:38:09 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <intrins.h>
2 #include "i2c.h"
3 //typedef unsigned char byte;
4 //bit WRITEBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte DATABYTE);
5 //bit READBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
6 //bit WRITEDATAARRAY(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
7 //bit READDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
8 //sbit SDA=0X90; //P1.0
9 //sbit SCL=0X92; //P1.2
10 //#define DELAY1US() _nop_();_nop_();_nop_();_nop_();_nop_()
11 //#define DELAY2US() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
12 //#define DELAY5US() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
13 //void START_BIT(void);
14 //void STOP_BIT(void);
15 //bit SEND_BYTE(unsigned char BYTEVALUE);
16 //unsigned char RECEIVE_BYTE(void);
17 //void ACK(bit IFACK);
18 /* 发送一个起始位 */
19 void START_BIT(void)
20 {
21 1 SDA=1;
22 1 DELAY1US();
23 1 SCL=1;
24 1 DELAY5US();
25 1 SDA=0;
26 1 DELAY5US();
27 1 SCL=0;
28 1 DELAY1US();
29 1 }
30 /*发送一个停止位*/
31 void STOP_BIT(void)
32 {
33 1 SDA=0;
34 1 DELAY1US();
35 1 SCL=1;
36 1 DELAY5US();
37 1 SDA=1;
38 1 DELAY5US();
39 1 DELAY1US();
40 1 }
41 /* 发送一个字节,如果收到应答,返回1 */
42 bit SEND_BYTE(byte BYTEVALUE)
43 {
44 1 byte BITMASK=0X80;
45 1 byte i;
46 1 bit ACK_BIT;
47 1 for(i=0;i<8;i++)
48 1 {
49 2 SDA=(BYTEVALUE&BITMASK)?1:0;
50 2 DELAY1US();
51 2 SCL=1;
52 2 DELAY5US();
53 2 SCL=0;
54 2 BITMASK=BITMASK>>1;
55 2 }
C51 COMPILER V7.06 I2C 08/06/2007 17:38:09 PAGE 2
56 1 DELAY2US();
57 1 SDA=1;
58 1 DELAY2US();
59 1 SCL=1;
60 1 DELAY2US();
61 1 ACK_BIT=SDA?0:1;
62 1 SCL=0;
63 1 return(ACK_BIT);
64 1 }
65 /*接收一个字节*/
66 byte RECEIVE_BYTE(void)
67 {
68 1 byte BITMASK=0X80;
69 1 byte i;
70 1 byte RETURNVALUE=0;
71 1 for(i=0;i<8;i++)
72 1 {
73 2 SDA=1;
74 2 SCL=0;
75 2 DELAY5US();
76 2 SCL=1;
77 2 DELAY2US();
78 2 if(SDA) RETURNVALUE|=BITMASK;
79 2 BITMASK=BITMASK>>1;
80 2 }
81 1 SCL=0;
82 1 return(RETURNVALUE);
83 1 }
84 /*发出应答信号*/
85 void ACK(bit IFACK)
86 {
87 1 SDA=IFACK?1:0;
88 1 DELAY2US();
89 1 SCL=1;
90 1 DELAY5US();
91 1 SCL=0;
92 1 DELAY2US();
93 1 }
94 /*写一个字节,如果成功,返回0;*/
95 bit WRITEBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte DATABYTE)
96 {
97 1 START_BIT();
98 1 if(!SEND_BYTE(CON_ADDR)) return(1);
99 1 if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
100 1 if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
101 1 if(!SEND_BYTE(DATABYTE)) return(1);
102 1 STOP_BIT();
103 1 return(0);
104 1 }
105 /*读一个字节,如果成功,返回0;*/
106 /* bit READBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
107 {
108 START_BIT();
109 if(!SEND_BYTE(CON_ADDR)) return(1);
110 if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
111 if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
112 START_BIT();
113 if(!SEND_BYTE(CON_ADDR|0X01)) return(1);
114 *DATABYTE=RECEIVE_BYTE();
115 ACK(0);
116 STOP_BIT();
117 return(0);
C51 COMPILER V7.06 I2C 08/06/2007 17:38:09 PAGE 3
118 }*/
119 bit WRITEDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
120 {
121 1 char i;
122 1 START_BIT();
123 1 if(!SEND_BYTE(CON_ADDR)) return(1);
124 1 if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
125 1 if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
126 1 for(i=0;i<N;i++)
127 1 {
128 2 if(!SEND_BYTE(*DATABYTE)) return(1);
129 2 DATABYTE++;
130 2 }
131 1 STOP_BIT();
132 1 return(0);
133 1 }
134 bit READDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
135 {
136 1 char I;
137 1 START_BIT();
138 1 if(!SEND_BYTE(CON_ADDR)) return(1);
139 1 if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
140 1 if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
141 1 START_BIT();
142 1 if(!SEND_BYTE(CON_ADDR|0X01)) return(1);
143 1 for(I=0;I<N;I++)
144 1 {
145 2 *DATABYTE=RECEIVE_BYTE();
146 2 if(I==N-1)
147 2 {
148 3 ACK(1);
149 3 }
150 2 else ACK(0);
151 2 DATABYTE++;
152 2 }
153 1 STOP_BIT();
154 1 return(0);
155 1 }
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 471 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 20
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -