📄 89lv51.lst
字号:
135 test=test&0x20; // check if have Data sent TX FIFO interrupt (TX_DS=1)
136 if(test==0x20) // TX_DS =1
137 {
138 P0=0x00; // turn on all led
139 delay100(); // delay 100ms
140 P0=0xff;
141 }
142 }
143 /**************************************************/
144
145 /**************************************************
146 Function: Uart_TxData();
147
148 Description:
149 write data x to SBUF
150 /**************************************************/
151 void Uart_TxData (BYTE x)
152 {
153 1 SBUF=x; // write data x to SBUF
154 1 while(TI==0);
155 1 TI=0;
156 1 }
157 /**************************************************/
158
159 /**************************************************
160 Function: CheckButtons();
161
162 Description:
163 check buttons ,if have press,read the key values,
164 turn on led and transmit it; after transmition,
165 if received ACK, clear TX_DS interrupt and enter RX Mode;
166 turn off the led
167 /**************************************************/
168 void CheckButtons()
169 {
170 1 BYTE Temp,xx,Tempi;
171 1
172 1 P0=0xff;
173 1 Temp=P0&0x0f; //read key value from port P0
174 1 if (Temp!=0x0f)
C51 COMPILER V7.06 89LV51 05/08/2007 23:29:40 PAGE 4
175 1 {
176 2 delay_ms(10);
177 2 Temp=P0&0x0f; // read key value from port P0
178 2 if (Temp!=0x0f)
179 2 {
180 3 xx=Temp;
181 3 Tempi=Temp<<4; // Left shift 4 bits
182 3 P0=Tempi; // Turn On the led
183 3 tx_buf[0]=Tempi; // Save to tx_buf[0]
184 3 RF_TX_Mode(); // set TX Mode and transmitting
185 3 Uart_TxData(xx); // send data to uart
186 3 SPI_Write(WRITE_REG+STATUS,SPI_Read(READ_REG+STATUS)); // clear interrupt flag(TX_DS)
187 3 delay_ms(200);
188 3 P0=0xff; // Turn off the led
189 3 RF_RX_Mode(); // set receive mode
190 3
191 3 while((P0&0x0f)!=0x0f);
192 3 }
193 2 }
194 1 }
195 /**************************************************/
196 void main(void)
197 {
198 1 RFFlag =0;
199 1 UartFlag = 0;
200 1 SPI_Init(); // Initialize IO port and spi
201 1 InitUart(); // initialize 232 uart
202 1 Init_int0(); // enable int0 interrupt
203 1 RF_RX_Mode(); // set RX mode
204 1 while(1)
205 1 {
206 2 CheckButtons(); // scan key value and transmit
207 2 //////////////////
208 2 if(RFFlag) // RF finish received
209 2 {
210 3 RFFlag=0; // set flag=0
211 3 P0= 0x0f; // turn on led
212 3 delay_ms(200);
213 3 P0= 0xff; // turn off led
214 3 ///
215 3 Uart_TxData(rx_buf[0]); // send data to uart
216 3 }
217 2 if(UartFlag) //发送串口接收的数据
218 2 {
219 3 UartFlag = 0;
220 3 P0= 0x0f; // turn on led
221 3 ////////////
222 3 RF_TX_Mode(); // set TX Mode and transmitting
223 3 SPI_Write(WRITE_REG+STATUS,SPI_Read(READ_REG+STATUS)); // clear interrupt flag(TX_DS)
224 3 delay_ms(200);
225 3 RF_RX_Mode(); // set receive mode
226 3 /////////////
227 3 P0= 0xff; // turn off led
228 3 }
229 2 }
230 1 }
231 /**************************************************/
232
233 /**************************************************
234 Function: ISR_int0() interrupt 0;
235
236 Description:
C51 COMPILER V7.06 89LV51 05/08/2007 23:29:40 PAGE 5
237 if RX_DR=1 or TX_DS or MAX_RT=1,enter this subprogram;
238 if RX_DR=1,read the payload from RX_FIFO and set flag;
239 /**************************************************/
240 void ISR_int0(void) interrupt 0
241 {
242 1 sta=SPI_Read(READ_REG+STATUS); // read register STATUS's value
243 1 if(RX_DR) // if receive data ready (RX_DR) interrupt
244 1 {
245 2 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
246 2 RFFlag=1;
247 2 }
248 1 if(MAX_RT)
249 1 {
250 2 SPI_Write(FLUSH_TX,0);
251 2 }
252 1 SPI_Write(WRITE_REG+STATUS,sta);// clear RX_DR or TX_DS or MAX_RT interrupt flag
253 1 }
254 /**************************************************/
255 void Uart_int4(void) interrupt 4
256 {
257 1 if(RI)//处理接收中断
258 1 {
259 2 RI = 0;
260 2 tx_buf[0] = SBUF;
261 2 UartFlag = 1;
262 2 }
263 1 if(TI)//处理发送中断
264 1 {
265 2 TI = 0;
266 2 }
267 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 594 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 11
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 + -