学习msp430有一段时间了,刚开始自己是一点都不懂,什么寄存器之类的,压根就不知道是什么回事。虽然之前发了一个用定时器A实现LED灯闪烁程序,但是那只是一个非常简单的程序,对于初学者学习还行。我以前学过C51单片机,所以今天想通过MSP430f249实现LED流水灯闪烁。下面是我自己写的程序,同时也经过了我同学的帮助和修改。- #include<msp430x24x.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- //uint table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- uint i=0,num=0;
- void main(void)
- {
- WDTCTL=WDTPW+WDTHOLD;
- P1DIR|=0Xff;
- CCTL0=CCIE;
- CCR0=1200;
- TACTL=TASSEL_2+MC_2;
- _EINT();
- for(;;);
- }
- #pragma vector=TIMERA0_VECTOR
- __interrupt void TimerA0(void)
- {
- i++;
- if(i==6)
- {
- i=0;
- P1OUT=table[num];
- // P1OUT^=table[num];
- num++;
- }
- if(num==8)
- num=0;
- }
- 我们刚开始想实现流水灯来回闪烁,上面的程序可以实现一位一位点亮,不能来回闪烁。在编写中我们开始没有将num,i 置0,只能用Uint型使程序工作。还有num=8,才能够置0,不是num=7置0,否则出现第8个灯不闪。后面加//的程序可以加到前一行,可以看到不同的效果。
- 后面我们修改了一次,采用了flag标志,可以实现流水灯来回闪烁。
- #include<msp430x24x.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uint i=0,num,flag;
- void main(void)
- {
- WDTCTL=WDTPW+WDTHOLD;
- P1DIR=0XFF;
- CCTL0=CCIE;
- CCR0=10;
- TACTL=TASSEL_2+MC_2;
- _EINT();
- for(;;);
- }
- #pragma vector=TIMERA0_VECTOR
- __interrupt void TimerA0(void)
- {
- if(flag==0)
- {
- i++;
- for(num=0;num<10;num++);
- P1OUT=table[ i ];
- if(i==7)
- {
- flag=1;
- }
- }
- else
- {
- i--;
- for(num=0;num<10;num++);
- P1OUT=table[ i ];
- if(i==0)
- {
- flag=0;
- }
- }
- }
复制代码 |