MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置
[复制链接]
这个例子主要还是熟悉有关定时器A的寄存器配置以及IAR的配置方式。
- /***********************************************
- 程序功能:实现流水灯以三种流动方式和四种流动速度
- 的不同组合而进行点亮"流动"
- ------------------------------------------------
- 拨码开关设置:将LED位拨至ON,其余拨至OFF
- 测试说明:观察流水灯流动顺序和速度的变化
- ************************************************/
- #include
- typedef unsigned int uint;
- uint i = 0,j = 0,dir = 0;
- uint flag = 0,speed = 0; //flag--灯光流动方式,speed--灯光流动速度
- /****************主函数****************/
- void main(void)
- {
- /*下面六行程序关闭所有的IO口*/
- P1DIR = 0XFF;P1OUT = 0XFF;
- P2DIR = 0XFF;P2OUT = 0XFF;
- P3DIR = 0XFF;P3OUT = 0XFF;
- P4DIR = 0XFF;P4OUT = 0XFF;
- P5DIR = 0XFF;P5OUT = 0XFF;
- P6DIR = 0XFF;P6OUT = 0XFF;
- WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
- P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
- P5OUT &= ~BIT7;
- CCTL0 = CCIE; //使能CCR0中断
- CCR0 = 50000;
- TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式
- P2DIR = 0xff; //设置P2口方向为输出
- P2OUT = 0xff;
- _EINT(); //使能全局中断
- LPM0; //CPU进入LPM0模式各时钟全部工作
- }
- /*******************************************
- 函数名称:Timer_A
- 功 能:定时器A的中断服务函数,在这里通过标志
- 控制流水灯的流动方向和流动速度
- 参 数:无
- 返回值 :无
- ********************************************/
- #pragma vector = TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- if(flag == 0)
- {
- P2OUT = ~(0x80>>(i++)); //灯的点亮顺序D8 -> D1
- }
- else if(flag == 1)
- {
- P2OUT = ~(0x01<<(i++)); //灯的点亮顺序D1 -> D8
- }
- else
- {
- if(dir) //灯的点亮顺序 D8 -> D1,D1 -> D8,循环绕圈
- {
- P2OUT = ~(0x80>>(i++));
- }
- else
- {
- P2OUT = ~(0x01<<(i++));
- }
- }
- if(i == 8)
- {
- i = 0;
- dir = ~dir;
- }
- j++;
- if(j == 10)
- {
- i = 0;
- j = 0;
- flag++;
- if(flag == 4) flag = 0;
- switch(speed)//根据speed的值来选择相应的速度,速度的选择主要通过改变分频来实现
- {
- case 0:
- TACTL &=~ (ID0 + ID1);//这个地方其实没必要,意思是清零TACTL的78两位
- //ID1的值是0x0080 ID2的值是0x0040通过计算就可以得出
- TACTL |= ID_3;//改为八分频
- break;
- case 1:
- TACTL &=~ (ID0 + ID1);
- TACTL |= ID_2;
- break;
- case 2:
- TACTL &=~ (ID0 + ID1);
- TACTL |= ID_1;
- break;
- case 3:
- TACTL &=~ (ID0 + ID1);
- TACTL |= ID_0;
- break;
- default:
- break;
- }
- if(flag != 3) speed++;
- if(speed == 4) speed = 0;
- }
- }
作者:haozi_1989
|