?? i2ceeprom.lst
字號:
C51 COMPILER V8.05a I2CEEPROM 11/26/2007 12:48:20 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE I2CEEPROM
OBJECT MODULE PLACED IN I2CEEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2CEEPROM.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"Reg935.h"
2 #include"UserDef.h"
3
4 /*******************************************************************
5 * 申請總線
6 * 功能: 進行I2C總線的初始化----包括時鐘選擇,
7 I2C使能,發送起始信號等等。
8 * I2EN為1,設置為主機;
9 CRSEL位為0,使用內部SCL發生器
10 *******************************************************************/
11
12 void GetBus()
13 {
14 1 I2SCLH = 15; // 設置SCL高電平的PCLK周期數
15 1 I2SCLL = 15; //設置SCL低電平的PCLK周期數,6MHz 時為100Kbit/S
16 1
17 1 //申請成為主機,起動總線。使用內部SCL發生器,I2EN 和AA 置位
18 1 I2CON = RELEASE_BUS_STA; //I2CON = 0110 0100B = 0x64
19 1 while( SI==0 ); // 等待起始位的發送
20 1 }
21
22
23 /*******************************************************************
24 * 發送數據函數
25 * 功能:用于向總線發送數據
26 * 入口參數:C 待發送的數據
27 *******************************************************************/
28
29 void SendByte(uchar c)
30 {
31 1 I2DAT = c;
32 1 I2CON = RELEASE_BUS_ACK; //I2CON = 0100 0100B = 0x44 ,清除SI位等等
33 1 while( SI==0 ); // 等待數據的發送
34 1 }
35
36
37 /*******************************************************************
38 * 向有子地址器件發送多字節數據函數
39 * 功能:從啟動總線到發送地址,子地址,數據,結束總線的全過程。
40 * 入口參數: slvAddr-- 從器件地址
41 * subAddr-- 子地址(從器件裝載數據的地址)
42 * s -- 發送內容的指針
43 * num-- 發送字節數
44 * 出口參數: 返回1 表示操作成功,否則操作有誤。
45 ********************************************************************/
46
47 bit ISendStr(uchar slvAddr, uint subAddr, uchar *s, uchar num)
48 {
49 1 uchar i;
50 1 uchar subAddrH, subAddrL;
51 1
52 1 subAddrL = (subAddr & 0x00FF);
53 1 subAddrH = (subAddr & 0xFF00)>>8;
54 1
55 1 GetBus(); //啟動總線
C51 COMPILER V8.05a I2CEEPROM 11/26/2007 12:48:20 PAGE 2
56 1
57 1 SendByte(slvAddr & WRITE_DATA_COM); //發送器件地址,WRITE_DATA_COM = 0 寫控制
58 1
59 1 if( I2STAT!=0x18 ) //已發送器件地址和寫信號,并已接收應答信號
60 1 {
61 2 I2CON = GENERATE_STOP;
62 2 return(0);
63 2 }
64 1
65 1 SendByte(subAddrH); //發送器件子地址高位
66 1 if( I2STAT!=0x28 ) //已發送數據,并已接收應答信號
67 1 {
68 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
69 2 return(0);
70 2 }
71 1
72 1 SendByte(subAddrL); //發送器件子地址低位
73 1 if( I2STAT!=0x28 ) //已發送數據,并已接收應答信號
74 1 {
75 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
76 2 return(0);
77 2 }
78 1
79 1 for(i=0; i<num; i++)
80 1 {
81 2 SendByte(*s); //發送數據
82 2 if(I2STAT!=0x28) //已發送數據,并已接收應答信號
83 2 {
84 3 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
85 3 return(0);
86 3 }
87 2 s++;
88 2 }
89 1
90 1 I2CON = GENERATE_STOP; // 結束總線
91 1 return(1);
92 1 }
93
94
95 /*******************************************************************
96 * 向有子地址器件讀取多字節數據函數
97 *功能:從啟動總線到發送地址,子地址,讀數據,結束總線的全過程。
98 *入口參數:slvAddr--從器件地址
99 * subAddr--子地址(從器件裝載數據的地址)
100 * s -- 讀出的內容存儲區的指針
101 * num-- 讀num個字節。
102 *出口參數:函數返回1表示操作成功,否則操作有誤。
103 ********************************************************************/
104
105 bit IRcvStr(uchar slvAddr, uint subAddr, uchar *s, uchar num)
106 {
107 1 uchar i;
108 1 uchar subAddrH, subAddrL;
109 1
110 1 subAddrL = (subAddr & 0x00FF);
111 1 subAddrH = (subAddr & 0xFF00)>>8;
112 1
113 1 GetBus(); //啟動總線
114 1
115 1 SendByte(slvAddr & WRITE_DATA_COM); //發送器件地址
116 1 if( I2STAT!=0X18) //已發送器件地址和寫信號,并已接收應答信號
117 1 {
C51 COMPILER V8.05a I2CEEPROM 11/26/2007 12:48:20 PAGE 3
118 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
119 2 return(0);
120 2 }
121 1
122 1 SendByte(subAddrH); //發送器件子地址高位
123 1 if( I2STAT!=0X28 ) //已發送數據,并已接收應答信號
124 1 {
125 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
126 2 return(0);
127 2 }
128 1
129 1 SendByte(subAddrL); //發送器件子地址低位
130 1 if( I2STAT!=0X28 ) //已發送數據,并已接收應答信號
131 1 {
132 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
133 2 return(0);
134 2 }
135 1
136 1 I2CON = RELEASE_BUS_STA; //I2CON = 0110 0100B = 0x64 ,重新啟動總線
137 1 while( SI==0 );
138 1
139 1 SendByte(slvAddr | READ_DATA_COM); //發送讀數據信號
140 1
141 1 if( I2STAT!=0X40 ) //已發送器件地址和讀信號,并已接收應答信號
142 1 {
143 2 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
144 2 return(0);
145 2 }
146 1
147 1 for(i=0; i<num-1; i++)
148 1 {
149 2 I2CON = RELEASE_BUS_ACK; //I2CON = 0100 0100B = 0x44 ,接收一字節數據并發送應答位
150 2 while( SI==0 ); //等待接收數據
151 2
152 2 if( I2STAT!=0X50 ) //已接收數據字節,已返回應答信號
153 2 {
154 3 I2CON = GENERATE_STOP; //I2CON = 0101 0100B = 0x54 ,產生停止信號
155 3 return(0);
156 3 }
157 2 *s = I2DAT; //讀取數據
158 2 }
159 1
160 1 s++;
161 1 I2CON = RELEASE_BUS_NOACK; //I2CON = 0100 0000B = 0x40 ,接收最后一字節數據并發送非應答位
162 1 while( SI==0 );
163 1 *s = I2DAT;
164 1 I2CON = GENERATE_STOP; //結束總線
165 1 return(1);
166 1
167 1 }
168
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 235 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V8.05a I2CEEPROM 11/26/2007 12:48:20 PAGE 4
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -