极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11829|回复: 0

【大赛原创经验贴】MSP430入门级程序:定时闪烁

[复制链接]
发表于 2012-7-18 09:19:49 | 显示全部楼层 |阅读模式
刚学完51,还没来得及消化的自己,转身开始进军msp430。在起初的几天里,感觉msp的一切都是那么的苦涩难懂,与51有截然不同的感觉。在文字之中挣扎了两天,受到的打击不小。然后,拈来几个简单的程序,想开始学会自己点灯闪烁,就像学51的编程起点一样。于是,慢慢的看着程序啃代码,弄清每一条语句。此间,有些书上的知识与代码开始串在一起。才发现,最初几天的功夫,没有白费。

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

接下来是自己根据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;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 00:37 , Processed in 0.038929 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表