📄 iic.lst
字号:
C51 COMPILER V7.06 IIC 12/11/2007 11:28:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN .\BIN\IIC.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\IIC.C LARGE OPTIMIZE(9,SPEED) DEBUG OBJECTEXTEND PRINT(.\LST\IIC.lst) O
-BJECT(.\BIN\IIC.obj)
stmt level source
1 /*==========================================
2 ==========================================*/
3 #include "include.h"
4 ////////////////////////////////////////////////////////
5 /*==========================================
6 ==========================================*/
7 void DDC2(void)
8 {
9 1 // ISCL = 0; //sherry ????
10 1 // ISCL = 1;
11 1 }
12 /*==========================================
13 ==========================================*/
14 void SetISCL(Bit flag)
15 {
16 1 if(flag)
17 1 PTB_REG |= PB4;
18 1 else
19 1 PTB_REG &= ~PB4;
20 1 }
21 void SetISDA(Bit flag)
22 {
23 1 if(flag)
24 1 PTB_REG |= PB5;
25 1 else
26 1 PTB_REG &= ~PB5;
27 1 }
28 void IIC_Start(void)
29 {
30 1 SetISCL(1);
31 1 // _nop_();
32 1 // _nop_();
33 1 SetISDA(1);
34 1 // _nop_();
35 1 // _nop_();
36 1 SetISDA(0);
37 1 SetISCL(0);
38 1 }
39 /*==========================================
40 ==========================================*/
41 void IIC_Stop(void)
42 {
43 1 SetISDA(0);
44 1 SetISCL(1);
45 1 // _nop_();
46 1 // _nop_();
47 1 SetISDA(1);
48 1 }
49 Bit ReadISDA()
50 {
51 1 Byte tmp;
52 1 RDPB_REG = 0x20;
53 1 _nop_();
54 1 // _nop_();
C51 COMPILER V7.06 IIC 12/11/2007 11:28:42 PAGE 2
55 1 // _nop_();
56 1 // _nop_();
57 1 tmp=PTB_REG & PB5;
58 1 RDPB_REG = 0x00;
59 1 if(tmp == PB5)
60 1 return 1;
61 1 else
62 1 return 0;
63 1 }
64 void IIC_ReStart(void) //s0310
65 {
66 1 SetISCL(1);
67 1 // _nop_();
68 1 // _nop_();
69 1 SetISDA(1);
70 1 // _nop_();
71 1 // _nop_();
72 1 SetISDA(0);
73 1 SetISCL(0);
74 1 }
75 /*==========================================
76 ==========================================*/
77 void CheckIIC(void)
78 {
79 1 // ISCL = 1;
80 1 // ISDA = 1;
81 1 // while(!ISDA || !ISCL) //waiting for IIC released
82 1 // {
83 1 // ISCL = 0;
84 1 // IIC_Stop();
85 1 // }
86 1 }
87 /*==========================================
88 ==========================================*/
89 Byte IIC_Tx(Byte Data)
90 { //subroutine total time 630us
91 1 Byte AckLoop,Ack;
92 1 Byte i;
93 1
94 1 for(i=0;i<8;i++)
95 1 {
96 2 SetISCL(0);
97 2 // _nop_();
98 2 // _nop_();
99 2 SetISDA((Data & 0x80));
100 2 // _nop_();
101 2 // _nop_();
102 2 // _nop_();
103 2 // _nop_();
104 2 _nop_();
105 2 SetISCL(1);
106 2 // _nop_();
107 2 _nop_();
108 2 // _nop_();
109 2 Data =Data<<1;
110 2 }
111 1
112 1
113 1 SetISCL(0);
114 1 // _nop_();
115 1 // _nop_();
116 1 SetISDA(1);
C51 COMPILER V7.06 IIC 12/11/2007 11:28:42 PAGE 3
117 1 SetISCL(1);
118 1 Ack = NACK;
119 1 for(AckLoop=0;AckLoop<50;AckLoop++) //260us
120 1 {
121 2 if(!(ReadISDA()))
122 2 {
123 3 Ack = ACK;
124 3 break;
125 3 }
126 2 }
127 1 SetISCL(0);
128 1 return Ack; //return success=0 / failure=1
129 1
130 1 }
131 /*==========================================
132 ==========================================*/
133 Byte IIC_Rx(Bit Ack)
134 {
135 1 Byte Data;
136 1 Byte i;
137 1 Data = 0;
138 1 for(i=0;i<8;i++)
139 1 {
140 2 Data <<= 1;
141 2 SetISCL(0);
142 2 SetISDA(1);
143 2 SetISCL(1);
144 2 CLRWDT = 0x55;
145 2 if((ReadISDA()))
146 2 Data |= 1;
147 2 else
148 2 Data &= 0xfe;
149 2 }
150 1 SetISCL(0);
151 1 SetISDA(Ack);
152 1 SetISCL(1);
153 1 SetISCL(0);
154 1 return Data;
155 1
156 1 }
157 /*==========================================
158 ==========================================*/
159 void WriteIIC(Byte device,Byte addr,Byte ch)
160 {
161 1 IIC_Start();
162 1 IIC_Tx(device);
163 1 IIC_Tx(addr);
164 1 IIC_Tx(ch);
165 1 IIC_Stop();
166 1 }
167 /*==========================================
168 ==========================================*/
169 void WriteIIC563(unsigned short addr,unsigned char ch)
170 {
171 1 CheckRegPage(addr);
172 1 IIC_Start();
173 1 IIC_Tx(SCALER_ADDR);
174 1 IIC_Tx(addr);
175 1 IIC_Tx(ch);
176 1 IIC_Stop();
177 1 }
178 /*==========================================
C51 COMPILER V7.06 IIC 12/11/2007 11:28:42 PAGE 4
179 ==========================================*/
180 void WriteWordIIC563(unsigned short addr,unsigned short value)
181 {
182 1 CheckRegPage(addr);
183 1 IIC_Start();
184 1 IIC_Tx(SCALER_ADDR);
185 1 IIC_Tx((Byte)addr);
186 1 IIC_Tx((Byte)value);
187 1 IIC_Tx((Byte)(value>>8));
188 1 IIC_Stop();
189 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -