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

📄 tlv5620.c

📁 Msp430的c语言程序集
💻 C
字号:
/*******************************************************
                    
                  TLV5620正弦波产生实验
       
           网址:http://www.wejay.com.cn
      在TLV5620的DACA端输出正弦波

*******************************************************/
#include "msp430x14x.h"
#define  uint unsigned int
#define  uchar unsigned char
#define CS_HIGH P5OUT|=BIT0;
#define CS_LOW P5OUT&=~BIT0;
#define CLK_HIGH P5OUT|=BIT3;
#define CLK_LOW P5OUT&=~BIT3;
#define DATA_HIGH P5OUT|=BIT1;
#define DATA_LOW P5OUT&=~BIT1;
uint DataNum=0;
//正弦波数据
const char SinData[360]={
		128,130,132,134,136,139,141,143,145,148,
		150,152,154,156,158,161,163,165,167,169,
		171,173,175,178,180,182,184,186,188,190,
		192,193,195,197,199,201,203,205,206,208,
		210,211,213,215,216,218,220,221,223,224,
		226,227,228,230,231,232,234,235,236,237,
		238,239,241,242,243,244,244,245,246,247,
		248,249,249,250,251,251,252,252,253,253,
		254,254,254,255,255,255,255,255,255,255,
		255,255,255,255,255,255,255,255,254,254,
		254,253,253,252,252,251,251,250,249,249,
		248,247,246,245,244,244,243,242,241,239,
		238,237,236,235,234,232,231,230,228,227,
		226,224,223,221,220,218,216,215,213,211,
		210,208,206,205,203,201,199,197,195,193,
		191,190,188,186,184,182,180,178,175,173,
		171,169,167,165,163,161,158,156,154,152,
		150,148,145,143,141,139,136,134,132,130,
		127,125,123,121,119,116,114,112,110,107,
		105,103,101,99,97,94,92,90,88,86,
		84,82,80,77,75,73,71,69,67,65,
		63,62,60,58,56,54,52,50,49,47,
		45,44,42,40,39,37,35,34,32,31,
		29,28,27,25,24,23,21,20,19,18,
		17,16,14,13,12,11,11,10,9,8,
		7,6,6,5,4,4,3,3,2,2,
		1,1,1,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,1,1,
		1,2,2,3,3,4,4,5,6,6,
		7,8,9,10,11,11,12,13,14,16,
		17,18,19,20,21,23,24,25,27,28,
		29,31,32,34,35,37,39,40,42,44,
		45,47,49,50,52,54,56,58,60,62,
		64,65,67,69,71,73,75,77,80,82,
		84,86,88,90,92,94,97,99,101,103,
		105,107,110,112,114,116,119,121,123,125};
//时钟初始化函数
void InitClock(void){
  BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2开启 LFXT1工作在低频模式 ACLK不分频 最高的标称频率
  DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
  do{
    IFG1&=~OFIFG;//清除振荡器失效标志
    for(uint i=255;i>0;i--);
  }while(IFG1&OFIFG);//判断XT2是否起振
  BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
}
//端口初始化函数
void InitPort(void){
  P5SEL=0x00;//设置为一般的IO口
  P5DIR=BIT3+BIT1+BIT0;//P5.0 P5.1 P5.3设置为输出方向
  CS_HIGH;//使TLV5620不被选通
}
//延时子函数
void Delay(void){
  for(uint i=800;i>0;i--);
}
//DA转换程序
void DAConvert(uchar Data,uchar Command){
  Command<<=5;
  for(uchar i=0;i<3;i++){
    if(Command&0x80){ 
      DATA_HIGH;
    }else{
      DATA_LOW;
    }
    CLK_HIGH;
    Command<<=1;
    CLK_LOW;
  }
  for(uchar i=0;i<8;i++){
    if(Data&0x80){ 
      DATA_HIGH;
    }else{
      DATA_LOW;
    }
    CLK_HIGH;
    Data<<=1;
    CLK_LOW;
  }
  CS_LOW;
  Delay();
  CS_HIGH;
}
//定时器A初始化
void InitTimerA(void){
  TACTL=TASSEL1+ID1+ID0+MC0+TACLR;//选择1/8SMCLK 增计数 清除TAR
  CCTL0=CCIE;//CCR0中断允许 比较模式
  CCR0=10;//时间间隔10us
}
//定时器A中断
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerAINT(void){
  DAConvert(SinData[DataNum],0x00);
  DataNum++;
  if(DataNum==360) DataNum=0;
}
void main(){
  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  InitClock();
  InitPort();
  InitTimerA();
  _EINT();//打开中断
  while(1);
}

⌨️ 快捷键说明

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