一对二数据中转
- /****************************************Copyright (c)****************************************************
- ** 辽宁科技大学
- **
- ** 电子协会
- **
- **--------------File Info---------------------------------------------------------------------------------
- ** File Name: main.c
- ** Last modified Date:
- ** Last Version:
- ** Description: 主函数
- **
- **--------------------------------------------------------------------------------------------------------
- ** Created By: 王恺
- ** Created date: 2013/03/28
- ** Version: V1.0
- ** Descriptions: NRF24L01无线模块测试程序
- ** 波特率:4800
- **--------------------------------------------------------------------------------------------------------
- ** Modified by:
- ** Modified date:
- ** Version:
- ** Description:
- **
- *********************************************************************************************************/
- /*********************************************************************************************************
- 包含头文件
- *********************************************************************************************************/
- #include "reg51.h"
- #include "intrins.h"
- #include "nrf24l01.h"
- #include "main.h"
- bit no1 = 0,no2 = 0;
- sbit key1 = P3^2;
- unsigned char rx_buf1[4]={0x99,0x99,0x99,0x99}; //必须是4位数组
- unsigned char rx_buf2[4]={0x99,0x99,0x99,0x99}; //必须是4位数组
- unsigned char rx_buf[4]={0x00,0x00,0x00,0x00}; //必须是4位数组
- void UART_Send_Str(unsigned char *s);
- void SendByte(unsigned char dat);
- /*------------------------------------------------
- 串口初始化
- ------------------------------------------------*/
- void UART_Init(void)
- {
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
- TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
- TR1 = 1; // TR1: timer 1 打开
- EA = 1; //打开总中断
- // ES = 1; //打开串口中断
- }
- void Delay10ms() //@12.000MHz
- {
- unsigned char i, j;
- i = 117;
- j = 184;
- do
- {
- while (--j);
- } while (--i);
- }
- /*********************************************************************************************************
- ** Function name: main
- ** Descriptions: 主函数(接收)
- ** input parameters: 无
- ** output parameters: 无
- ** Returned value: 无
- //*********************************************************************************************************/
- void main()
- {
-
- uchar number = 0,i = 1,j=0,k = 0;
- uchar number1 = 0;
- uchar data1[20] = {0};
- NRF24L01Int();
- UART_Init();
- /*
- * 接收
- */
- while (1)
- {
- if(no1 == 0)
- {
- s_dizhi(0);//设置地址
- NRF24L01Int();
- NRFSetRXMode();//设置为接收模式
- if (NRFRevDate(rx_buf))//开始接受数
- {
- SendByte(65); //A
- SendByte(70); //F
- SendByte(rx_buf[0]); //此为数据
- SendByte(rx_buf[1]); //此为数据
- SendByte(rx_buf[2]); //从机编码
- SendByte(rx_buf[3]); //从机发送的次数
- SendByte(70); //F
- SendByte(65); //A
- NRF24L01Int();//进行初始化并且切换地址扫描
- // if(dizhi == 1)no1 = 1;
- // if(dizhi == 2)no2 = 1;
- }
- }
- if(no2 == 0)
- {
- s_dizhi(1);//设置地址
- NRF24L01Int();
- NRFSetRXMode();//设置为接收模式
- if (NRFRevDate(rx_buf))//开始接受数
- {
- SendByte(65); //A
- SendByte(70); //F
- SendByte(rx_buf[0]); //此为数据
- SendByte(rx_buf[1]); //此为数据
- SendByte(rx_buf[2]); //从机编码
- SendByte(rx_buf[3]); //从机发送的次数
- SendByte(70); //F
- SendByte(65); //A
- NRF24L01Int();
- // if(dizhi == 1)no1 = 1;
- // if(dizhi == 2)no2 = 1;
- }
- }
-
- }
- }
- void SendByte(unsigned char dat)
- {
- SBUF = dat;
- while(!TI);
- TI = 0;
- }
- /*------------------------------------------------
- 发送一个字符串
- ------------------------------------------------*/
- void UART_Send_Str(unsigned char *s)
- {
- while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
- {
- SendByte(*s);
- s++;
- }
- }
- /*------------------------------------------------
- 串口中断程序
- ------------------------------------------------*/
- void UART_SER (void) interrupt 4 //串行中断服务程序
- {
- unsigned char Temp; //定义临时变量
-
- if(RI) //判断是接收中断产生
- {
- RI=0; //标志位清零
- Temp=SBUF; //读入缓冲区的值
- P1=Temp; //把值输出到P1口,用于观察
- SBUF=Temp; //把接收到的值再发回电脑端
- }
- if(TI) //如果是发送标志位,清零
- TI=0;
- }
复制代码 |