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

📄 rf_rxover.c

📁 c8051f单片机控制ptr4000的收发程序
💻 C
字号:
 
#include "C8051F120.h"
#include "INTRINS.H"
  sbit  dat=P0^7;   //data
  sbit  pwr=P0^3;   //pwr
  sbit  led=P0^4; //clk2
  sbit  dout0=P0^5; //dout2
  sbit  clk=P0^6;   //clk1
  sbit  cs=P4^7;   //cs
  sbit ce=P4^6;   //ce
  sbit dr2=P4^5;   //dr2
  sbit dr1=P4^4; //dr1
 


  unsigned char variable1;
  unsigned char variable2;
  unsigned char rec_data[4];
  unsigned char config_data[15];
  unsigned char m;
  unsigned char n;
  unsigned char temp;



//
void delayus(unsigned char us)
{unsigned char i;
  for (i=0;i<us;i++)
  {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  }
 }

void delayms(unsigned char ms)
{unsigned char rrr,cnt;
for (rrr=0;rrr<ms;rrr++)
  {
   for(cnt=0;cnt<4;cnt++)
      delayus(250);
  }

}


void Oscillator_Init()
{
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x77;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;
}


void Port_IO_Init()
{
    SFRPAGE   = CONFIG_PAGE;
    P0MDOUT   = 0XFF;
    P4MDOUT   = 0xEF;
    XBR2      = 0x40;
	dr1=1;

	n++;
}



 void pwrconfig(void)
  {
   int i,j;
   m=0;
  config_data[0]=0x20;     //119:112
  config_data[1]=0x20;     //112:104,通道1数据长度
  config_data[2]=0x00;     //103:64,channel 2 address
  config_data[3]=0xcc;
  config_data[4]=0xcc;
  config_data[5]=0xcc;
  config_data[6]=0xcc;
  config_data[7]=0x00;     //63:24,channel 1 address
  config_data[8]=0xcc;
  config_data[9]=0xcc;
  config_data[10]=0xcc;
  config_data[11]=0xcc;
  config_data[12]=0x83;   //address width,CRC 16bits
  config_data[13]=0x4e;   
  config_data[14]=0x05;   //定义工作模式为接收模式
  pwr=0;                  //掉电模式
  cs=0;
  ce=0;
  clk=0;
  dat=0;
  pwr=1;             //数据发送结束,进入stand by mode
  delayms(5);
  cs = 1;           //进入配置方式
  delayus(6);         //CS到dat至少延迟5us Tcs2data 
  dat=0;
  for(i=0;i<15;i++)
  {
     variable1=config_data[i];
	 for(j=7;j>=0;j--)
	  {
	    clk=0;
		SFRPAGE   = CONFIG_PAGE;
	
	    dat=(variable1>>j)&0x01; //配置先写入高位MSB
	    delayus(5);           //Ts
	    clk=1;
	    delayus(5);           //时钟信号高电平保持最多3ms
	    clk=0;            //数据在CLK1上升沿写入
	   
	  }
	  m++;
  }
  cs=0;              //CS置低使配置有效
}


void Receive_data(void)
  {
  int i,j;
  n=0;
 
  pwr = 1;       //待机模式
  ce = 0 ;
  cs = 0; 
  clk=0;
  delayus(1);
  ce=1;       //进入工作(接收)模式  
   P0MDOUT   = 0X7F;
  dat=1;
  
  delayms(6);
  //dat=0;

if(dr1==1)
  {
    
	for(i=0;i<4;i++)
    { 
          for(j=0;j<8;j++)
          {
			  variable2<<=1; 
              clk=0;
              temp=dat&0x01;
              variable2+=temp;
              delayus(5);
              clk=1;
              delayus(5);//dr12clk        
              n++;
          }
      rec_data[i]=variable2;
      variable2=0x00;
    }   
  }
}
void main()
{
  Oscillator_Init();
  WDTCN = 0Xde;
  WDTCN = 0Xad;
  Port_IO_Init();
  pwrconfig();
  Receive_data();
 
}

⌨️ 快捷键说明

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