📄 main.c
字号:
#include"msp430x14x.h"
#define DDS_CONTROL P4OUT
#define S_SDIO BIT7//控制字值 p4.7
#define S_WCLK BIT6//控制字时钟p4.6
#define S_RESET BIT4//Sin复位高有效p4.4
#define C_SDIO BIT3 //p4.3
#define C_WCLK BIT2//p4.2
#define FQ_UP BIT1//p4.1寄存器写入,信号上升沿写入(与sin的FQ_UP相接)
#define C_RESET BIT0//Cos复位信号高有效
#define CLK_EN BIT0//门控时钟控制晶振开启p5.0
unsigned char Cos_W_buffer[5],Sin_W_buffer[5];
int aaa=0,count=0;
void set_Sfrequency(unsigned char *p,unsigned char *q);
void DDSInit();
void InitSys();
void ClkInit();
void UartInit();
void delay(int n);
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
unsigned char i;
InitSys();
P5OUT=0x05;
Cos_W_buffer[0]=0x00;
Cos_W_buffer[1]=0x00;
Cos_W_buffer[2]=0x00;
Cos_W_buffer[3]=0x00;
Cos_W_buffer[4]=0x00;
// Cos_W_buffer[4]&=0x40;//cos
Sin_W_buffer[0]=0x00;
Sin_W_buffer[1]=0x00;
Sin_W_buffer[2]=0x00;
Sin_W_buffer[3]=0x00;
Sin_W_buffer[4]=0x00;
// Sin_W_buffer[4]&=0x00;//sin
for(i=0;i<2;i++)
// { set_Sfrequency(Sin_W_buffer,Cos_W_buffer);}
Sin_W_buffer[0]=0xff;
Sin_W_buffer[1]=0xff;
Sin_W_buffer[2]=0x76;
Sin_W_buffer[3]=0x00;
Sin_W_buffer[4]=0x40;
Sin_W_buffer[4]&=0x00;//sin
Cos_W_buffer[0]=0xff;
Cos_W_buffer[1]=0xff;
Cos_W_buffer[2]=0x76;
Cos_W_buffer[3]=0x00;
Cos_W_buffer[4]=0x00;
Cos_W_buffer[4]&=0x40;//cos
// set_Sfrequency(Sin_W_buffer,Cos_W_buffer);
while(1)
{
}
}
void InitSys()
{
P4DIR|=0XFF;
P5DIR|=0XFF;
ClkInit();
DDSInit();
UartInit();
_EINT(); //开全局中断
}
void DDSInit()
{
unsigned char i;
P5OUT|=CLK_EN;//开启晶振
DDS_CONTROL|=S_RESET+C_RESET; //复位DDS
for(i=0;i<0x0f;i++);
DDS_CONTROL&=~(S_RESET+C_RESET);
DDS_CONTROL&=~(S_WCLK+C_WCLK);
DDS_CONTROL&=~FQ_UP;
delay(5);
DDS_CONTROL|=S_WCLK+C_WCLK;
delay(5);
DDS_CONTROL&=~(S_WCLK+C_WCLK);
delay(5);
DDS_CONTROL|=FQ_UP;
delay(5);
DDS_CONTROL&=~FQ_UP;
}
void ClkInit()
{
unsigned int iq0;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS;//MCLK与SMCLK都为XT2(8M)
}
void delay(int n)
{
int j,k=0;
for(j=0;j<n;j++)
{
for(k=0;k<n;k++);
}
}
#define USART_DIR P3DIR
#define USART_SEL P3SEL
#define USART_IN P3IN
#define USART_OUT P3OUT
#define UTXD0 BIT4
#define URXD0 BIT5
#define UTXD1 BIT6
#define URXD1 BIT7
void UartInit()
{
USART_SEL |= UTXD0 +URXD0;
UCTL0 = CHAR+SWRST;//8位数据,1位停止位,SWRST=1开始设置串口
UTCTL0 = SSEL1; //选择UCLK = SMCLK=8M
UBR00 =0x41; //9600波特率
UBR10=0x03;
UMCTL0=0x00;
UCTL0 &= ~SWRST; //SWRST=0结束设置串口
ME1 |= UTXE0 + URXE0; //打开模块USART0
IE1 |= URXIE0 ; //打开USART0接收中断
}
void set_Sfrequency(unsigned char *p,unsigned char *q)
{
unsigned char cnts=0,indexs=0x01,is,js;
unsigned char cntc=0,indexc=0x01,ic,jc;
// DDS_CONTROL&=~S_WCLK; // M_SCLK=0;
//DDS_CONTROL&=~C_WCLK; // M_SCLK=0;
DDS_CONTROL&=~(S_WCLK+C_WCLK);
DDS_CONTROL&=~FQ_UP; // FQ_UP=0
for( js=0;js<5;js++)
{
for( is=0;is<8;is++)
{
if((p[cnts]&indexs)==0)
DDS_CONTROL&=~S_SDIO;// M_SDIO=0;
else
DDS_CONTROL|=S_SDIO;// M_SDIO=1;
delay(5);
DDS_CONTROL|= S_WCLK;// M_SCLK=1;
DDS_CONTROL&=~S_WCLK; // M_SCLK=0;
indexs<<=1;
}
cnts++;
indexs=0x01;
}
for( jc=0;jc<5;jc++)
{
for( ic=0;ic<8;ic++)
{
if((q[cntc]&indexc)==0)
DDS_CONTROL&=~C_SDIO;// M_SDIO=0;
else
DDS_CONTROL|=C_SDIO;// M_SDIO=1;
delay(5);
DDS_CONTROL|= C_WCLK;// M_SCLK=1;
DDS_CONTROL&=~C_WCLK; // M_SCLK=0;
indexc<<=1;
}
cntc++;
indexc=0x01;
}
DDS_CONTROL|= FQ_UP ;// FQ_UP = 1;
delay(15);
DDS_CONTROL&=~(S_WCLK+C_WCLK);
DDS_CONTROL&=~FQ_UP ;// FQ_UP = 0;
}
#pragma vector=UART0RX_VECTOR
__interrupt void receive_0(void)
{
static unsigned char rbuffer1,rbuffer2;
/* if(count==1)
{
Cos_W_buffer[2]=RXBUF0;
Sin_W_buffer[2]=RXBUF0;
count=0;
}
rbuffer2=RXBUF0;
if( rbuffer2==0xff)
{
aaa=0xff;
count=1;
}
else
{*/
rbuffer1=RXBUF0;
count++;
// rbuffer1|=BIT0;
// P5OUT= rbuffer1;
if(count==1)
{
rbuffer1|=BIT0;
P5OUT= rbuffer1;
}
if(count==2)
{
Cos_W_buffer[2]=rbuffer1;
Sin_W_buffer[2]=rbuffer1;
}
if(count==3)
{
Sin_W_buffer[4]=rbuffer1;
//rbuffer1|=40;
//Cos_W_buffer[4]=rbuffer1;
//count=0;
}
if(count==4)
{
Cos_W_buffer[4]=rbuffer1;
count=0;
}
set_Sfrequency(Sin_W_buffer,Cos_W_buffer);
TXBUF0=RXBUF0;
// TXBUF0=count;
while((UTCTL0&0x01)==0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -