?? main.lst
字號:
C51 COMPILER V7.09 MAIN 07/03/2006 13:45:36 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 main.c
3 CAT1021 EEPROM讀寫實驗
4 */
5
6
7 #include "I2C.h"
8 #include <reg51.h>
9 #include <string.h>
10 #include <stdlib.h>
11
12
13 //定義I/O端口
14 sbit SCL = P3^4;
15 sbit SDA = P3^5;
16
17
18 /*
19 函數:Delay()
20 功能:延時0.001~65.536s
21 參數:
22 t>0時,延時(t*0.001)s
23 t=0時,延時65.536s
24 */
25 void Delay(unsigned int t)
26 {
27 1 do
28 1 {
29 2 TH0 = 0xFC;
30 2 TL0 = 0x66+17;
31 2 TR0 = 1;
32 2 while ( !TF0 );
33 2 TR0 = 0;
34 2 TF0 = 0;
35 2 } while ( --t != 0 );
36 1 }
37
38
39 /*
40 函數:Feed()
41 功能:清除CAT1021內部WDT定時器(喂狗)
42 說明:如果沒有在1.6秒(典型值)內喂狗,則CAT1021會輸出復位信號
43 */
44 void Feed()
45 {
46 1 unsigned char t = 10;
47 1 I2C_SDA = 0;
48 1 while ( --t != 0 );
49 1 I2C_SDA = 1;
50 1 }
51
52
53 /*
54 函數:UartInit()
55 功能:串行口初始化
C51 COMPILER V7.09 MAIN 07/03/2006 13:45:36 PAGE 2
56 */
57 void UartInit()
58 {
59 1 RXD = 1;
60 1 TXD = 1;
61 1 SCON = 0x50; //串口方式1(8位Uart),允許接收
62 1 PCON |= 0x80; //波特率加倍
63 1 TMOD &= 0x0F;
64 1 TMOD |= 0x20; //T1設置為8位自動重裝定時器
65 1 TH1 = TL1 = 0xFA; //設置波特率為9600
66 1 TR1 = 1;
67 1 }
68
69
70 /*
71 函數:PutChar()
72 功能:從串行口輸出字符c
73 */
74 void PutChar(char c)
75 {
76 1 SBUF = c;
77 1 while ( !TI ) Feed();
78 1 TI = 0;
79 1 }
80
81
82 /*
83 函數:PutStr()
84 功能:從串行口輸出字符串*s
85 */
86 void PutStr(char *s)
87 {
88 1 unsigned char c;
89 1 for (;;)
90 1 {
91 2 c = *s++;
92 2 if ( c == '\0' ) break;
93 2 PutChar(c);
94 2 }
95 1 }
96
97
98 /*
99 函數:GetStr()
100 功能:從串行口接收一個字符串
101 參數:
102 *s:返回輸入的字符串
103 n:最大長度限制
104 說明:輸入的字符串以回車鍵結束
105 */
106 void GetStr(char *s, unsigned char n)
107 {
108 1 unsigned char c;
109 1 for (;;)
110 1 {
111 2 while ( !RI ) Feed();
112 2 c = SBUF;
113 2 RI = 0;
114 2 if ( c == '\n' ) break;
115 2 if ( c == '\0' ) break;
116 2 if ( (n != 0) && (c >= ' ') )
117 2 {
C51 COMPILER V7.09 MAIN 07/03/2006 13:45:36 PAGE 3
118 3 *s++ = c;
119 3 n--;
120 3 }
121 2 }
122 1 *s = '\0';
123 1 }
124
125
126 /*
127 函數:SysInit()
128 功能:系統初始化
129 */
130 void SysInit()
131 {
132 1 unsigned char c;
133 1 I2C_Init();
134 1 TMOD &= 0xF0;
135 1 TMOD |= 0x01;
136 1 UartInit();
137 1 Delay(300); //上電后必須先延時200ms以上才能對CAT1021進行操作
138 1 if ( I2C_Get(0xA0,0,&c) )
139 1 {
140 2 PutStr("\r\nCAT1021 not found!");
141 2 for (;;)
142 2 {
143 3 Feed();
144 3 Delay(800);
145 3 }
146 2 }
147 1 }
148
149
150 /*
151 函數:BytetoHex()
152 功能:字節c轉換成16進制字符串
153 */
154 void ByteToHex(char *s, unsigned char c)
155 {
156 1 code unsigned char Tab[] = "0123456789ABCDEF";
157 1 *s++ = Tab[c / 16];
158 1 *s++ = Tab[c & 0x0F];
159 1 *s = '\0';
160 1 }
161
162
163 /*
164 函數:Read()
165 功能:讀取CAT1021內部EEPROM的數據
166 參數:
167 addr:起始地址,取值0~255
168 len:讀取的數據長度,取值1~256
169 */
170 void Read(unsigned char addr, unsigned char len)
171 {
172 1 unsigned char c;
173 1 unsigned char s[3];
174 1 PutStr("addr data ASCII\r\n");
175 1 do
176 1 {
177 2 ByteToHex(s,addr);
178 2 PutStr(s);
179 2 PutStr(" ");
C51 COMPILER V7.09 MAIN 07/03/2006 13:45:36 PAGE 4
180 2 I2C_Get(0xA0,addr++,&c);
181 2 ByteToHex(s,c);
182 2 PutStr(s);
183 2 if ( (c > ' ') && ( c != 0xFF ) )
184 2 {
185 3 PutStr(" ");
186 3 PutChar(c);
187 3 }
188 2 PutStr("\r\n");
189 2 } while ( --len != 0 );
190 1 }
191
192
193 /*
194 函數:Write()
195 功能:向CAT1021內部的EEPROM寫入一個字符串
196 參數:
197 addr:起始地址,取值0~255
198 *s:輸入的字符串
199 */
200 void Write(unsigned char addr, char *s)
201 {
202 1 unsigned char c;
203 1 for (;;)
204 1 {
205 2 c = *s++;
206 2 I2C_Put(0xA0,addr++,c);
207 2 Delay(5);
208 2 if ( c == '\0' ) break;
209 2 }
210 1 }
211
212
213 /*
214 函數:Input()
215 功能:從串行口輸入一個字符串
216 參數:
217 *s1:輸入前顯示的提示語
218 *s2:保存輸入的字符串
219 len:最大長度限制
220 */
221 void Input(char *s1, char *s2, unsigned char len)
222 {
223 1 PutStr(s1);
224 1 GetStr(s2,len);
225 1 PutStr(s2);
226 1 PutStr("\r\n");
227 1 }
228
229
230 void main()
231 {
232 1 unsigned char addr;
233 1 unsigned char len;
234 1 char s[41];
235 1 SysInit();
236 1 for (;;)
237 1 {
238 2 PutStr("\r\n");
239 2 Input("cmd>",s,40);
240 2 if ( !strcmp(s,"read") )
241 2 {
C51 COMPILER V7.09 MAIN 07/03/2006 13:45:36 PAGE 5
242 3 Input("address = ",s,40);
243 3 addr = atoi(s);
244 3 Input("length = ",s,40);
245 3 len = atoi(s);
246 3 Read(addr,len);
247 3 }
248 2 else if ( !strcmp(s,"write") )
249 2 {
250 3 Input("address = ",s,40);
251 3 addr = atoi(s);
252 3 Input("string = ",s,40);
253 3 Write(addr,s);
254 3 }
255 2 else
256 2 {
257 3 PutStr("error!");
258 3 }
259 2 }
260 1 }
261
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 680 ----
CONSTANT SIZE = 117 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 71
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 + -