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

📄 main.c

📁 运用MSP430驱动锁相环MB1504的程序
💻 C
字号:
#include "msp430x24x.h"


#define LE_H        P5OUT|=BIT2 	//  	 LE--P52
#define LE_L        P5OUT&=~BIT2
#define DATA_H      P5OUT|=BIT1	       //       DATA--P51
#define DATA_L      P5OUT&=~BIT1	
#define CLK_H       P5OUT|=BIT0        // 	 CLK--P50
#define CLK_L       P5OUT&=~BIT0


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 )
{ //针对晶体 采用 12M 
  Send16Bit( 0x9F41 ); // 12M Crystal
}

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

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

void main( void )  
{
  WDTCTL = WDTPW + WDTHOLD;          // Stop WDT
   BCSCTL1 &= ~XT2OFF;               // XT2on
   BCSCTL2 |= SELM_2 + SELS;
   P5DIR=0XFF;
   SendReferF( );                  ////MB1504   送基准数 // 初始化
   FrequenceToSend( 48000 );       ////MB1504        送30 M 
while( 1 )
 { ;}
}

⌨️ 快捷键说明

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