打印

430入门级程序:定时闪烁

[复制链接]
1075|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
teabottle|  楼主 | 2013-6-30 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开始进军msp430。在起初的几天里,感觉msp的一切都是那么的苦涩难懂,与51有截然不同的感觉。在文字之中挣扎了两天,受到的打击不小。然后,拈来几个简单的程序,想开始学会自己点灯闪烁,就像学51的编程起点一样。于是,慢慢的看着程序啃代码,弄清每一条语句。此间,有些书上的知识与代码开始串在一起。才发现,最初几天的功夫,没有白费。

点灯闪烁固然简单,会做也说明不了自己达到了一定的高度,但作为一名初学者,能熟练“玩转”各种不同的定时,说明自己对msp430已然不再陌生。对于从51转身msp430的新手来说,个人认为,msp430定时器这一块,是它的特点,也是基础的部分,甚至可以说,是任何新手,在开始时,无法逃避的一个重点!

相关帖子

沙发
teabottle|  楼主 | 2013-6-30 09:18 | 只看该作者
接下来是自己根据mspf149写的几个定时程序,在实验板上亲测均能通过。
(注:proteus仿真可能无法到达其效果,因为其中使用的是msp430f249,请注意其头文件与149的区别)

一、/*   定时:LFXT1CLK作为ALCK的时钟源,频率:32768HZ    */
#include  <msp430x14x.h>
void main(void)
{   
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗

//TIMER_A相关设置
    CCTL0 = CCIE;                   //使能CCR0中断
    CCR0 = 2047;                    //设定周期0.5S               
    TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
    P2DIR = 0x04;                   //设置P2口方向为输出

    _EINT();                        //使能全局中断                       
}

#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{  
    P2OUT ^= 0xff;                  
}

二、/*    掌握XT2、DCO两种时钟源情况下SMCLK的定时    */
#include <msp430x14x.h>
void main()
{
// Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;


    //基础时钟方面的设置
  BCSCTL1&=~XT2OFF;            //启动XT2
  BCSCTL2=SELS+DIVS1+DIVS0;    //XT2CLK作为SMCLK的时钟,八分频  


  //TIMER_A各种寄存器设置
  TACTL=TACLR+TASSEL1+ID1+ID0; //清除TAR,时钟源SMCLK,八分频
  TACTL|=MC0;                  //增计数模式
  CCTL0=CCIE;
  CCR0=62500;   


  /*特别注意:当XT2没有开启或没有选择XT2作为SMCLK的时钟,
  SMCLK的默认时钟源为DCO:800KHZ,若定时0.5s,CCR0=50000; */     
  P2DIR|=BIT7;
  _EINT();
  while(1);
}

//interrupt[TIMERA0_VECTOR]void Timer_A(void)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
  P2OUT^=BIT7;
}

三、关于看门狗的两种表达起定时效果
#include <msp430x14x.h>
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL =WDT_ADLY_1000;//即:WDTCTL=WDTPW+WDTTMSEL+WDTSSEL+WDTCNTCL;
  IE1|=WDTIE;
  P2DIR|=BIT0;
  _EINT();
  
  while(1);  
}

#pragma vector=WDT_VECTOR
__interrupt void WDT()
{
P2OUT^=BIT0;

使用特权

评论回复
板凳
acer4736| | 2013-6-30 09:29 | 只看该作者
430的板子还在吃灰,哎,等抽出时间了好好玩玩

使用特权

评论回复
地板
gexingyouxian| | 2013-6-30 09:42 | 只看该作者
我的也忘记放家里了,最近老来坛子里,看着好多朋友玩,我都手痒了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

1441

帖子

1

粉丝