📄 iic.lst
字号:
C51 COMPILER V7.06 IIC 07/29/2005 20:22:36 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE IIC.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /************iic dirver for c8051f020 ************************
2
3 system clock 8M
4
5 ************************************************************/
6 #include "C8051F020.h"
7 #include "IIC.h"
8
9 void IIC_Config( ){
10 1
11 1 WDTCN = 0x07; // Watchdog Timer Control Register
12 1 WDTCN = 0xDE; // Disable WDT
13 1 WDTCN = 0xAD;
14 1
15 1
16 1
17 1 XBR0 = 0x07; // XBAR0: Initial Reset Value
18 1 XBR1 = 0x00; // XBAR1: Initial Reset Value
19 1 XBR2 = 0x40; // XBAR2: Initial Reset Value
20 1
21 1 P0MDOUT = 0x1D; // Output configuration for P0
22 1
23 1
24 1
25 1
26 1 OSCXCN = 0x00; // EXTERNAL Oscillator Control Register
27 1
28 1 OSCICN = 0x06; // Internal Oscillator Control Register
29 1
30 1
31 1
32 1
33 1 SMB0CN = 0x40; // SMBus Control Register
34 1 SMB0ADR = 0xA0; // SMBus Address Register
35 1 SMB0CR = 0x60; // SMBus Clock Rate Register
36 1
37 1
38 1 }
39
40 void Delay_IIC(){
41 1 unsigned char i=10;
42 1 while(i--);
43 1 }
44
45 void GetBus(){
46 1 SMB0CN=release_bus_sta;
47 1 while(SI==0);
48 1
49 1 }
50
51 void SendByte( unsigned char dataa ){
52 1
53 1 SMB0DAT=dataa;
54 1 SMB0CN=release_bus_ack;
55 1 while(SI==0);
C51 COMPILER V7.06 IIC 07/29/2005 20:22:36 PAGE 2
56 1 } // waitting......
57
58
59
60 bit SmbRec(unsigned char slaadd ,unsigned char subadd ,unsigned char num ,unsigned char *RecPtr )
61
62 { unsigned char counter;
63 1
64 1 Delay_IIC();
65 1
66 1 GetBus();
67 1
68 1
69 1 Delay_IIC();
70 1
71 1 SendByte ( slaadd );
72 1
73 1 Delay_IIC();
74 1 if( SMB0STA!=0X18){
75 2 STO=1;
76 2 return(0);
77 2 }
78 1 SendByte( subadd );
79 1
80 1 if(SMB0STA!=0X28){
81 2 STO=1;
82 2 return(0);
83 2 }
84 1
85 1 Delay_IIC();
86 1
87 1 SMB0CN=release_bus_sta;
88 1
89 1 while(SI==0);
90 1
91 1
92 1 Delay_IIC();
93 1 SendByte( slaadd+1 ) ; // send slaadd + r
94 1 Delay_IIC();
95 1 if(SMB0STA!=0X40){
96 2 SMB0CN=generate_stop;
97 2 return(0);
98 2 }
99 1 for(counter=0;counter<(num-1);counter++){
100 2
101 2
102 2 SMB0CN=release_bus_ack; // set ACK
103 2
104 2 while( SI==0);
105 2
106 2
107 2 if( SMB0STA!=0X50){
108 3 SMB0CN=generate_stop;
109 3 return(0);
110 3 }
111 2 *RecPtr=SMB0DAT;
112 2
113 2 RecPtr++;
114 2 }
115 1 SMB0CN=release_bus_nack; // set NACK
116 1
117 1 while(SI==0); // receive the last byte data
C51 COMPILER V7.06 IIC 07/29/2005 20:22:36 PAGE 3
118 1
119 1 *RecPtr=SMB0DAT;
120 1
121 1 SMB0CN=generate_stop;
122 1
123 1 return(1);
124 1
125 1 }
126
127
128 bit SmbSend ( unsigned char slaadd , unsigned char subadd ,unsigned char num ,unsigned char *SendPtr){
129 1
130 1 unsigned char counter;
131 1
132 1
133 1 GetBus();
134 1
135 1
136 1
137 1 SendByte( slaadd );
138 1
139 1 if(SMB0STA!=0X18){
140 2 STO=1;
141 2 return(0);
142 2 }
143 1 SendByte( subadd ); // send subaddress
144 1
145 1 if( SMB0STA!=0X28){
146 2 STO=1;
147 2 return(0);
148 2 }
149 1 for(counter=0;counter<num; counter++){
150 2
151 2 SendByte ( *SendPtr );
152 2 if( SMB0STA!=0X28 ){
153 3 STO=1;
154 3 return(0);
155 3 }
156 2 SendPtr++;
157 2 }
158 1
159 1 SMB0CN=generate_stop; // stop the bus
160 1
161 1 return(1);
162 1 } // end SmbSend
163
164
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 290 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -