2464|0

9790

帖子

24

TA的资源

版主

楼主
 

【TI首届低功耗设计大赛】焊接完成,第一个程序,LED流水灯 [复制链接]

【TI首届低功耗设计大赛】焊接完成,第一个程序,LED流水灯
为了验证焊接是否成功,我只焊了复位电流和几个LED灯,先是用EXP430G2开发板下载程序,下了很多次都在downloading时提示通信错误,只有一次成功,平时下MSP430G2553都没有问题,怀疑是仿真器版本过低导致,后来换成EXP430FR5969的开发板问题解决了。
跑了一个LED流水灯程序,证明单片机焊接良好。
我焊好的最最小系统板
EXP430FR5969TSTRST的跳线取下,把TST RST引出,再接上VDDGND就可以仿真外边的芯片了。
连接图
小视频
原理图
代码
  1. //******************************************************************************
  2. //  MSP430FR59xx Demo - 流水灯程序,使用PJ.0 PJ.1 PJ.2 PJ.3循环控制单个LED点亮
  3. //
  4. //  Description: Poll P1.4 in a loop, if hi P1.0 is set, if low, P1.0 reset.
  5. //  ACLK = n/a, MCLK = SMCLK = default DCO
  6. //
  7. //              MSP430FR5969
  8. //            -----------------
  9. //        /|\|              XIN|-
  10. //         | |                 |
  11. //         --|RST          XOUT|-
  12. //     /|\   |                 |
  13. //      --o--|P1.4         PJ.0|-->LED1
  14. //     \|/   |             PJ.1|-->LED2
  15. //           |             PJ.2|-->LED3
  16. //           |             PJ.3|-->LED4
  17. //
  18. //   T. Witt
  19. //   Texas Instruments Inc.
  20. //   November 2011
  21. //   Built with IAR Embedded Workbench V5.30 & Code Composer Studio V5.5
  22. //******************************************************************************
  23. #include <msp430.h>
  24. #include <stdint.h>

  25. uint16_t ta_lpm = 0;
  26. /*******************************************************************************
  27. * Function:      timer_init
  28. * Description:   初始化,设置延时的功耗模式
  29. * Calls:         
  30. * Input:         uint16_t lpm 延时进入低功耗,可以是LPM0 LPM1 LPM2,不进低功耗时传0
  31. * Return:        void
  32. ******************************************************************************/
  33. void timer_init(uint16_t lpm)
  34. {
  35.     ta_lpm = lpm;
  36. }
  37. /*******************************************************************************
  38. * Function:      delay_us
  39. * Description:   延时微秒,最长65535us
  40. * Calls:         
  41. * Input:         uint16_t us  延时长度
  42. * Return:        void
  43. ******************************************************************************/
  44. void delay_us(uint16_t us)
  45. {  
  46.     _BIS_SR(GIE);                 // Enter LPM0 w/ interrupt
  47.     TA0CCTL0 = CCIE;                             // CCR0 interrupt enabled
  48.     TA0CCR0 = 1*us;
  49.     TA0CTL = TASSEL_2 + MC_1;                  // SMCLK = 1Mhz, Up to CCR0
  50.     if(ta_lpm)
  51.     {
  52.         __bis_SR_register(ta_lpm + GIE);        // CPU off, interrupts enabled
  53.     }
  54.     else
  55.     {
  56.         while((TA0CTL & TAIFG) == 0);
  57.     }
  58. }
  59. /*******************************************************************************
  60. * Function:      delay_ms
  61. * Description:   毫秒延时 最大5957ms
  62. * Calls:         
  63. * Input:         uint16_t ms  延时长度
  64. * Return:        void
  65. ******************************************************************************/
  66. void delay_ms(uint16_t ms)
  67. {
  68.     if(ms > 5957)while(1);
  69.     _BIS_SR(GIE);                             // Enter LPM0 w/ interrupt
  70.     TA0CCTL0 = CCIE;                             // CCR0 interrupt enabled
  71.     TA0CCR0 = 11*ms;
  72.     TA0CTL = TASSEL_1 + MC_1;                  // ACLK = 11KHz, Up to CCR0  
  73.     if(ta_lpm)
  74.     {
  75.         __bis_SR_register(ta_lpm + GIE);        // CPU off, interrupts enabled
  76.     }
  77.     else
  78.     {
  79.         while((TA0CTL & TAIFG) == 0);
  80.     }
  81. }
  82. /*******************************************************************************
  83. * Function:      delay_s
  84. * Description:   秒延时
  85. * Calls:         
  86. * Input:         uint16_t s   延时长度
  87. * Return:        void
  88. ******************************************************************************/
  89. void delay_s(uint16_t s)
  90. {
  91.     uint16_t i;
  92.     for(i=0;i<s;i++)
  93.     {
  94.         delay_ms(1000);
  95.     }
  96. }
  97. int main(void)
  98. {
  99.   uint8_t i = BIT0;
  100.   WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer
  101.   // Configure GPIO
  102.   PJDIR |= BIT0 | BIT1 | BIT2 | BIT3;                            // Set P1.0 to output direction

  103.   // Disable the GPIO power-on default high-impedance mode to activate
  104.   // previously configured port settings
  105.   PM5CTL0 &= ~LOCKLPM5;
  106.   timer_init(LPM0_bits );                   //初始化定时器,休眠时进入LPM0
  107.   while (1)                                 // Test P1.4
  108.   {
  109.       PJOUT = i;                            //根据i设置PJ的输出
  110.       i <<= 1;                              //左移1位
  111.       if(i > BIT3)                          //如果已经移出BIT3
  112.       {
  113.         i = BIT0;                           //从BIT0开始
  114.       }
  115.       delay_s(1);                           //延时1秒
  116.   }
  117. }

  118. // Timer A0 interrupt service routine
  119. #pragma vector=TIMER0_A0_VECTOR
  120. __interrupt void Timer_A (void)
  121. {
  122.     TA0CTL &= ~(MC_1);
  123.     TA0CCTL0 &= ~(CCIE);
  124.     if(ta_lpm)
  125.     {
  126.         __bic_SR_register_on_exit(ta_lpm);        // Exit LPMx
  127.     }
  128. }
复制代码


 
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表