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,如需转载请自行联系原作者
相关文章
|
存储 监控 C语言
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
在西门子S7-1200中有四种类型的定时器:TON接通延迟定时器、TONR保持型接通延迟定时器、TOF关断延迟定时器、TP脉冲定时器。
西门子S7-1200编程实例,关断延迟定时器指令如何使用?
|
1月前
|
API
FreeRTOS软件定时器的原理以及使用实例
FreeRTOS软件定时器的原理以及使用实例
20 0
|
4月前
|
数据采集 API 数据处理
FreeRTOS入门教程(软件定时器)
FreeRTOS入门教程(软件定时器)
54 0
嵌入式开发学习之--系统定时器
嵌入式开发学习之--系统定时器
嵌入式开发学习之--系统定时器
|
存储 监控
西门子S7-1200编程实例,脉冲定时器指令如何使用?
在西门子S7-1200中有四种类型的定时器:接通延迟定时器TON、保持型接通延迟定时器TONR、关断延迟定时器TOF、脉冲定时器TP。
西门子S7-1200编程实例,脉冲定时器指令如何使用?
|
监控 C语言 Perl
西门子S7-1200编程实例,置位/复位指令如何使用?
本节我们来学习置位/复位指令,并通过一个电机起保停控制的实例来学习置位/复位指令如何使用。
西门子S7-1200编程实例,置位/复位指令如何使用?
|
Linux
扩展知识点--利用Linux应用代码如何控制LED
扩展知识点--利用Linux应用代码如何控制LED
103 0
【嵌入式】窗户看门狗定时器概念详解+例题解析
题目 嵌入式系统使用WWDG窗口看门狗模块监视用户程序运行,假设看门狗的喂狗时间为20ms,PCLK1频率为36MHz,WDGTB[1:0]=10b。请计算看门狗的定时计数值(给出计算过程),并写出看门狗的初始化函数(注:使用寄存器方式程序)
370 0
|
C语言
【嵌入式实训】STM32中断处理机制及外部中断使用方法
理论知识 STM32系列处理器外部中断/事件控制器的原理 共19个外部中断线,其中GPIO端口以下图的方式连接到16个外部中断/事件线上: 另外三种其他的外部中断/事件控制器的连接如下:EXTI 线 
534 0