原创 【博客大赛】MSP430F5438开发板单片机定时器A设置实验程序

2013-8-17 23:52 1581 12 12 分类: MCU/ 嵌入式

 

//==============================================================//
//                                                                                                                                                //
// 文件:  MAIN.C                                                                                                                    //
// 说明:  MSP430F5438开发板单片机定时器A设置实验程序                                                                                                                                             
//         设置单片机Timer0_A5每毫秒中断一次,翻转LED驱动段                                   //
//         在LED驱动端可见频率为500Hz方波                                                                      //
// 编译:  CCS5.2                                                                                                                  //                                                                                                                                                                                   
// 日期:  2013.05.19                                                                                                            //
//                                                                                                                                               //
//=============================================================//
 
#include "msp430x54x.h"
#include <stdlib.h>
#include <stdio.h>
#include "PIN_DEF.H"
 
#pragma vector=TIMER0_A0_VECTOR                             
__interrupt void Timer0_A0 (void)
{
  P1OUT   ^= 0xF0                                                ; 
  P9OUT   ^= 0x0F                                                ; 
  TA0CCR0  = (16000) - 1                                  ;
}
 
//***************************************************************************//
//                                                                                                                             //
//函数:Init_CLK(void)                                                                                       //
//功能:初始化主时钟: MCLK = XT2                                                                //
//                                                                                                                            //
//***************************************************************************//
void Init_CLK(void)
{
  WDTCTL     = WDTPW + WDTHOLD                                              ; // 关看门狗
  P5SEL     |= 0x0C                                                                               ; // 端口功能选择振荡器
  UCSCTL6   &= ~XT2OFF                                                                  ; // 振荡器使能
  UCSCTL3   |= SELREF_2                                                                ; // FLLref = REFO
  UCSCTL4   |= SELA_2                                                                      ; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志                                                          
    SFRIFG1 &= ~OFIFG                                                       ; 
  }while(SFRIFG1&OFIFG)                                                  ; // 检测振荡器错误标志
  UCSCTL6   |= XT2DRIVE0 + XT2DRIVE1                      ; // XT2 驱动模式 24~32MHz                                            
  UCSCTL4   |= SELS_5 + SELM_5                                  ; // SMCLK = MCLK = XT2
}
 
 
//***************************************************************************//
//                                                                                                                            //
//  Init_Port(void): 设置IO端口                                                                           //
//                                                                                                                            //
//***************************************************************************//
void Init_Port(void)
{
  P5DIR  |= POWER                                                                          ; // 主电源
  MAIN_POWER_ON                                                                        ;
  P7DIR  |= LED_PWR                                                                     ; // 发光二极管电源
  P7OUT  &=~LED_PWR                                                                 ;
  P1OUT   = 0xF0                                                                               ; // 设置LED控制端IO属性
  P1DIR   = 0xF0                                                                                ;
  P9OUT   = 0x0F                                                                               ; 
  P9DIR   = 0x0F                                                                                ;
}
 
//***************************************************************************//
//                                                                                                                             //
//  Init_TimerA0(void): 设置TimerA0                                                                 //
//                                                                                                                             //
//***************************************************************************//
void Init_Timer0_A5(void)
{
  TA0CTL   = 0                                               // 复位Timer0_A5, 分频系数设置为1
           | (1 << 2)                                             // 计数器清0
           | (2 << 8)                                             ; // 计数时钟设为SMCLK                                                          ;
  TA0CCR0  =  16000  - 1                            ; // SMCK=EX2=16MHz,设置计数器溢出时间为1ms
  TA0CCTL0 = 0                                             // 初始化捕获控制
           | (1 << 4)                                              ; // 使能比较中断
  TA0CTL  |= (1 << 4)                                    ; // 设置计数器为加计数,启动
}
 
 
//***************************************************************************//
//                                                                                                                            //
//                 主程序: 初始化时钟、端口和定时器                                             //
//                                                                                                                             //
//***************************************************************************//
void main( void )
{
  
  WDTCTL = WDTPW + WDTHOLD                                ; // 关闭看门狗
  Init_CLK()                                                                           ;
  Init_Port()                                                                            ;
  Init_Timer0_A5()                                                               ;
  _EINT()                                                                               ; 
  LPM3                                                                                   ;
}
 
//2013-08-17
//23:46
//深圳
//今天去雅枫酒店参加了电源网第四届深圳LED技术专题会,精彩内容明天补上吧,太晚了。
//晚安,心中思念的ta。
//:)
 
 
 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条