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

📄 modem.c

📁 单边带调幅对讲机程序 msp430单片机控制 实现无线数据传输
💻 C
字号:

#include "Modem.h"

unsigned char PackData(char UART_TX_BUF[],char Pbuf[],unsigned char nSendLen)
{
   unsigned char n;
   unsigned char nLen;
   UART_TX_BUF[0]=0xff;
   UART_TX_BUF[1]=0x55;
   UART_TX_BUF[2]=0xaa;
    for(n=0;n<nSendLen;n++)
    {
      UART_TX_BUF[n+3]=Pbuf[n];
    }
    UART_TX_BUF[nSendLen+3]='%';
    UART_TX_BUF[nSendLen+4]='%'; 
    nLen = nSendLen+5;
    return nLen;
}

void Tx_Mode(void)
{
  mode1_L;
  RS_L;
}
void Rx_Mode(void)
{
  mode1_H;
  RS_H;  
}

void Send16Bit( unsigned int SendData )
{
  unsigned char i;
  unsigned int SendMiddle; 

  SendMiddle = SendData;
   LE_L ;      
   CLK_L;
  for( i = 0; i < 16; i ++ )
          {
                if ( SendMiddle & 0x8000 )
                     DATA_H ;
                else DATA_L;
                _NOP(); _NOP();    _NOP();     CLK_H;
                _NOP(); _NOP();    _NOP();     CLK_L;
                SendMiddle = SendMiddle << 1;
          }
  LE_H;          _NOP();  _NOP();   _NOP();       LE_L;
}

void Send11Bit( unsigned int SendData )
{
  unsigned char i;
  unsigned int  SendMiddle;
  
  SendMiddle = SendData;
  LE_L;        CLK_L;
  for( i = 0; i < 11; i ++ )
          {
        if( SendMiddle & 0x8000 )
              DATA_H;
        else  DATA_L;
         _NOP(); _NOP();   _NOP();      CLK_H;
         _NOP();  _NOP();    _NOP();    CLK_L;
         SendMiddle = SendMiddle << 1;
        }
}

void Send8Bit( unsigned char SendData )
{
  unsigned char i;
  unsigned char SendMiddle;

  SendMiddle = SendData;
  for( i = 0; i < 8; i ++ )
          {
         if( SendMiddle & 0x80 )
              DATA_H;
         else DATA_L;
         _NOP();  _NOP();  _NOP();      CLK_H;
         _NOP();   _NOP();   _NOP();    CLK_L;
         SendMiddle = SendMiddle << 1;
        }
  LE_H;        _NOP();  _NOP();   _NOP();     LE_L;
}

void SendReferF( void )
{ 
  Send16Bit( 0x8961 );  // 12M Crystal 10K                     
  //Send16Bit( 0x9F41 ); // 4M Crystal
}

void FrequenceToSend( unsigned int FrequenceD )
{
  unsigned char AD = 0;       // i  = 0;
  unsigned int  ND = 0,        MiddleF = 2000;

  if( ( FrequenceD >= 800 ) && ( FrequenceD <= 6000 ) )
   {                   // 限制  锁定频率范围
          MiddleF = FrequenceD;
          ND = ( unsigned int  ) ( MiddleF / 32 );
          AD = ( unsigned char ) ( MiddleF % 32 );
          ND = ND << 5;                AD = AD << 1;        AD = AD & 0xfe;
          Send11Bit( ND );        Send8Bit( AD );
   }
}


void Send16Bit_2( unsigned int SendData )
{
  unsigned char i;
  unsigned int SendMiddle; 

  SendMiddle = SendData;
   LE2_L ;      
   CLK2_L;
  for( i = 0; i < 16; i ++ )
          {
                if ( SendMiddle & 0x8000 )
                     DATA2_H ;
                else DATA2_L;
                _NOP(); _NOP();    _NOP();     CLK2_H ;
                _NOP();   _NOP();   _NOP();    CLK2_L;
                SendMiddle = SendMiddle << 1;
          }
  LE2_H;          _NOP();  _NOP();   _NOP();       LE2_L;
}

void Send11Bit_2( unsigned int SendData )
{
  unsigned char i;
  unsigned int  SendMiddle;
  
  SendMiddle = SendData;
  LE2_L;        CLK2_L;
  for( i = 0; i < 11; i ++ )
          {
        if( SendMiddle & 0x8000 )
              DATA2_H;
        else  DATA2_L;
         _NOP(); _NOP();   _NOP();      CLK2_H;
         _NOP(); _NOP();   _NOP();      CLK2_L;
         SendMiddle = SendMiddle << 1;
        }
}

void Send8Bit_2( unsigned char SendData )
{
  unsigned char i;
  unsigned char SendMiddle;

  SendMiddle = SendData;
  for( i = 0; i < 8; i ++ )
          {
         if( SendMiddle & 0x80 )
             DATA2_H;
         else DATA2_L;
         _NOP();  _NOP();  _NOP();      CLK2_H ;
         _NOP();   _NOP();   _NOP();    CLK2_L;
         SendMiddle = SendMiddle << 1;
        }
  LE2_H;        _NOP();  _NOP();   _NOP();     LE2_L;
}

void SendReferF_2( void )
{ //针对晶体 采用 12M 
 // Send16Bit_2( 0x9F41 ); //4M Crystal 1K
 Send16Bit_2( 0x8961 );  // 12M Crystal 10K
}

void FrequenceToSend_2(unsigned int FrequenceD )
{
  unsigned char AD = 0;       // i  = 0;
  unsigned int  ND = 0,        MiddleF = 2000;

  if( ( FrequenceD >= 800 ) && ( FrequenceD <= 6000 ) )
   {                   // 限制  锁定频率范围
          MiddleF = FrequenceD;
          ND = ( unsigned int  ) ( MiddleF / 32 );
          AD = ( unsigned char ) ( MiddleF % 32 );
          ND = ND << 5;                AD = AD << 1;        AD = AD & 0xfe;
          Send11Bit_2( ND );        Send8Bit_2( AD );
   }
}


void Set_mb1504_1(unsigned int FrequenceD)
{
   SendReferF( );                              //MB1504   送基准数 // 初始化
   FrequenceToSend(FrequenceD);   //MB1504        送30 M 
}

void Set_mb1504_2(unsigned int FrequenceD)
{
   SendReferF_2( );                            //MB1504   送基准数 // 初始化
   FrequenceToSend_2(FrequenceD); //MB1504        送30 M 
}

⌨️ 快捷键说明

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