?? i2c.lst
字號:
C51 COMPILER V7.01 I2C 02/28/2005 12:11:49 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <io.h>
2
3 #define uchar unsigned char
4
5 //extern void delay(unsigned int n);
6
7 //extern void delay(uchar t_ms);
8 ///------------------------------------------------------------------------- I2C 底層函數
9 //-------------------------------------------------------------------------------------
10
11 void SomeNOP()
12 {
13 1 uchar i;
14 1 for(i=0;i<=100;i++){;}
15 1 }
16
17 void I2CStart(void)
18 {
19 1 EA=0;
20 1 SDA=1; SCL=1; SomeNOP();
21 1 SDA=0; SomeNOP(); //START
22 1 SCL=0;
23 1 }
24
25 void I2CStop(void)
26 {
27 1 SCL=0; SDA=0; SomeNOP();
28 1 SCL=1; SomeNOP(); SDA=1; //STOP
29 1 EA=1;
30 1 }
31
32 bit WaitAck(void)
33 {
34 1 uchar errtime=255; //因故障接收方無ACK,超時值為255。
35 1 SDA=1;SomeNOP();
36 1 SCL=1;SomeNOP();
37 1 while(SDA)
38 1 {
39 2 errtime--;
40 2 SomeNOP(); //add
41 2 if (!errtime)
42 2 { I2CStop();
43 3 return 0; }
44 2 }
45 1 SCL=0;
46 1 return 1;
47 1 }
48
49 void SendAck(void)
50 {
51 1 SDA=0; SomeNOP();
52 1 SCL=1; SomeNOP();
53 1 SCL=0;
54 1 }
55
C51 COMPILER V7.01 I2C 02/28/2005 12:11:49 PAGE 2
56 void SendNotAck(void)
57 {
58 1 SDA=1; SomeNOP();
59 1 SCL=1; SomeNOP();
60 1 SCL=0;
61 1 }
62
63 void I2CSendByte(uchar ch)
64 {
65 1 uchar i=8;
66 1 while (i--)
67 1 {
68 2 SCL=0;
69 2 SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
70 2 SCL=1; SomeNOP();
71 2 }
72 1 SCL=0;
73 1 }
74
75 uchar I2CReceiveByte(void)
76 {
77 1 uchar i=8;
78 1 uchar rdata=0;
79 1 SDA=1;
80 1 while (i--)
81 1 {
82 2 rdata<<=1;
83 2 SCL=0;SomeNOP();
84 2 SCL=1;SomeNOP();
85 2 rdata|=SDA;
86 2 }
87 1 SCL=0;
88 1 return rdata;
89 1 }
90
91 /*
92 void SetVoltageRef(uchar VoltageData)
93 {
94 I2CStart();
95 I2CSendByte(0x58);
96 WaitAck();
97 I2CSendByte(0x00);
98 WaitAck();
99 I2CSendByte(VoltageData);
100 WaitAck();
101 I2CStop();
102 }
103
104 void SetCurrentRef(uchar CurrentData)
105 {
106 I2CStart();
107 I2CSendByte(0x58);
108 WaitAck();
109 I2CSendByte(0x01);
110 WaitAck();
111 I2CSendByte(CurrentData);
112 WaitAck();
113 I2CStop();
114 }
115 */
116
117
C51 COMPILER V7.01 I2C 02/28/2005 12:11:49 PAGE 3
118 void AT24C02_write(uchar excur_addr,uchar wr_data)
119 {
120 1 I2CStart();
121 1 I2CSendByte(0xA0);
122 1 WaitAck();
123 1 I2CSendByte(excur_addr);
124 1 WaitAck();
125 1 I2CSendByte(wr_data);
126 1 WaitAck();
127 1 I2CStop();
128 1 // delay(20); /////??????
129 1 }
130
131 uchar AT24C02_read(uchar excur_addr)
132 {
133 1 uchar rd_data;
134 1
135 1 I2CStart();
136 1 I2CSendByte(0xA0);
137 1 WaitAck();
138 1 I2CSendByte(excur_addr);
139 1 WaitAck();
140 1 I2CStart();
141 1 I2CSendByte(0xA1);
142 1 WaitAck();
143 1 rd_data=I2CReceiveByte();
144 1 SendNotAck();
145 1 I2CStop();
146 1 //delay(10);
147 1 return rd_data;
148 1
149 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 212 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -