亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reader.c

?? 用C語言開發(fā)環(huán)境編寫的nRF2401無線通信程序
?? C
字號:
/*---------------------------------------------------------
閱讀器的防碰撞的初步程序
---------------------------------------------------------*/
#include<stdio.h>
#include<c8051f020.h>

#define BYTE_BIT0  0X01
#define BYTE_BIT1  0X02
#define BYTE_BIT2  0X04
#define BYTE_BIT3  0X08
#define BYTE_BIT4  0X10
#define BYTE_BIT5  0X20
#define BYTE_BIT6  0X40
#define BYTE_BIT7  0X80

sbit CLK1  =P0^2;	    
sbit DATA=P0^3;         

#define LED_ON 0xE3      
#define LED_OFF 0X1c	
#define PWR_UP1	0X10	
#define PWR_UP0 0XEF    
#define CS0 0XF7        //P4.3 1111 0111
#define CS1 0X08	    //P4.3 0000 1000
#define CE1 0X04		//P4.2 0000 0100
#define CE0 0XFB		//P4.2 1111 1011
#define DR1 0X02        //P4.1 0000 0010
#define DR0 0XFD	    //P4.1 1111 1101

#define TEST_2 0x8E //MSB D143~D136
#define TEST_1 0x08 // D135~D128
#define TEST_0 0x1C // D127~D120
#define DATA2_W 0x10 //0x10=2 字節(jié) //頻道2 發(fā)送/接收數據長度(單位:Bit)
#define DATA1_W 0x80 //0x80=16字節(jié) //頻道1 發(fā)送/接收數據長度(單位:Bit)
#define ADDR2_4 0x00  
#define ADDR2_3 0x1c
#define ADDR2_2 0xcc
#define ADDR2_1 0xcc
#define ADDR2_0 0xcc
//頻道1 接收地址 (當前模塊地址) <- 只使用到頻道1
#define ADDR1_4 0x00
#define ADDR1_3 0xcc
#define ADDR1_2 0xcc
#define ADDR1_1 0xcc
#define ADDR1_0 0xcc

#define ADDR_W 0x10        //0x10=2字節(jié) //發(fā)送/接收地址寬度(單位:Bit)
#define CRC_L 0x1         //CRC模式 0:8位 1:16位
#define CRC_EN 0x1        //CRC校驗 0:禁用 1:啟用
#define RX2_EN 0x0        //雙頻道功能 0:禁用 1:啟用
#define CM 0x1            //0:Direct mode 1:ShockBurst mode
#define RFDR_SB 0x0       //傳輸速率 0:250kbps 1:1Mbps (250kbps比1Mbps傳輸距離更遠)
#define XO_F 0x3          //16M //nRF2401晶振頻率
#define RF_PWR 0x3        //信號發(fā)射功率
#define RF_CH 0x2         //Channel RF 頻率設置
//Channel = 2400MHz + RF_CH * 1.0MHz
#define RXEN 0x0         //0:Tx 1:Rx   閱讀器最先處于發(fā)送狀態(tài);
 //<將設置信息組合成每個字節(jié)的數據信息,此區(qū)域無需修改>
#define RFConfig_Bit0 TEST_2
#define RFConfig_Bit1 TEST_1
#define RFConfig_Bit2 TEST_0
#define RFConfig_Bit3 DATA2_W
#define RFConfig_Bit4 DATA1_W
#define RFConfig_Bit5 ADDR2_4
#define RFConfig_Bit6 ADDR2_3
#define RFConfig_Bit7 ADDR2_2
#define RFConfig_Bit8 ADDR2_1
#define RFConfig_Bit9 ADDR2_0
#define RFConfig_Bit10 ADDR1_4
#define RFConfig_Bit11 ADDR1_3
#define RFConfig_Bit12 ADDR1_2
#define RFConfig_Bit13 ADDR1_1
#define RFConfig_Bit14 ADDR1_0
#define RFConfig_Bit15 (ADDR_W<<2 | CRC_L<<1 | CRC_EN)
#define RFConfig_Bit16 (RX2_EN<<7 | CM<<6 | RFDR_SB<<5| XO_F<<2 |RF_PWR)
#define RFConfig_Bit17 (RF_CH<<1 | RXEN)
//通過宏定義將18字節(jié)的寄存器參數按照各個功能分解,以便于參數的調整
unsigned char code nRF2401_Conf[18] ={
										RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
										RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9,
										RFConfig_Bit10, RFConfig_Bit11, RFConfig_Bit12, RFConfig_Bit13, RFConfig_Bit14,
										RFConfig_Bit15, RFConfig_Bit16, RFConfig_Bit17
									 };
bdata unsigned char DATA_BUF;  //用于ByteRead 和 ByteWrite函數
unsigned char Manchesterbuf[16];
#define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)  //判斷數據的最高位是否為1
#define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)  //判斷數據的最低位是否為1
#define SYSCLK  11059200                   //系統(tǒng)時鐘      
#define BAUDRATE  9600		               //系統(tǒng)波特率

void Delay100(void)
{
	unsigned int i;
   	for(i=0;i<100;i++);
}
void Delay(void)
{
	unsigned int i;
	for(i=0;i<10;i++);
}


//系統(tǒng)設置
void SYSCLK_Init(void)
{
  int i;
 OSCXCN=0x67;             	//設置系統(tǒng)時鐘
 for(i=0;i<256;i++);
 while(!(OSCXCN&0x80));     //等待外部時鐘穩(wěn)定
 OSCICN=0x88;  	          
 XBR0=0X04;                 //設置串口引腳
 XBR2=0X40;  			    //交叉IO口使能
 P6=P6&LED_ON;              //LED燈亮
 Delay100();
 Delay100();
 P6=P6|LED_OFF;              //LED燈滅
}
//串口初始化函數
void UART0_Init(void)
{
  SCON0=0X50;                   //方式1,8位UART,允許接收					
  TMOD=0X20;	                //定時器1,模式2,8位重裝載		       
  TH1=-(SYSCLK/BAUDRATE/16);	//根據波特率設置定時器1的重載值;
  TR1=1;						//啟動定時器1;
  CKCON|=0X10;				     //定時器1使用SYSCLK為時基;
  PCON|=0X80;					//SMOD00=1; 
}

//寫每一位的數據。
void ByteWrite(unsigned char send)
{
	unsigned char i;
	DATA_BUF=send;
	for (i=0;i<8;i++)
		{
		    CLK1=0;
			if (DATA7) //總是發(fā)送最高位
			{
				 DATA=1;
			 }
			else
			{
			     DATA=0;
			}
			Delay();

			CLK1=1;     // CLK1=1; 0000 0001 P4^0;
			Delay();
            CLK1=0;	 
			DATA_BUF=DATA_BUF<<1;
		}
}
// <2401配置寄存器的寫入方式>
void Config2401(void)
{
  unsigned int i;
  unsigned char variablel;
  P4=P4&CS0;       
  P4=P4&CE0;       
  CLK1=0;
  DATA=0;

  P4=P4|PWR_UP1;          
	for(i=0;i<10;i++)
	  Delay100();
 //從上電到進入配置模式需要3ms的延時
  P4=P4|CS1;//使RF2401進入配置方式	      
   Delay100();

	for(i=3;i<18;i++)
	{
		variablel=nRF2401_Conf[i];
		ByteWrite(variablel);
	}
    Delay100();
    P4=P4&CS0;      //CS置低使配置有效
    Delay100();

}

//讀每一位的數據;
unsigned char ByteRead(void)
{
 unsigned char i;
	for (i=0;i<8;i++)
	{
		DATA_BUF=DATA_BUF<<1;
		CLK1=1;    //P4=P4|0X01;  //	CLK1=1;	 0000 0001
		DATA=1; //設置為輸入狀態(tài)
		if (DATA)  //讀取最高位,保存至最末尾,通過左移位完成整個字節(jié)
			{
			DATA_BUF|=BYTE_BIT0;
			}
		else
			{
			DATA_BUF&=~BYTE_BIT0;
			}
		CLK1=0;
		  Delay100();
	}
return DATA_BUF;
}

//將讀出的數據存儲在RxBuf;
void nrf2401_Rxpack(unsigned char *RxBuf,unsigned int *x)
{
  unsigned int i;
  *x=0;
  for(i=0;i<DATA1_W/8;i++)
    {
	  *RxBuf=ByteRead();
	  RxBuf++;
	  *x=*x+1;
	}
}

void SetTxMode(void)
{
  //設置為配置模式
   unsigned int i;
  P4=P4&CS0;       
  P4=P4&CE0;       
  CLK1=0;
  DATA=0;

  P4=P4|PWR_UP1;          //先進入空閑模式
  for(i=0;i<10;i++)
	Delay100();

  P4=P4|CS1;	       //進入配置模式
  Delay100();
  //配置寄存器0字節(jié)RXEN 設置為0:發(fā)送模式
    CLK1=0;	
	DATA =0;
	Delay();

	CLK1=1;           // CLK1=1;
	Delay();

	CLK1=0;            //P4=P4&0XFE;   //CLK1=0;
	P4=P4&CS0;         //CS=0;使配置有效 
	P4=P4|CE1;         
	Delay100();
	Delay100();
	Delay100();
}  

void SetRxMode(void)
{
  unsigned int i;
  P4=P4&CS0;       
  P4=P4&CE0;       
  CLK1=0;
  DATA=0;

  P4=P4|PWR_UP1;    //進入空閑模式       
  for(i=0;i<10;i++)
	Delay100();

  P4=P4|CS1;	    //進入配置模式     
  Delay100();

    CLK1=0;	
	DATA =1;
	Delay();

	CLK1=1;           // CLK1=1;
	Delay();

	CLK1=0;            //P4=P4&0XFE;   //CLK1=0;
	P4=P4&CS0;         //CS=0; 4.3 1111 0111; 
	P4=P4|CE1;         //CE=1; 4.2 0000 0100   ??è?·??í??ê?
	Delay100();
	Delay100();

}
//進行Manchester編碼
void Manchester_fun(unsigned char *TxBuf)
{
  unsigned char i,k=0;
  for (i=0;i<8;i++)
    {
	   if(TxBuf[i]==1)
	      {
		   Manchesterbuf[k]=1;
		   k++;
		    Manchesterbuf[k]=0;
		   k++;
		  }
	   else
	      {
		   Manchesterbuf[k]=0;
		   k++;
		    Manchesterbuf[k]=1;
		   k++;
		  }	
	}
}
//接收方通道硬件地址
unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
//nRF2401數據發(fā)送函數
void nRF2401_TxPacket(unsigned char TxBuf[])
{
 int i;
 unsigned char variable2;
 Manchester_fun(TxBuf);
 P4=P4|PWR_UP1;  
 P4=P4&CS0; 
 P4=P4&CE0;		//進入空閑模式
 CLK1=0;
 DATA=0;
 Delay();

 P4=P4|CE1;    //進入收發(fā)模式
 Delay100();

 for(i=0;i< (ADDR_W/8);i++)   //寫入接收地址(按字節(jié)對齊)
	{
		variable2=TxAddress[i];
		ByteWrite(variable2);
	} 
 for(i=0;i<(DATA1_W/8);i++)  //寫入需要發(fā)送的數據(按字節(jié)對齊)
	{
		variable2=Manchesterbuf[i];
		ByteWrite(variable2);
	}
	P4=P4&CE0;        //CE置低使發(fā)送有效
	Delay100();
	Delay100();

}

unsigned int checkconflict_fun(unsigned char *Rxbuf,unsigned char *Readdatabuf)
{
  unsigned  int i,k;
  for(i=0;i<16;i=i+2)
    {
		 if((Rxbuf[i]==1)&&(Rxbuf[i+1]==0))
		    {
			  *Readdatabuf=1; //收到的數據是下降沿,即為數據1;
			   Readdatabuf++;
			   k++;   
			}
		 else if((Rxbuf[i]==0)&&(Rxbuf[i+1]==1))
		    {
			  *Readdatabuf=0; //收到的數據是上降沿,即為數據0;
			   Readdatabuf++;
			   k++;
			}
		 else
		    break;
	} 
   return  k;   //返回碰撞位
}



void main(void)
{
	 unsigned char Txbuf1[8]={1,1,1,1,1,1,1,1,},Rxbuf[16],Readdatabuf[8];
	 unsigned char Txbuf2[8]={0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
	 unsigned char Txbuf3[8]={0X0A,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,};
	 unsigned char Txbuf4[8]={0,1,2,3,4,5,6,7,};
	 unsigned char Txbuf5[8]={11,20,30,50,10,41,98,75,};
	 unsigned char send_flag=1,recive_flag=0,LED=0X1C;
	 unsigned int  countbit,k=0,m,n,l; 
	 unsigned int *p=&countbit;
	 unsigned int over_flag=1,conflict_bit; 
	 unsigned long int  i=0;		
	 				   
	 WDTCN=0xde;          // 禁止看門狗定時器
	 WDTCN=0xad;		  
	 SYSCLK_Init();   	 //初始化CPU;
	 UART0_Init();		  //配置串口
	 Config2401();	  	  //配置nRF2401;        	
	 while(1)
	   {  		 
			 i=0; 		 
			while(i<100)       //發(fā)送階段
				 { SetTxMode( );
				   i++;
				    P4=P4|CE1;
				   nRF2401_TxPacket(Txbuf1); 
				   P6=P6&LED_ON;   //LED燈亮			  
				 } 
			               
			   SetRxMode();      //設置為接收模式
			   P4=P4|CE1;
			   P6=P6|LED_OFF;
			 for(i=0;i<600;i++)
			 	{ 
				   for(k=0;k<6000;k++)
				   {	    
						 if((P4&DR1)!=0)		 //檢查是否接收到數據
						  {
								P6=P6|LED_ON;  
								nrf2401_Rxpack(Rxbuf,p);    //接收到數據,讀出來 
							    conflict_bit=checkconflict_fun( Rxbuf,Readdatabuf);	  //檢查是否有碰撞,并返回碰撞位
								if(conflict_bit<8)	        //碰撞位小于8
								     {
										 Txbuf1[conflict_bit]=0;   //把碰撞位置為0
									 }
								else                        //沒有碰撞
								 	{
										m=0;			  
									   	while(m<600)
											 { P6=P6|LED_OFF;	
											   SetTxMode( );   //設置為發(fā)送模式
											   m++;
											   P4=P4|CE1;
											   nRF2401_TxPacket(Readdatabuf);   //發(fā)送接收到的標簽號作為確認信息
											   P6=P6&LED_ON; 
											   for(l=0;l<5;l++)
												 {
												    Delay100();
												 }
											 }
									     for(l=0;l<8;l++)    //向串口寫讀出的標簽號
									       {
										    SBUF0=Readdatabuf[l];
											while(TI0==0);
										    TI0=0;
									       }
									    for(n=0;n<8;n++)   //確認了一個標簽號后,進行下一次搜索,把發(fā)送的數據改為1111 1111
										   	 {
											 	Txbuf1[n]=1;
											  }
								 	 } 
						   recive_flag=1;
						   break;     //接收到了數據就跳出接收數據循環(huán)	   
					      }
			        }						
				 if(recive_flag==1)
				    break;	 //接收到了數據就跳出接收數據循環(huán)
				}
		recive_flag=0;		       
	}					  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费在线| 欧美一区二区三区四区五区| 国产乱国产乱300精品| 成人性生交大合| 国产欧美一区二区精品久导航 | 99精品欧美一区二区蜜桃免费| 91免费观看视频在线| 欧美综合色免费| 日韩天堂在线观看| 亚洲一区二区欧美| 国产一区二区三区四区五区入口| 色狠狠一区二区三区香蕉| 精品国产免费一区二区三区香蕉| 国产精品麻豆网站| 青青青爽久久午夜综合久久午夜 | 粉嫩一区二区三区性色av| 欧美影视一区在线| 中文字幕欧美三区| 亚洲午夜影视影院在线观看| 国产精品123区| 日韩三级视频中文字幕| 亚洲欧美激情视频在线观看一区二区三区| 男人的j进女人的j一区| 91日韩在线专区| 欧美激情一二三区| 国内一区二区视频| 欧美猛男男办公室激情| 中文字幕一区不卡| 久久国产福利国产秒拍| 欧美精品精品一区| 亚洲综合色在线| 白白色 亚洲乱淫| 久久亚洲精精品中文字幕早川悠里 | www亚洲一区| 亚洲国产欧美在线| 在线看日韩精品电影| 综合久久一区二区三区| 国产精品一级片| 欧美大胆一级视频| 日本在线播放一区二区三区| 成人免费观看男女羞羞视频| 久久精品人人做人人爽97| 玖玖九九国产精品| 日韩午夜在线影院| 免费在线视频一区| 91精品欧美综合在线观看最新| 一区二区三区资源| 国产传媒欧美日韩成人| 欧美日韩不卡在线| 亚洲国产成人91porn| 色8久久精品久久久久久蜜| 亚洲人成人一区二区在线观看 | 91丝袜高跟美女视频| 国产精品福利一区二区三区| 国产盗摄女厕一区二区三区 | 蜜桃av一区二区三区电影| 欧美日韩精品系列| 美日韩一区二区| 337p日本欧洲亚洲大胆色噜噜| 日本成人在线网站| 久久综合色鬼综合色| 国产一区二区三区蝌蚪| 国产精品免费久久久久| av电影在线观看不卡| 一区av在线播放| 欧美日韩精品综合在线| 乱中年女人伦av一区二区| 久久久国产精品午夜一区ai换脸| 国产精品自拍一区| 亚洲另类在线制服丝袜| 欧美区一区二区三区| 精品一区精品二区高清| 国产精品视频你懂的| 色偷偷久久人人79超碰人人澡| 亚洲最新视频在线观看| 日韩一区二区在线看片| 成人不卡免费av| 亚洲第一久久影院| www国产精品av| 风间由美性色一区二区三区| 亚洲一区二区三区免费视频| 日韩美女一区二区三区| 91小视频免费观看| 麻豆成人综合网| 综合久久久久综合| 欧美亚洲国产怡红院影院| 六月丁香综合在线视频| 亚洲精品一二三区| 欧美成人精品高清在线播放| 国产一区二区三区美女| 国产精品久久免费看| 91精品国产综合久久久久久久| 国产精品影视网| 亚洲综合视频在线观看| 国产欧美日韩精品一区| 欧美高清激情brazzers| 国产.精品.日韩.另类.中文.在线.播放| 亚洲欧美日韩国产中文在线| 欧美成人精品高清在线播放| 91精品办公室少妇高潮对白| 国内久久婷婷综合| 亚洲香肠在线观看| 亚洲欧洲日韩av| 精品99999| 欧洲av一区二区嗯嗯嗯啊| 老司机午夜精品| 一区二区三区 在线观看视频| 国产片一区二区| 日韩一区二区三区电影在线观看| 99精品1区2区| 成人午夜大片免费观看| 精品一区二区三区在线观看国产| 亚洲一二三四在线| 国产精品天美传媒| 制服丝袜av成人在线看| 欧美视频中文字幕| 在线观看一区二区视频| 9l国产精品久久久久麻豆| 国产成人免费视频网站高清观看视频| 亚洲国产一区二区a毛片| 亚洲人成精品久久久久久| 中文文精品字幕一区二区| 精品三级在线看| 精品欧美一区二区久久| 欧美一二三区在线观看| 91精品黄色片免费大全| 欧美精品成人一区二区三区四区| 在线日韩av片| 色婷婷国产精品综合在线观看| 成人免费观看视频| 99精品视频在线免费观看| 波多野结衣中文字幕一区二区三区| 国产真实乱偷精品视频免| 精品综合免费视频观看| 美女www一区二区| 亚洲.国产.中文慕字在线| 亚洲丶国产丶欧美一区二区三区| 亚洲国产成人porn| 午夜视黄欧洲亚洲| 日韩成人一级片| 久久国产剧场电影| 精品一区二区三区在线观看国产| 精品亚洲国产成人av制服丝袜| 久久91精品国产91久久小草| 性做久久久久久| 蜜桃视频一区二区| 国产a精品视频| 97久久超碰国产精品| 日韩亚洲欧美成人一区| 欧美国产一区二区在线观看| 亚洲一区二区三区小说| 国产一区二区三区四区五区入口| 91视视频在线直接观看在线看网页在线看| 在线观看日韩精品| 国产亚洲短视频| 日韩高清不卡一区| 99精品欧美一区二区蜜桃免费| 日韩一区二区三区免费看| 国产精品黄色在线观看| 久久黄色级2电影| 91久久奴性调教| 久久久激情视频| 午夜电影一区二区三区| 成人av网站在线观看| 日韩精品一区二区在线| 亚洲尤物在线视频观看| 国产剧情一区在线| 日韩一区二区三区四区| 亚洲午夜电影网| 99re8在线精品视频免费播放| 欧美一级高清片| 亚洲一区自拍偷拍| 99国产欧美久久久精品| 久久综合狠狠综合久久激情 | 欧美成人在线直播| 亚洲第一福利视频在线| 97久久超碰精品国产| 亚洲国产电影在线观看| 精品综合免费视频观看| 欧美一三区三区四区免费在线看| 亚洲嫩草精品久久| 丁香五精品蜜臀久久久久99网站 | 日韩午夜av电影| 亚洲成在线观看| 欧美性色欧美a在线播放| 中文字幕亚洲区| 成人精品一区二区三区中文字幕| 日韩欧美不卡在线观看视频| 午夜视频一区二区三区| 欧美三级中文字幕在线观看| 亚洲欧美另类综合偷拍| 色综合天天性综合| 国产精品久久久久天堂| 成年人午夜久久久| 中文字幕乱码亚洲精品一区| 粉嫩久久99精品久久久久久夜| 久久综合九色综合欧美98| 美女国产一区二区三区| 日韩免费观看高清完整版| 激情五月婷婷综合网|