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

📄 cmx865.c

📁 FSK编解码片子CMX865的测试源代码
💻 C
字号:
//----------------------
#pragma CD DB SB OE OT(8,SPEED) OR
#include	<absacc.h>
#include	<intrins.h>
#include	<string.h>


#include<reg52.h>

#define uchar	unsigned char
#define uint	unsigned int
//==================== CMX865_REF===
#define RESET              0x01
#define GENERALCONTROL     0xE0
#define TXMODE             0XE1

#define RXMODE			   0XE2
#define TXDATA			   0XE3

#define RXDATA			   0XE5
#define STATUS			   0XE6

#define PRGREG             0XE8

//==================================
#define POWERUP            0X1349//0x7b49//




sbit    SYS_LED=P1^6;

sbit    IRQN=P3^3;

//CMX865_communication pins.
//
sbit    RDATA=P1^2;//sbit   
sbit    CDATA=P1^4;//sbit   
sbit    SCLK=P1^7;//sbit	
sbit    CSN=P1^5;//sbit   

uchar lenth=3;
uchar CM865_Send_Flag=0;
uchar int_flag=0,send_one=0;
uint ii1,ii2;
uint xdata status_data;
  uchar xdata H;
  uchar xdata L;
  uchar xdata sb,buff_var;
//===========================
 void initialize_865(void);
 void generalreset(void);
 
 void wr2(uchar address, uint dataword);
 void wr1(uchar address,uchar databyte);
 void wr_byte(uchar byte);
 void tx_data(uchar tx_dd);
 void tx_string(uchar *tx_st);
  uint m_read2(uchar  address);
     uchar rd1(uchar address);
     uchar rd_byte(void);
    
void tx_data(uchar tx_dd)
{
     TI=0;
     SBUF=tx_dd;
	 while(!TI){;}
}
void tx_string(uchar *tx_st)
{
   uchar  m;
   for(m=0;m<60;m++)
   {
      if(*tx_st!=0)
	  {
	     
	     tx_data(*tx_st);
		 tx_st++;
   	  }
	  else
	    break;
   }
}	 
//-----------主程序
void main(void)
{
    
    IE=0;TCON=0x04;

	IRQN=1;
	TMOD=0x21;        //定时器T1设为工作方式2,自动装入
    TH1=0xFD;
    TL1=0xFD;
	TR1=1;
	REN=1;
    SCON=0x50;       //关中断
    PCON=0;
	
    SYS_LED=1;
  	tx_string("hello\r");
	initialize_865();
	m_read2(RXDATA);
	IRQN=1;
	EX1=1;EA=1;	
    wr1(TXDATA,0X00);
	

while(1){

	      _nop_();
	 
	
  		 
  		 
} 

}

void cmx865_int() interrupt 2  using 3
{
   //m_read2(STATUS); //进入中断后应立即读取STATUS中的内容。否则读出来的数据就不对。
   status_data=m_read2(STATUS);	
   wr1(TXDATA,0x33);
   if(((status_data&0x8000)!=0))
		 {
		    
     	 	tx_string("effect interrupt:  ");
			L=status_data;
  		    H=status_data>>8;
  		    
  		    tx_data(0x30+((H>>4)>9?((H>>4)+7):(H>>4)));
  		    tx_data(0x30+((H&0x0f)>9?((H&0x0f)+7):(H&0x0f)));
			tx_data(0x30+((L>>4)>9?((L>>4)+7):(L>>4)));
  		    tx_data(0x30+((L&0x0f)>9?((L&0x0f)+7):(L&0x0f)));
  		    tx_string("\r");
			if(((status_data&0x1000)!=0))
			{
			    
			        ;// wr1(TXDATA,0x33);
				
				 //sb=rd1(RXDATA);//CLEAR RX_FLAG;
				 /*for(ii1=0;ii1<16;ii1++){
				 status_data=m_read2(STATUS);
				 L=status_data;
  		    	 H=status_data>>8;
  		    
  		    	 tx_data(0x30+((H>>4)>9?((H>>4)+7):(H>>4)));
  		    	 tx_data(0x30+((H&0x0f)>9?((H&0x0f)+7):(H&0x0f)));
				 tx_data(0x30+((L>>4)>9?((L>>4)+7):(L>>4)));
  		    	 tx_data(0x30+((L&0x0f)>9?((L&0x0f)+7):(L&0x0f)));
  		    	 tx_string("\r");
				 tx_string("output signal again\r");}  */
				
			}
			else if((status_data&0x0040)!=0)
			{
			     
			     sb=rd1(RXDATA);
  		 		 tx_string("acquired rxdata:");
  		 		 tx_data(0x30+((sb>>4)>9?((sb>>4)+7):(sb>>4)));
  		         tx_data(0x30+(sb&0x0f>9?((sb&0x0f)+7):(sb&0x0f)));
  		 		 tx_string("\r");	  
		     }
			send_one=0;
		 }
  		 else
     	    tx_string("uneffect interrupt\r");

	SYS_LED=!SYS_LED;


}




void wr_byte(uchar byte)
{
	uchar i;
	SCLK=0;
	for(i=8;i!=0;i--)
	{
		SCLK=0;
		if(byte&0x80)
			CDATA=1;
		else
			CDATA=0;
		byte<<=1;
		SCLK=1;
	}
	SCLK=0;
}
void wr1(uchar address,uchar databyte)
{
	CSN=0;
	wr_byte(address);
	_nop_();
	_nop_();
	wr_byte(databyte);
	CSN=1;
}

void wr2(uchar address, uint dataword)
{
    uchar temp;
	CSN=0;
	wr_byte(address);
	temp=dataword;
	dataword>>=8;
	wr_byte(dataword);

	wr_byte(temp);
	CSN=1;
}
 uchar rd_byte(void)  using 3
{
    uchar xdata i;
    uchar xdata j;
    //Replay data send from cmx868 to the UC is valid when the CLOCK is high.
    RDATA=1;
    j=0;
    SCLK=0;
    for(i=0;i<8;i++)
    {
        SCLK=1;
        j=j<<1;
        if(RDATA==1)
        j^=0x01;
        SCLK=0;
    }
    return(j);



}
uchar rd1(uchar address)  using 3
{
    uchar xdata rbyte;
	CSN=0;
	wr_byte(address);
	rbyte=rd_byte();
	CSN=1;
	return(rbyte);
}

uint m_read2(uchar address)   using 3
{
	uint xdata rbyte;
	SCLK=0;
	CSN=0;
	wr_byte(address);
	rbyte=rd_byte();
	rbyte <<= 8;
	rbyte=rbyte+rd_byte();
	CSN=1;
	SCLK=1;
	return(rbyte);
}


void generalreset(void)
{
	CSN=0;
	wr_byte(RESET);
	CSN=1;
}
void initialize_865(void)
{
    uchar xdata tt0,tt1;
    generalreset();

	wr2(GENERALCONTROL,0X13c9);	

	for(tt0=0;tt0<6;tt0++)
	{
	    for(tt1=0;tt1<255;tt1++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
	
    wr2(GENERALCONTROL,POWERUP);
	_nop_();
	wr2(RXMODE,0X0000);
	_nop_();
	wr2(TXMODE,0X5016);
	
}
 
 








   	
	
	

⌨️ 快捷键说明

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