找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MSP430F149程序模板

[复制链接]
跳转到指定楼层
楼主
可以用,电赛就是用这个东西写了好多程序

单片机源程序如下:
  1. /*****************************************************************************\
  2. 文件名:main.c
  3. 描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。
  4.       不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。
  5.       保留中断函数,编译器将会为BSL密码填充所有的字节。
  6. 版本:1.0        2005-1-13
  7. \*****************************************************************************/

  8. //头文件
  9. #include <MSP430x14x.h>

  10. //函数声明
  11. void InitSys();


  12. int main( void )
  13. {

  14.   WDTCTL = WDTPW + WDTHOLD;                     //关闭看门狗

  15.   InitSys();                                        //初始化

  16. start:
  17.   //以下填充用户代码


  18.         LPM3;                        //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句
  19.         goto start;

  20. }

  21. /*****************************************************************************
  22. 系统初始化
  23. ******************************************************************************/
  24. void InitSys()
  25. {
  26.    unsigned int iq0;

  27.         //使用XT2振荡器
  28.    BCSCTL1&=~XT2OFF;                                             //打开XT2振荡器
  29.    do
  30.    {
  31.                  IFG1 &= ~OFIFG;                                        // 清除振荡器失效标志
  32.                  for (iq0 = 0xFF; iq0 > 0; iq0--);                // 延时,等待XT2起振
  33.          }
  34.          while ((IFG1 & OFIFG) != 0);                                // 判断XT2是否起振

  35.          BCSCTL2 =SELM_2+SELS;                                        //选择MCLK、SMCLK为XT2

  36.         //以下填充用户代码,对各种模块、中断、外围设备等进行初始化

  37.    _EINT();        //打开全局中断控制,若不需要打开,可以屏蔽本句
  38. }

  39. /*****************************************************************************
  40. 端口2中断函数
  41. ******************************************************************************/
  42. #pragma vector=PORT2_VECTOR
  43. __interrupt void Port2()
  44. {
  45.         //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
  46.         if((P2IFG&BIT0) == BIT0)
  47.         {
  48.                 //处理P2IN.0中断
  49.                 P2IFG &= ~BIT0; //清除中断标志
  50.                 //以下填充用户代码

  51.         }
  52.         else if((P2IFG&BIT1) ==BIT1)
  53.         {
  54.                 //处理P2IN.1中断
  55.                 P2IFG &= ~BIT1;        //清除中断标志
  56.                 //以下填充用户代码

  57.         }
  58.         else if((P2IFG&BIT2) ==BIT2)
  59.         {
  60.                 //处理P2IN.2中断
  61.                 P2IFG &= ~BIT2;        //清除中断标志
  62.                 //以下填充用户代码

  63.         }
  64.         else if((P2IFG&BIT3) ==BIT3)
  65.         {
  66.                 //处理P2IN.3中断
  67.                 P2IFG &= ~BIT3;        //清除中断标志
  68.                 //以下填充用户代码

  69.         }
  70.         else if((P2IFG&BIT4) ==BIT4)
  71.         {
  72.                 //处理P2IN.4中断
  73.                 P2IFG &= ~BIT4;        //清除中断标志
  74.                 //以下填充用户代码

  75.         }
  76.         else if((P2IFG&BIT5) ==BIT5)
  77.         {
  78.                 //处理P2IN.5中断
  79.                 P2IFG &= ~BIT5;        //清除中断标志
  80.                 //以下填充用户代码

  81.         }
  82.         else if((P2IFG&BIT6) ==BIT6)
  83.         {
  84.                 //处理P2IN.6中断
  85.                 P2IFG &= ~BIT6;        //清除中断标志
  86.                 //以下填充用户代码

  87.         }
  88.         else
  89.         {
  90.                 //处理P2IN.7中断
  91.                 P2IFG &= ~BIT7;        //清除中断标志
  92.                 //以下填充用户代码

  93.         }

  94.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  95. }

  96. /*****************************************************************************
  97. USART1发送中断函数
  98. ******************************************************************************/
  99. #pragma vector=USART1TX_VECTOR
  100. __interrupt void Usart1Tx()
  101. {
  102.         //以下填充用户代码


  103.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  104. }

  105. /*****************************************************************************
  106. USART1接收中断函数
  107. ******************************************************************************/
  108. #pragma vector=USART1RX_VECTOR
  109. __interrupt void Ustra1Rx()
  110. {
  111.         //以下填充用户代码


  112.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  113. }

  114. /*****************************************************************************
  115. 端口1中断函数
  116. 多中断中断源:P1IFG.0~P1IFG7
  117. 进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断
  118. ******************************************************************************/
  119. #pragma vector=PORT1_VECTOR
  120. __interrupt void Port1()
  121. {
  122.         //以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
  123.         if((P1IFG&BIT0) == BIT0)
  124.         {
  125.                 //处理P1IN.0中断
  126.                 P1IFG &= ~BIT0;        //清除中断标志
  127.                 //以下填充用户代码

  128.         }
  129.         else if((P1IFG&BIT1) ==BIT1)
  130.         {
  131.                 //处理P1IN.1中断
  132.                 P1IFG &= ~BIT1;        //清除中断标志
  133.                 //以下填充用户代码

  134.         }
  135.         else if((P1IFG&BIT2) ==BIT2)
  136.         {
  137.                 //处理P1IN.2中断
  138.                 P1IFG &= ~BIT2;        //清除中断标志
  139.                 //以下填充用户代码

  140.         }
  141.         else if((P1IFG&BIT3) ==BIT3)
  142.         {
  143.                 //处理P1IN.3中断
  144.                 P1IFG &= ~BIT3;        //清除中断标志
  145.                 //以下填充用户代码

  146.         }
  147.         else if((P1IFG&BIT4) ==BIT4)
  148.         {
  149.                 //处理P1IN.4中断
  150.                 P1IFG &= ~BIT4;        //清除中断标志
  151.                 //以下填充用户代码

  152.         }
  153.         else if((P1IFG&BIT5) ==BIT5)
  154.         {
  155.                 //处理P1IN.5中断
  156.                 P1IFG &= ~BIT5;        //清除中断标志
  157.                 //以下填充用户代码

  158.         }
  159.         else if((P1IFG&BIT6) ==BIT6)
  160.         {
  161.                 //处理P1IN.6中断
  162.                 P1IFG &= ~BIT6;        //清除中断标志
  163.                 //以下填充用户代码

  164.         }
  165.         else
  166.         {
  167.                 //处理P1IN.7中断
  168.                 P1IFG &= ~BIT7;        //清除中断标志
  169.                 //以下填充用户代码

  170.         }

  171.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  172. }

  173. /*****************************************************************************
  174. 定时器A中断函数
  175. 多中断中断源:CC1~2 TA
  176. ******************************************************************************/
  177. #pragma vector=TIMERA1_VECTOR
  178. __interrupt void TimerA1()
  179. {
  180.         //以下为参考处理程序,不使用的中断源应当删除
  181.         switch (__even_in_range(TAIV, 10))
  182.         {
  183.                 case 2:
  184.                         //捕获/比较1中断
  185.                         //以下填充用户代码

  186.                 break;
  187.                 case 4:
  188.                         //捕获/比较2中断
  189.                         //以下填充用户代码

  190.                 break;
  191.                 case 10:
  192.                         //TAIFG定时器溢出中断
  193.                         //以下填充用户代码

  194.                 break;
  195.         }


  196.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  197. }

  198. /*****************************************************************************
  199. 定时器A中断函数
  200. 中断源:CC0
  201. ******************************************************************************/
  202. #pragma vector=TIMERA0_VECTOR
  203. __interrupt void TimerA0()
  204. {
  205.         //以下填充用户代码


  206.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  207. }

  208. /*****************************************************************************
  209. AD转换器中断函数
  210. 多中断源:摸拟0~7、VeREF+、VREF-/VeREF-、(AVcc-AVss)/2
  211. 没有处理ADC12TOV和ADC12OV中断标志
  212. ******************************************************************************/
  213. #pragma vector=ADC_VECTOR
  214. __interrupt void Adc()
  215. {
  216.         //以下为参考处理程序,不使用的中断源应当删除
  217.         if((ADC12IFG&BIT0)==BIT0)
  218.         {
  219.                 //通道0
  220.                 //以下填充用户代码

  221.         }
  222.         else if((ADC12IFG&BIT1)==BIT1)
  223.         {
  224.                 //通道1
  225.                 //以下填充用户代码

  226.         }
  227.         else if((ADC12IFG&BIT2)==BIT2)
  228.         {
  229.                 //通道2
  230.                 //以下填充用户代码

  231.         }
  232.         else if((ADC12IFG&BIT3)==BIT3)
  233.         {
  234.                 //通道3
  235.                 //以下填充用户代码

  236.         }
  237.         else if((ADC12IFG&BIT4)==BIT4)
  238.         {
  239.                 //通道4
  240.                 //以下填充用户代码

  241.         }
  242.         else if((ADC12IFG&BIT5)==BIT5)
  243.         {
  244.                 //通道5
  245.                 //以下填充用户代码

  246.         }
  247.         else if((ADC12IFG&BIT6)==BIT6)
  248.         {
  249.                 //通道6
  250.                 //以下填充用户代码

  251.         }
  252.         else if((ADC12IFG&BIT7)==BIT7)
  253.         {
  254.                 //通道7
  255.                 //以下填充用户代码

  256.         }
  257.         else if((ADC12IFG&BIT8)==BIT8)
  258.         {
  259.                 //VeREF+
  260.                 //以下填充用户代码

  261.         }
  262.         else if((ADC12IFG&BIT9)==BIT9)
  263.         {
  264.                 //VREF-/VeREF-
  265.                 //以下填充用户代码

  266.         }
  267.         else if((ADC12IFG&BITA)==BITA)
  268.         {
  269.                 //温度
  270.                 //以下填充用户代码

  271.         }
  272.         else if((ADC12IFG&BITB)==BITB)
  273.         {
  274.                 //(AVcc-AVss)/2
  275.                 //以下填充用户代码

  276.         }

  277.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  278. }

  279. /*****************************************************************************
  280. USART0发送中断函数
  281. ******************************************************************************/
  282. #pragma vector=USART0TX_VECTOR
  283. __interrupt void Usart0Tx()
  284. {
  285.         //以下填充用户代码


  286.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  287. }

  288. /*****************************************************************************
  289. USART0接收中断函数
  290. ******************************************************************************/
  291. #pragma vector=USART0RX_VECTOR
  292. __interrupt void Usart0Rx()
  293. {
  294.         //以下填充用户代码


  295.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  296. }

  297. /*****************************************************************************
  298. 看门狗定时器中断函数
  299. ******************************************************************************/
  300. #pragma vector=WDT_VECTOR
  301. __interrupt void WatchDog()
  302. {
  303.         //以下填充用户代码


  304.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  305. }

  306. /*****************************************************************************
  307. 比较器A中断函数
  308. ******************************************************************************/
  309. #pragma vector=COMPARATORA_VECTOR
  310. __interrupt void ComparatorA()
  311. {
  312.         //以下填充用户代码


  313.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  314. }

  315. /*****************************************************************************
  316. 定时器B中断函数
  317. 多中断源:CC1~6 TB
  318. ******************************************************************************/
  319. #pragma vector=TIMERB1_VECTOR
  320. __interrupt void TimerB1()
  321. {
  322.         //以下为参考处理程序,不使用的中断源应当删除
  323.         switch (__even_in_range(TBIV, 14))
  324.         {
  325.                 case 2:
  326.                         //捕获/比较1中断
  327.                         //以下填充用户代码

  328.                 break;
  329.                 case 4:
  330.                         //捕获/比较2中断
  331.                         //以下填充用户代码

  332.                 break;
  333.                 case 6:
  334.                         //捕获/比较3中断
  335.                         //以下填充用户代码

  336.                 break;
  337.                 case 8:
  338.                         //捕获/比较4中断
  339.                         //以下填充用户代码

  340.                 break;
  341.                 case 10:
  342.                         //捕获/比较5中断
  343.                         //以下填充用户代码

  344.                 break;
  345.                 case 12:
  346.                         //捕获/比较6中断
  347.                         //以下填充用户代码

  348.                 break;
  349.                 case 14:
  350.                         //TBIFG定时器溢出中断
  351.                         //以下填充用户代码

  352.                 break;
  353.         }

  354.         LPM3_EXIT;        //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
  355. }

  356. /*****************************************************************************
  357. 定时器B中断函数
  358. ……………………

  359. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei附件下载:
MSP430框架程序.zip (130.77 KB, 下载次数: 22)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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