?? remote.lst
字號(hào):
C51 COMPILER V8.05a REMOTE 08/15/2008 12:15:21 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE REMOTE
OBJECT MODULE PLACED IN remote.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE remote.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3
4 sbit SDA=P1^1; // 將p1.1口模擬數(shù)據(jù)口
5 sbit SCL=P1^0; // 將p1.0口模擬時(shí)鐘口
6
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define disdata P0 //顯示數(shù)據(jù)碼輸出口
10 #define PCF8591_WRITE 0x90
11 #define PCF8591_READ 0x91
12 #define NUM 4 //接收和發(fā)送緩存區(qū)的深度
13 uchar idata receivebuf[NUM]; //數(shù)據(jù)接收緩沖區(qū)
14
15 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
16 bit bdata SystemError; //從機(jī)錯(cuò)誤標(biāo)志位
17
18
19 unsigned char key_s, key_v, tmp;
20
21 char code str[] = "welcome! www.willar.com \n\r";
22
23
24 void send_str();
25 bit scan_key();
26 void proc_key();
27 void delayms(unsigned char ms);
28 void send_char(unsigned char txd);
29
30 sbit K1 = P1^4;
31
32
33 //-------------------------------------------------------------------
34 // 函數(shù)名稱: iic_start()
35 // 函數(shù)功能: 啟動(dòng)I2C總線子程序
36 //-------------------------------------------------------------------
37 void iic_start(void)
38 { //時(shí)鐘保持高,數(shù)據(jù)線從高到低一次跳變,I2C通信開始
39 1 SDA = 1;
40 1 SCL = 1;
41 1 delayNOP(); // 延時(shí)5us
42 1 SDA = 0;
43 1 delayNOP();
44 1 SCL = 0;
45 1 }
46 //-------------------------------------------------------------------
47 // 函數(shù)名稱: iic_stop()
48 // 函數(shù)功能: 停止I2C總線數(shù)據(jù)傳送子程序
49 //-------------------------------------------------------------------
50 void iic_stop(void)
51 {
52 1 SDA = 0; //時(shí)鐘保持高,數(shù)據(jù)線從低到高一次跳變,I2C通信停止
53 1 SCL = 1;
54 1 delayNOP();
55 1 SDA = 1;
C51 COMPILER V8.05a REMOTE 08/15/2008 12:15:21 PAGE 2
56 1 delayNOP();
57 1 SCL = 0;
58 1 }
59 //------------------------------------------------------------------
60 // 函數(shù)名稱: iicInit_()
61 // 函數(shù)功能: 初始化I2C總線子程序
62 //------------------------------------------------------------------
63 void iicInit(void)
64 {
65 1 SCL = 0;
66 1 iic_stop();
67 1 }
68 //-------------------------------------------------------------------
69 // 函數(shù)名稱: slave_ACK
70 // 函數(shù)功能: 從機(jī)發(fā)送應(yīng)答位子程序
71 //-------------------------------------------------------------------
72 void slave_ACK(void)
73 {
74 1 SDA = 0;
75 1 SCL = 1;
76 1 delayNOP();
77 1 SCL = 0;
78 1 }
79 //-------------------------------------------------------------------
80 // 函數(shù)名稱: slave_NOACK
81 // 函數(shù)功能: 從機(jī)發(fā)送非應(yīng)答位子程序,迫使數(shù)據(jù)傳輸過程結(jié)束
82 //-------------------------------------------------------------------
83 void slave_NOACK(void)
84 {
85 1 SDA = 1;
86 1 SCL = 1;
87 1 delayNOP();
88 1 SDA = 0;
89 1 SCL = 0;
90 1 }
91 //-------------------------------------------------------------------
92 // 函數(shù)名稱: check_ACK
93 // 函數(shù)功能: 主機(jī)應(yīng)答位檢查子程序,迫使數(shù)據(jù)傳輸過程結(jié)束
94 //-------------------------------------------------------------------
95 void check_ACK(void)
96 {
97 1 SDA = 1; // 將p1.1設(shè)置成輸入,必須先向端口寫1
98 1 SCL = 1;
99 1 F0 = 0;
100 1 delayNOP();
101 1 if(SDA == 1) // 若SDA=1表明非應(yīng)答,置位非應(yīng)答標(biāo)志F0
102 1 F0 = 1;
103 1 SCL = 0;
104 1 }
105 //-------------------------------------------------------------------
106 // 函數(shù)名稱: IICSendByte
107 // 入口參數(shù): ch
108 // 函數(shù)功能: 發(fā)送一個(gè)字節(jié)
109 //-------------------------------------------------------------------
110 void IICSendByte(uchar ch)
111
112 {
113 1 unsigned char idata n=8; // 向SDA上發(fā)送一位數(shù)據(jù)字節(jié),共八位
114 1
115 1 while(n--)
116 1 {
117 2 if((ch&0x80) == 0x80) // 若要發(fā)送的數(shù)據(jù)最高位為1則發(fā)送位1
C51 COMPILER V8.05a REMOTE 08/15/2008 12:15:21 PAGE 3
118 2 {
119 3 SDA = 1; // 傳送位1
120 3 SCL = 1;
121 3 delayNOP();
122 3 // SDA = 0;
123 3 SCL = 0;
124 3 }
125 2 else
126 2 {
127 3 SDA = 0; // 否則傳送位0
128 3 SCL = 1;
129 3 delayNOP();
130 3 SCL = 0;
131 3 }
132 2 ch = ch<<1; // 數(shù)據(jù)左移一位
133 2 }
134 1 }
135 //-------------------------------------------------------------------
136 // 函數(shù)名稱: IICreceiveByte
137 // 返回接收的數(shù)據(jù)
138 // 函數(shù)功能: 接收一字節(jié)子程序
139 //-------------------------------------------------------------------
140 uchar IICreceiveByte(void)
141 {
142 1 uchar idata n=8; // 從SDA線上讀取一上數(shù)據(jù)字節(jié),共八位
143 1 uchar tdata=0;
144 1 while(n--)
145 1 {
146 2 SDA = 1;
147 2 SCL = 1;
148 2 tdata =tdata<<1; //左移一位
149 2 if(SDA == 1)
150 2 tdata = tdata|0x01; // 若接收到的位為1,則數(shù)據(jù)的最后一位置1
151 2 else
152 2 tdata = tdata&0xfe; // 否則數(shù)據(jù)的最后一位置0
153 2 SCL = 0;
154 2 }
155 1
156 1 return(tdata);
157 1 }
158
159 //-------------------------------------------------------------------
160 // 函數(shù)名稱: ADC_PCF8591
161 // 入口參數(shù): controlbyte控制字
162 // 函數(shù)功能: 連續(xù)讀入4路通道的A/D轉(zhuǎn)換結(jié)果到receivebuf
163 //-------------------------------------------------------------------
164 void ADC_PCF8591(uchar controlbyte)
165 {
166 1 uchar idata receive_da,i=0;
167 1
168 1 iic_start();
169 1
170 1 IICSendByte(PCF8591_WRITE); //控制字
171 1 check_ACK();
172 1 if(F0 == 1)
173 1 {
174 2 SystemError = 1;
175 2 return;
176 2 }
177 1
178 1 IICSendByte(controlbyte); //控制字
179 1 check_ACK();
C51 COMPILER V8.05a REMOTE 08/15/2008 12:15:21 PAGE 4
180 1 if(F0 == 1)
181 1 {
182 2 SystemError = 1;
183 2 return;
184 2 }
185 1
186 1 iic_start(); //重新發(fā)送開始命令
187 1 IICSendByte(PCF8591_READ); //控制字
188 1 check_ACK();
189 1 if(F0 == 1)
190 1 {
191 2 SystemError = 1;
192 2 return;
193 2 }
194 1
195 1 IICreceiveByte(); //空讀一次,調(diào)整讀順序
196 1 slave_ACK(); //收到一個(gè)字節(jié)后發(fā)送一個(gè)應(yīng)答位
197 1
198 1 while(i<4)
199 1 {
200 2 receive_da=IICreceiveByte();
201 2 receivebuf[i++]=receive_da;
202 2 slave_ACK(); //收到一個(gè)字節(jié)后發(fā)送一個(gè)應(yīng)答位
203 2 }
204 1 slave_NOACK(); //收到最后一個(gè)字節(jié)后發(fā)送一個(gè)非應(yīng)答位
205 1 iic_stop();
206 1 }
207
208
209 main()
210 {
211 1 TMOD = 0x20; // 定時(shí)器1工作于8位自動(dòng)重載模式, 用于產(chǎn)生波特率
212 1 TH1 = 0xFD; // 波特率9600
213 1 TL1 = 0xFD;
214 1
215 1 SCON = 0x50; // 設(shè)定串行口工作方式
216 1 PCON &= 0xef; // 波特率不倍增
217 1
218 1 TR1 = 1; // 啟動(dòng)定時(shí)器1
219 1 IE = 0x0; // 禁止任何中斷
220 1
221 1 while(1)
222 1 {
223 2 if(RI) // 是否有數(shù)據(jù)到來
224 2 {
225 3 RI = 0;
226 3 tmp = SBUF; // 暫存接收到的數(shù)據(jù)
227 3 P0 = tmp; // 數(shù)據(jù)傳送到P0口
228 3 //send_char(tmp); // 回傳接收到的數(shù)據(jù)
229 3 }
230 2 if(P0==0x30)
231 2 while(1)
232 2 { iicInit(); //I2C總線初始化
233 3 ADC_PCF8591(0x04);
234 3 send_char(receivebuf[1]);
235 3 //delayms(5);
236 3 if(RI) // 是否有數(shù)據(jù)到來
237 3 {
238 4 RI = 0;
239 4 tmp = SBUF; // 暫存接收到的數(shù)據(jù)
240 4 P0 = tmp; // 數(shù)據(jù)傳送到P0口
241 4 //send_char(tmp); // 回傳接收到的數(shù)據(jù)
C51 COMPILER V8.05a REMOTE 08/15/2008 12:15:21 PAGE 5
242 4 }
243 3 //if(P0==0)
244 3
245 3 if(P0==0xff)
246 3 break;
247 3 }
248 2 }
249 1 }
250
251
252 void send_char(unsigned char txd)
253 // 傳送一個(gè)字符
254 {
255 1 SBUF = txd;
256 1 while(!TI); // 等特?cái)?shù)據(jù)傳送
257 1 TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志
258 1 }
259
260 /*void send_str()
261 // 傳送字串
262 {
263 unsigned char i = 0;
264 while(str[i] != '\0')
265 {
266 SBUF = str[i];
267 while(!TI); // 等特?cái)?shù)據(jù)傳送
268 TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志
269 i++; // 下一個(gè)字符
270 }
271 }
272
273 void delayms(unsigned char ms)
274 // 延時(shí)子程序
275 {
276 unsigned char i;
277 while(ms--)
278 {
279 for(i = 0; i < 120; i++);
280 }
281 } */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 323 ----
CONSTANT SIZE = 27 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = 4 4
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -