⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.c

📁 在c8051f020上实现的控制无线模块nrf401和程序
💻 C
字号:
#include <c8051f020.h>                 // SFR声明
#include <stdio.h>
#include <string.h>
//-----------------------------------------------------------------------------
// sfr定义及全局常量
//-----------------------------------------------------------------------------
#define SYSCLK    22118400          // 系统时钟为22118400HZ
#define BAUDRATE 9600  // UART0 波特率为19200HZ
//#define TX_LENGTH    16                // 接收缓冲器长度为16

   
sfr16 DP       = 0x82;                 // 数据指针
sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
sfr16 TMR3     = 0x94;                 // Timer3 counter               
sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
sfr16 T2       = 0xcc;                 // Timer2
sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
sfr16 T4       = 0xf4;                 // Timer4                    
sbit PWR= P0^2;                       //P0.2 =1 为工作模式;P0.2=0为待机模式
sbit CS = P0^3;                        //P0.3=0为频道1,载波频率为433.92MHZ
                                       //P0.3=1为频道2,载波频率为434.32HZ
sbit TXEN = P0^4;                      //P0.4=0为接收模式,P0.4=1为发射模式
sbit LED = P1^6 ;  
int i;                     //LED显示发射状态
int k;
int j;
int m;
int l;
int q;

unsigned char xdata re[100];
//-----------------------------------------------------------------------------
// 函数声明
//-----------------------------------------------------------------------------

void SYSCLK_Init (void);            //系统时钟初始化函数声明
void PORT_Init (void);              //端口初始化函数声明
void UART0_Init (void);             //UART初始化函数声明
//----------------------------------------------------------------------------
//系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
   int i;                              // 延时计数

   OSCXCN = 0x67;                      // 使用外部时钟22.1184MHz                                   

   for (i=0; i < 256; i++) ;           // 等侍晶振起振

   while (!(OSCXCN & 0x80)) ;          // 等待晶振稳定
   OSCICN = 0x88;                      // 选择外部晶振作为系统时钟
                          
   //CKCON  = 0x20;                      //定时器2使用系统时钟	
}                    				    

//-----------------------------------------------------------------------------
// 交叉开关配置
//-----------------------------------------------------------------------------
//

void PORT_Init(void)
{  
   XBR0    = 0x04;    //使能UART0
   XBR1    = 0x00;    
   XBR2    = 0x40; 
   P0MDOUT |= 0xFD;   //RX,即P0.1为漏极开路方式,其它为推挽方式 
   P1MDOUT |= 0x40;   //p1.6为推挽方式       

  	
}
//--------------------------------------------------------------------------------------
//UART初始化
//--------------------------------------------------------------------------------------
void UART0_Init (void)
{
	
	SCON0=0x50;
	TMOD=0x20;
	TH1=-(SYSCLK/BAUDRATE/16);
	TR1=1;
	CKCON |=0x10;
	PCON  |=0x80;
	//TI0=1;
 
 }
 
 
void main(void)
{  
   WDTCN = 0xde;        //禁止看门狗定时器           
   WDTCN = 0xad; 
   
               
   SYSCLK_Init ();
   PORT_Init ();
   UART0_Init ();
   PWR = 1;                  //置nRF401为工作模式
   CS = 0;   
   for(l=0;l<1000;l++)
   for(q=0;q<100;q++);                //选择载波频率为433MHZ
   TXEN = 0;                 //接收模式
   for(j=0;j<1000;j++)
   for(k=0;k<100;k++);
   EA=1;
   ES0=1;
   //TI0=0;
   //RI0=0;
   while(1)
   {
        while(RI0==0);
        RI0=0; 

   }
}
//UART中断服务程序,中断向量4
//------------------------------------------------------------------------------------
void UART0_ISR (void) interrupt 4 using 3
{  
   if(m==100)
   m=0;
   //while(m<100)
      //if(SBUF0==0xaa)
      //{
	   re[m]=SBUF0;
	  
	   m++;
	   RI0=0;

	  // }
    
		 
}
                        
   


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -