📄 smbus.lst
字号:
C51 COMPILER V8.02 SMBUS 09/18/2007 10:16:42 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SMBUS
OBJECT MODULE PLACED IN SMBUS.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE SMBUS.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /////////////////////////////////////
2 // /////////////begain//////////////
3 /////////////////////////////////////
4
5 #include "C8051F340.h"
6 #include <STDIO.H>
7 #include <INTRINS.H>
8 #define WRITE 0x00
9 #define READ 0x01
10
11 #define CHIP_ID 0xc4
12 #define SMB0STA SMB0CN&0xFC
13 #define SMB_START 0xE0
14 #define SMB_MTDATADD 0xC0
15 #define SMB_MRDAT 0x88
16 sbit TTQH6_RST0=P0^6;
17 bit BUSY;
18 bit flag=0;
19 bit rd_flag=0;
20 char command;
21 char t_word;
22 char r_word;
23 void T3_interrupt(void);
24 void SmBus_ISR(void);
25 void SM_Send(char chip_select,unsigned char byte_address,char out_byte);
26 char SM_Receive(char chip_select,unsigned char byte_address);
27 unsigned char register_add;
28 char count;
29
30 /////////////////////////////////////
31 // Generated Initialization File //
32 /////////////////////////////////////
33
34 #include "C8051F340.h"
35
36 // Peripheral specific initialization functions,
37 // Called from the Init_Device() function
38 void PCA_Init()
39 {
40 1 PCA0MD &= ~0x40;
41 1 PCA0MD = 0x00; //禁止看门狗
42 1 }
43
44 void Timer_Init()
45 {
46 1 TCON = 0x10;
47 1 TMOD = 0x02;
48 1 CKCON = 0x04;
49 1 TH0 = 0xEC; // 200kbps
50 1 }
51
52 void SMBus_Init()
53 {
54 1 SMB0CF = 0xD0; // SMBUS允许,从事件禁止,SCL低电平扩展
55 1 }
C51 COMPILER V8.02 SMBUS 09/18/2007 10:16:42 PAGE 2
56
57 void Port_IO_Init()
58 {
59 1 // P0.0 - SDA (SMBus), Open-Drain, Digital
60 1 // P0.1 - SCL (SMBus), Open-Drain, Digital
61 1 // P0.2 - Unassigned, Open-Drain, Digital
62 1 // P0.3 - Unassigned, Open-Drain, Digital
63 1 // P0.4 - Unassigned, Open-Drain, Digital
64 1 // P0.5 - Unassigned, Open-Drain, Digital
65 1 // P0.6 - Unassigned, Open-Drain, Digital
66 1 // P0.7 - Unassigned, Open-Drain, Digital
67 1
68 1 // P1.0 - Unassigned, Open-Drain, Digital
69 1 // P1.1 - Unassigned, Open-Drain, Digital
70 1 // P1.2 - Unassigned, Open-Drain, Digital
71 1 // P1.3 - Unassigned, Open-Drain, Digital
72 1 // P1.4 - Unassigned, Open-Drain, Digital
73 1 // P1.5 - Unassigned, Open-Drain, Digital
74 1 // P1.6 - Unassigned, Open-Drain, Digital
75 1 // P1.7 - Unassigned, Open-Drain, Digital
76 1
77 1 // P2.0 - Unassigned, Open-Drain, Digital
78 1 // P2.1 - Unassigned, Open-Drain, Digital
79 1 // P2.2 - Unassigned, Open-Drain, Digital
80 1 // P2.3 - Unassigned, Open-Drain, Digital
81 1 // P2.4 - Unassigned, Open-Drain, Digital
82 1 // P2.5 - Unassigned, Open-Drain, Digital
83 1 // P2.6 - Unassigned, Open-Drain, Digital
84 1 // P2.7 - Unassigned, Open-Drain, Digital
85 1
86 1 // P3.0 - Unassigned, Open-Drain, Digital
87 1 // P3.1 - Unassigned, Open-Drain, Digital
88 1 // P3.2 - Unassigned, Open-Drain, Digital
89 1 // P3.3 - Unassigned, Open-Drain, Digital
90 1 // P3.4 - Unassigned, Open-Drain, Digital
91 1 // P3.5 - Unassigned, Open-Drain, Digital
92 1 // P3.6 - Unassigned, Open-Drain, Digital
93 1 // P3.7 - Unassigned, Open-Drain, Digital
94 1
95 1 XBR0 = 0x04;
96 1 XBR1 = 0x40; //SMBUS引脚使能,交叉开关允许
97 1 }
98
99 void Oscillator_Init()
100 {
101 1 OSCICN = 0x83; //12MHz系统时钟
102 1 }
103
104 void Interrupts_Init()
105 {
106 1 EIE1 = 0x01;
107 1 IE = 0x80; //全局中断允许,SMBUS中断允许
108 1 }
109
110 // Initialization function for device,
111 // Call Init_Device() from your main program
112 void Init_Device(void)
113 {
114 1 PCA_Init();
115 1 Timer_Init();
116 1 SMBus_Init();
117 1 Port_IO_Init();
C51 COMPILER V8.02 SMBUS 09/18/2007 10:16:42 PAGE 3
118 1 Oscillator_Init();
119 1 Interrupts_Init();
120 1 }
121
122
123 void Delay(unsigned char x)
124 {
125 1 unsigned char i, j;
126 1
127 1 for (i=0; i<x; i++)
128 1 {
129 2 for (j=0; j<0xff; j++)
130 2 {;}
131 2 }
132 1 }
133 void Init_TTQH6(void) //初始化器件TTQH6
134 {
135 1 TTQH6_RST0 = 0;
136 1 Delay(1);
137 1 TTQH6_RST0 = 1;
138 1 Delay(5);
139 1 }
140
141
142
143
144 void main(void)
145 {
146 1
147 1 unsigned char check;
148 1 // Init_TTQH6(); //初始化器件TTQH6
149 1 Init_Device();
150 1 _nop_;
*** WARNING C275 IN LINE 150 OF SMBUS.C: expression with possibly no effect
151 1
152 1 _nop_;
*** WARNING C275 IN LINE 152 OF SMBUS.C: expression with possibly no effect
153 1
154 1 _nop_;
*** WARNING C275 IN LINE 154 OF SMBUS.C: expression with possibly no effect
155 1
156 1 _nop_;
*** WARNING C275 IN LINE 156 OF SMBUS.C: expression with possibly no effect
157 1
158 1 _nop_;
*** WARNING C275 IN LINE 158 OF SMBUS.C: expression with possibly no effect
159 1
160 1 _nop_;
*** WARNING C275 IN LINE 160 OF SMBUS.C: expression with possibly no effect
161 1
162 1 BUSY=0;
163 1 BUSY=0;
164 1 // SM_Send(CHIP_ID,0x01,0x52);
165 1 check=SM_Receive(CHIP_ID,0x01);
166 1 while(1);
167 1
168 1 }
169
170
171 void SM_Send(char chip_select,unsigned char byte_address,char out_byte)
172 {
173 1 while(BUSY);
C51 COMPILER V8.02 SMBUS 09/18/2007 10:16:42 PAGE 4
174 1 BUSY=1;
175 1
176 1 SMB0CF = 0xD0; //////////////
177 1
178 1 count=2;
179 1 command=(chip_select|WRITE);
180 1 register_add=byte_address;
181 1 t_word=out_byte;
182 1 STA=1;
183 1 while(BUSY);
184 1
185 1
186 1
187 1 }
188 char SM_Receive(char chip_select,unsigned char byte_address)
189 {
190 1 while(BUSY);
191 1 BUSY=1;
192 1 count=2;
193 1
194 1 SMB0CF = 0xD0; //////////
195 1
196 1 rd_flag=1;
197 1 flag=1;
198 1 command=chip_select|READ;
199 1 register_add=byte_address;
200 1 STA=1;
201 1 while(BUSY);
202 1 return r_word;
203 1
204 1 }
205 void SmBus_ISR(void) interrupt 7
206 {
207 1 switch(SMB0STA)
208 1 {
209 2 case SMB_START:
210 2 SMB0DAT=(command&0xFE);
211 2 STA=0;
212 2 break;
213 2 case SMB_MTDATADD:
214 2 if(ACK)
215 2 {
216 3
217 3 if( rd_flag)
218 3 {
219 4 SMB0DAT= command;
220 4 rd_flag=0;
221 4
222 4 }
223 3 else
224 3 {
225 4 switch(count)
226 4 {
227 5 case 2:
228 5 SMB0DAT=register_add;
229 5 count--;
230 5 break;
231 5 case 1:
232 5 if(flag)
233 5 {
234 6 break;
235 6 }
C51 COMPILER V8.02 SMBUS 09/18/2007 10:16:42 PAGE 5
236 5 else
237 5 { SMB0DAT=t_word;
238 6 count--;
239 6 break;
240 6 }
241 5 default:
242 5 STO=1;
243 5 BUSY=0;
244 5 break;
245 5 }
246 4
247 4 }
248 3 }
249 2 else
250 2
251 2 { STO=1;
252 3 STA=1;
253 3 }
254 2 break;
255 2 case SMB_MRDAT:
256 2
257 2 r_word=SMB0DAT;
258 2 ACK=1;
259 2 STO=1;
260 2 BUSY=0;
261 2 break;
262 2 default:
263 2 STO=1;
264 2 BUSY=0;
265 2 break;
266 2 }
267 1 SI=0;
268 1 }
269 /*void T3_interrupt(void) interrupt 14
270 {
271 STO=1;
272 BUSY=
273 TMR3CN&=0x7f;
274 }
275
276 */
277
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 254 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 1
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 6 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -