找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2593|回复: 0
打印 上一主题 下一主题
收起左侧

任意声音延迟程序 msp430单片机工程

[复制链接]
跳转到指定楼层
楼主
可用于声音信号的任意时间延迟,msp430单片机做的


下载:
复件 program.rar (320.76 KB, 下载次数: 13)



主程序预览:
  1. #include "VoiceHeader.h"
  2. #include "msp430f2274.h"
  3. #include "math.h"
  4. //=============================================================================
  5. // 程序初始化
  6. //=============================================================================
  7. void delay_us(unsigned int us)
  8. {
  9.   while(us--);
  10. }
  11. void delay_ms (unsigned int ms)
  12. {
  13.   unsigned int i;
  14.   for(i=0;i<ms;i++)
  15.   delay_us(500);
  16. }

  17. void InitTimeA(void)
  18. {
  19.   TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
  20.   TACCR0 = 50000;
  21.   TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode
  22. }
  23. void InitWDT(void)
  24. {
  25.   WDTCTL = WDT_MDLY_32;    // 4ms  mclk=8M
  26.   IE1 |= WDTIE;            // Enable WDT interrupt
  27.   return;
  28. }

  29. void Init_CLK(void)
  30. {
  31.   DCOCTL = 0x68;
  32.   BCSCTL1 = XTS +XT2OFF +DIVA_0 +RSEL3 +RSEL2 +RSEL1 +RSEL0; //
  33.   BCSCTL2 = DIVS_0 +DIVM_0 + SELM_0 + DIVS_3;    // SMCLK = MCLK
  34.   //BCSCTL2 = DIVS_0 +DIVM_0 + SELM_0;
  35.   BCSCTL3 = XT2S_2 + LFXT1S_0;

  36.      /*
  37.   BCSCTL1 = XTS +DIVA_0;
  38.   BCSCTL2 = DIVS_0 +DIVM_0 + SELM_2 +SELS;    // SMCLK = MCLK
  39.   BCSCTL3 = XT2S_2 + LFXT1S_2 +XCAP_3;   //
  40.    */
  41.   
  42.   P1SEL |= BIT4;
  43.   P1DIR |= BIT4;
  44.   return ;
  45. }

  46. void InitADC(void)
  47. {
  48.   ADC10CTL1 = INCH_1 + ADC10DIV_7 + ADC10SSEL_3 + CONSEQ_1; // SMCLK
  49.   ADC10CTL0 = SREF_1 + ADC10SHT_0 + MSC + REF2_5V + REFON + ADC10ON+ ADC10IE;
  50.   ADC10AE0 |= BIT0 + BIT1;                  // P2.0/P2.1 ADC option select
  51. // ADC10DTC0 |= ADC10CT;           // Continous two block transfers  ADC10TB +
  52.   ADC10DTC1 = 0x02;                         // 2 conversion locations
  53.   ADC10SA = 0x0200;                         // Data buffer start
  54.   ADC10CTL0 |= ENC + ADC10SC;               // Start sampling continously
  55. }

  56. void main(void)
  57. {
  58.   _DINT();
  59.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  60.   Init_CLK();
  61.   InitADC();
  62. // InitTimeA();
  63.   OutLED;
  64.   WriteHighLED;
  65.   
  66.   OutAD7397D0_D7;
  67.   OutAD7397D8_D9;
  68.   OutAD7397_RS;
  69.   WriteHighAD7397_RS;
  70.   OutAD7397_CS;
  71.   WriteHighAD7397_CS;
  72.   OutAD7397_LDA;
  73.   WriteHighAD7397_LDA;
  74.   OutAD7397_AB;
  75.   OutAD7397_LDB;
  76.   WriteHighAD7397_LDB;
  77.   
  78. //  delay_ms(1000);
  79. //  WriteLowLED;
  80.   _EINT();
  81.   
  82.   pA = 200;
  83.   pB = 0;
  84.   
  85.   DataA = (unsigned int *)0x0200;              // Initialize
  86.   DataB = (unsigned int *)0x0202;              // Initialize
  87.   
  88.   
  89.   while(1)
  90.   {
  91.   
  92.   }
  93. }

  94. /*
  95. ******************************************************************************
  96. *中断程序处理
  97. ******************************************************************************
  98. */
  99. #pragma vector = PORT1_VECTOR       /* 0xFFE4 Port 1 */
  100. __interrupt void PORT1_sever(void)
  101. {
  102. }
  103. #pragma vector = PORT2_VECTOR       /* 0xFFE6 Port 2 */
  104. __interrupt void PORT2_sever(void)
  105. {
  106. }
  107. #pragma vector = ADC10_VECTOR       /* 0xFFEA ADC10 */
  108. __interrupt void ADC10_sever(void)
  109. {  
  110.   
  111.   ADC10CTL0 &= ~(ENC + ADC10SC);               // Start sampling continously
  112.   //================================================
  113.   
  114.   pA ++;
  115.   pB ++;
  116.   
  117.   if(pA >= 400) pA = 0;
  118.   if(pB >= 400) pB = 0;
  119.   
  120.   data[pA] = *DataB;
  121.   
  122.   
  123.   
  124.   
  125.   WriteHighLED;
  126.   WriteLowLED;
  127.   //================================================
  128.   // A 1
  129.   WriteHighAD7397_AB;
  130.   WriteLowAD7397_LDA;
  131.   DD = data[pB];
  132.   WriteAD7397D0_D7 = (unsigned char)DD;
  133.   DD = DD >> 8;
  134.   WriteAD7397D8_D9 &= ~(BIT0 + BIT1);
  135.   WriteAD7397D8_D9 |= DD;
  136.   WriteLowAD7397_CS;
  137.   WriteHighAD7397_CS;
  138.   
  139.   // B 2
  140.   WriteLowAD7397_AB;
  141.   WriteLowAD7397_LDB;
  142.   DD = data[pB];
  143.   WriteAD7397D0_D7 = (unsigned char)DD;
  144.   DD = DD >> 8;
  145.   WriteAD7397D8_D9 &= ~(BIT0 + BIT1);
  146.   WriteAD7397D8_D9 |= DD;
  147.   WriteLowAD7397_CS;
  148.   WriteHighAD7397_CS;
  149.   //=======================================================
  150.   ADC10SA = 0x0200;                         // Data buffer start
  151.   ADC10CTL0 |= ENC + ADC10SC;               // Start sampling continously
  152. }
  153. #pragma vector = USCIAB0TX_VECTOR   /* 0xFFEC USCI A0/B0 Transmit */
  154. __interrupt void USCIAB0TX_sever(void)
  155. {
  156. }
  157. #pragma vector = USCIAB0RX_VECTOR   /* 0xFFEE USCI A0/B0 Receive */
  158. __interrupt void USCIAB0RX_sever(void)
  159. {
  160. }
  161. #pragma vector = TIMERA1_VECTOR     /* 0xFFF0 Timer A CC1-2, TA */
  162. __interrupt void TIMERA1_sever(void)
  163. {
  164. }
  165. #pragma vector = TIMERA0_VECTOR     /* 0xFFF2 Timer A CC0 */
  166. __interrupt void TIMERA0_sever(void)
  167. {
  168. }
  169. #pragma vector = WDT_VECTOR         /* 0xFFF4 Watchdog Timer */
  170. __interrupt void WDT_sever(void)
  171. {  
  172. }
  173. #pragma vector = TIMERB1_VECTOR     /* 0xFFF8 Timer B CC1-2, TB */
  174. __interrupt void TIMERB1_sever(void)
  175. {
  176. }
  177. #pragma vector = TIMERB0_VECTOR     /* 0xFFFA Timer B CC0 */
  178. __interrupt void TIMERB0_sever(void)
  179. {
  180. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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