开发者社区> 文艺小青年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置。

简介:
+关注继续查看

这个例子主要还是熟悉有关定时器A的寄存器配置以及IAR的配置方式。

  1. /*********************************************** 
  2. 程序功能:实现流水灯以三种流动方式和四种流动速度 
  3.           的不同组合而进行点亮"流动" 
  4. ------------------------------------------------ 
  5. 拨码开关设置:将LED位拨至ON,其余拨至OFF 
  6. 测试说明:观察流水灯流动顺序和速度的变化 
  7. ************************************************/  
  8. #include  <msp430x14x.h>  
  9. typedef unsigned int  uint;  
  10. uint i = 0,j = 0,dir = 0;  
  11. uint flag = 0,speed = 0;  //flag--灯光流动方式,speed--灯光流动速度  
  12. /****************主函数****************/  
  13. void main(void)  
  14. {  
  15.     
  16.     /*下面六行程序关闭所有的IO口*/  
  17.     P1DIR = 0XFF;P1OUT = 0XFF;  
  18.     P2DIR = 0XFF;P2OUT = 0XFF;  
  19.     P3DIR = 0XFF;P3OUT = 0XFF;  
  20.     P4DIR = 0XFF;P4OUT = 0XFF;  
  21.     P5DIR = 0XFF;P5OUT = 0XFF;  
  22.     P6DIR = 0XFF;P6OUT = 0XFF;  
  23.     
  24.     WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗  
  25.     P6DIR |= BIT2;P6OUT |= BIT2;    //关闭电平转换  
  26.     P5OUT &= ~BIT7;  
  27.       
  28.     CCTL0 = CCIE;                   //使能CCR0中断  
  29.     CCR0 = 50000;  
  30.     TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式  
  31.     P2DIR = 0xff;                   //设置P2口方向为输出  
  32.     P2OUT = 0xff;  
  33.    
  34.     _EINT();                        //使能全局中断  
  35.     LPM0;                           //CPU进入LPM0模式各时钟全部工作  
  36. }  
  37. /******************************************* 
  38. 函数名称:Timer_A  
  39. 功    能:定时器A的中断服务函数,在这里通过标志 
  40.           控制流水灯的流动方向和流动速度 
  41. 参    数:无 
  42. 返回值  :无 
  43. ********************************************/  
  44. #pragma vector = TIMERA0_VECTOR  
  45. __interrupt void Timer_A (void)  
  46. {    
  47.     if(flag == 0)  
  48.     {  
  49.         P2OUT = ~(0x80>>(i++));    //灯的点亮顺序D8 -> D1  
  50.     }  
  51.     else if(flag == 1)  
  52.     {  
  53.         P2OUT = ~(0x01<<(i++));    //灯的点亮顺序D1 -> D8  
  54.     }  
  55.     else   
  56.     {  
  57.         if(dir)                  //灯的点亮顺序  D8 -> D1,D1 -> D8,循环绕圈                          
  58.         {  
  59.             P2OUT = ~(0x80>>(i++));  
  60.         }  
  61.         else  
  62.         {  
  63.             P2OUT = ~(0x01<<(i++));  
  64.         }  
  65.     }  
  66.     
  67.     if(i == 8)   
  68.     {  
  69.         i = 0;  
  70.         dir = ~dir;  
  71.     }  
  72.     
  73.     j++;  
  74.     if(j == 10)   
  75.     {  
  76.         i = 0;  
  77.         j = 0;  
  78.         flag++;  
  79.         if(flag == 4) flag = 0;  
  80.         switch(speed)//根据speed的值来选择相应的速度,速度的选择主要通过改变分频来实现  
  81.         {  
  82.         case 0:  
  83.             TACTL &=~ (ID0 + ID1);//这个地方其实没必要,意思是清零TACTL的78两位  
  84.             //ID1的值是0x0080   ID2的值是0x0040通过计算就可以得出  
  85.             TACTL |= ID_3;//改为八分频  
  86.             break;  
  87.         case 1:  
  88.             TACTL &=~ (ID0 + ID1);  
  89.             TACTL |= ID_2;  
  90.             break;  
  91.         case 2:  
  92.             TACTL &=~ (ID0 + ID1);  
  93.             TACTL |= ID_1;  
  94.             break;  
  95.         case 3:  
  96.             TACTL &=~ (ID0 + ID1);  
  97.             TACTL |= ID_0;  
  98.             break;  
  99.         default:  
  100.             break;  
  101.         }  
  102.         if(flag != 3)   speed++;  
  103.         if(speed == 4) speed = 0;  
  104.     }   
  105. }  

本文转自emouse博客园博客,原文链接:http://www.cnblogs.com/emouse/archive/2010/07/20/2198224.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程
吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程
38 0
ABAP 标准培训教程 BC400 学习笔记之四:ABAP 编程语言的数据类型
ABAP 标准培训教程 BC400 学习笔记之四:ABAP 编程语言的数据类型
19 0
《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约
通过阐述Solidity编程语言的API以及使用方式,使读者对智能合约编程有一个初步印象
995 0
Bytom Dapp 开发笔记(一):架构设计
简介 研究比原链已经一年了,用比原链做了几个dapp,而且最近还做了一个基于他们插件钱包的dapp,总结了一些遇到的坑,还有一些技术细节,接下来我会分成三章,从dapp设计架构上,到深入到源码分析去帮各位介绍一下比原链的dapp,还有分析比原官方最近发布的dapp的架构。
988 0
Bytom 储蓄分红 DAPP 开发指南
储蓄分红合约指的是项目方发起了一个锁仓计划(即储蓄合约和取现合约),用户可以在准备期自由选择锁仓金额参与该计划,等到锁仓到期之后还可以自动获取锁仓的利润。
773 0
【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
在之前了解 PN 结以及逻辑电路实现之后,终于可以开始尝试实现计算机的加法了。 * 逻辑门,包括与、或、与非、异或 * 半加器,半加器电路 * 全加器,全加器电路 * 波纹进位加法器 ## 逻辑门 #### 与门 AND ![3357762234-59c25c8fa5090_articlex](https://user-images.githubuse
3938 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载