找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6143|回复: 1
收起左侧

MSP430单片机片内12位DA产生正弦波C语言程序

[复制链接]
ID:51337 发表于 2013-7-14 16:16 | 显示全部楼层 |阅读模式
  1. #include  <msp430x16x.h>
  2. //------------------------------------------------------------------------------
  3. // 12-bit Sine Lookup table with 32 steps
  4. //------------------------------------------------------------------------------
  5. static int Sin_tab[32] = { 0x7FF,0xA78,0xCB2,0xE77,0xF9A,0xFFE,0xF9A,0xE77,0xCB2,0xA78,0x7FF,0x586,0x34C,0x187,0x064,0x000
  6. ,0x064,0x187,0x34C,0x586};
  7. static int Cos_tab[32] = { 0xFFE,0xF9A,0xE77,0xCB2,0xA78,0x7FF,0x586,0x34C,0x187,0x064,0x000
  8. ,0x064,0x187,0x34C,0x586,0x7FF,0xA78,0xCB2,0xE77,0xF9A};

  9. void main(void)
  10. {
  11.   volatile unsigned int i;
  12.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  13.    //==========================选择高频振荡器=======================================
  14.   BCSCTL1 &= ~XT2OFF;                       // XT2= HF XTAL
  15.    do
  16.   {
  17.   IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  18.   for (i = 0xFF; i > 0; i--);               // Time for flag to set
  19.   }
  20.   while ((IFG1 & OFIFG)); //查看8M的震荡是否稳定  // OSCFault flag still set?
  21.   BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择XT2// MCLK= SMCLK= XT2 (safe)
  22.   //================================================================================
  23.   ADC12CTL0 = REF2_5V + REFON;//内部基准电压      // Internal 2.5V ref
  24.   //================================================================================
  25.   DMACTL0 = DMA0TSEL_5 + DMA1TSEL_5;        // DAC12IFG trigger触发器
  26.   DMA0SA = (int) Sin_tab;//首地址           // Source block address
  27.   DMA0DA = (int)&DAC12_0DAT; //目的地址     // Destination single address
  28.   DMA0SZ = 0x14;       //长度               // Block size
  29.   DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt, inc src, word-word

  30.   DMA1SA = (int) Cos_tab;  //首地址          // Source block address
  31.   DMA1DA = (int)&DAC12_1DAT; //目的地址      // Destination single address
  32.   DMA1SZ = 0x14;       //长度                // Block size
  33.   DMA1CTL = DMADT_4 + DMASRCINCR_3 + DMAEN;  // Rpt, inc src, word-word

  34.   DAC12_0CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_5 + DAC12IFG + DAC12ENC + DAC12GRP;
  35.   DAC12_1CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_5 + DAC12IFG + DAC12ENC;

  36.   CCTL1 = OUTMOD_3;//置位复位模式           // CCR1 set/reset
  37.   CCR1 = 1;    //设置占空比                 // CCR1 PWM Duty Cycle
  38.   CCR0 = 1; //设置周期                     // Clock period of CCR0
  39.   TACTL = TASSEL_2 + MC_1; //定时器A的时钟源为SMCLK=8M,增计数模式 // SMCLK, upmode

  40.   _BIS_SR(CPUOFF);                          // CPU off
  41. }
复制代码
回复

使用道具 举报

ID:53173 发表于 2013-8-17 22:00 | 显示全部楼层
这个从哪个管脚输出正弦波
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表