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

📄 tx_recieve.c

📁 cc2210无线传输
💻 C
字号:
#include <c8051F330.h>
#include <intrins.h>  // _nop_
sbit CE=P1^2;
sbit CS=P1^3;
sbit CLK=P1^4;
sbit DATA=P1^5;
sbit LED0=P0^7;
sbit DR=P0^0;  

char rxword[3];
unsigned char comrx=0;
char y,flag;
unsigned char m,n;
char bdata CMRtemp;
sbit bflag=CMRtemp^7;
char initword[15]={
                         0x18,0x18,						//通道2、通道1 数据包长度 11V11,23字节
						 0x00,0x00,0xcc,0xcc,0xcc,		//通道2地址
						 0x00,0x00,0xcc,0xcc,0xcc,		//通道1地址
						 0x63,							//24位地址(位7-2),16位CRC校验(位1),使能CRC(位0)
						 0x6f,							//one recieve(Bit7,0),Shock Mode(Bit6,1),Data rate(Bit 5)1M,Crystall(Bit4-2,011),RFPower(Bit1-0)
						 0x05							//channal select(Bit7-1)2450M,RX/TX mode(Bit0,1 reciever mode)
				   };
void init_io();
void Init_Config();
void delay(unsigned int x);
void delay600ns();
void clock();
void SYSCLK_Init();
void Interrupt_Init();				//中断配置
void UART_Init();
void Init_Tim1();
void watchdog_Init(void);  
void Comparator_Init();
void Init_Device(void);
                  
void main()
{
 EA=0;
 PCA0MD&=~0x40;					//	Disable Watchdog timer
 PCA0CN=0x40;
 Init_Device();
 delay(4998);					//delay 3.125ms,Tpd2sby,min 3 ms
 EA=1;							
 LED0=1;
while(1)
 {
    PCA0CPH2=0x20;	
	if(comrx==1)
      { 
	   LED0 = ~LED0;
	   }
   }
}	

void Init_Device(void)
{
 SYSCLK_Init();
 init_io();
 Interrupt_Init();				//中断配置
 UART_Init();
 Init_Tim1();
 Comparator_Init();
 watchdog_Init();
 Init_Config();
}

void clock()
{
	CLK=1;
	delay600ns();	//延时580ns,Th min 500ns
	CLK=0;
}

void init_io()
{ 
    P0MDIN    = 0xFC;
    P0MDOUT   = 0x80;
    P1MDOUT   = 0x1C;
    P0SKIP    = 0x03;
    XBR1      = 0x40;
}


void Init_Config()
{

/**********配置接收模块*************/
	CE=0;
	delay600ns();					//Td min 50ns
	CS=1;						//配置模式,CS=1,CE=0
	CLK=0;
	delay(7);						//延时5458ns,Tcs2data min 5us
	for(m=0;m<15;m++)
	{
		
		CMRtemp=initword[m];
		for(n=0;n<8;n++)
		{
			DATA=bflag;
			delay600ns();			//Ts min 500ns
			clock(); 
			CMRtemp=CMRtemp<<1;
        }	

	}
    
	CS=0;
	P1MDOUT=0xBF;
    DATA=1;
	CE=1;						//配置为工作模式
	delay(337);						//Tsby2rx,203us,max 202us
}

void delay(unsigned int x)			//x=1,41个时钟周期,1.7us;x=2,56个周期,2.3us(15个周期0.6us)
{							//该函数延时最长即x=65535为40ms
	unsigned int i;
	for(i=0;i<x;i++);
}

void delay600ns()					//延时580ns,14个时钟周期
{
    _nop_();
	_nop_();
	_nop_();
}

void SYSCLK_Init ()
{	
   OSCICN = 0x83;                      // start external oscillator with
}

void Comparator_Init()
{
    int i;
    CPT0CN    = 0x80;
    for (i = 0; i < 35; i++);  // Wait 10us for initialization
    CPT0CN    &= ~0x30;
    CPT0MX    = 0x00;
    CPT0MD    = 0x22;
}

void Interrupt_Init (void)
{
    IE        = 0x98;
    EIE1      = 0x20;
    EIP1      = 0x20;
}

void Init_Tim1(void)
{
	TCON = 0x40;
	TMOD = 0x20;
 	CKCON=0x00;  //9600
	TL1=0x96;
	TH1 = 0x96;
}	

void serve_cp0() interrupt 12	//上升沿中断,CMR通讯来临!
{
	char p,q;
   	CPT0CN&=~0x30;		//clear interrupt pending flags
   	EA=0;
	delay(84);						//51us,Td(min 50 ns)+Tdr2clk(min 50 us)
	for(p=0;p<3;p++)
	{
		CMRtemp=0;
		for(q=0;q<8;q++)
		{
 			CMRtemp=CMRtemp<<1;
			CLK=1;
			delay600ns();
			CMRtemp|=DATA;
			CLK=0;
			delay600ns();
		}
		rxword[p]=CMRtemp;
	}
	EA=1;	
	LED0 = ~LED0;	
	SBUF0=rxword[0];
	ES0=1;
    if(TI0==1)
      {
        TI0=0;
			
      }
}

void UART_Init()
{
	SCON0 = 0x70;    // Serial Port Control Register(01110000b),方式1,8位可变波特率
}

void watchdog_Init()
 { 
   PCA0CN=0x40;    //允许PCA计数器功能
   PCA0MD=0x40;    //允许看门狗定时器,并设系统时钟为计数时钟
   PCA0CPL2=0xff;   //设定复位时间为32ms
   PCA0CPH2=0x00;
}

⌨️ 快捷键说明

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