⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timera.c

📁 msp430的基本程序代码
💻 C
字号:
#include <msp430x16x.h>
/***************************************************************************************
describe:TimerA example
***************************************************************************************/
//definition
#define LEDPORT P5OUT
#define LEDDIR  P5DIR
#define RLEDBIT 1<<4
#define YLEDBIT 1<<5
#define GLEDBIT 1<<6

//Init Clock
void MSP430InitClocks()
  {
    // BCSCTL1
    // .XT2OFF = 1; disable the external oscillator for SCLK and MCLK
    // .XTS = 0; set low frequency mode for LXFT1
    // .DIVA = 0; set the divisor on ACLK to 1
    // .RSEL, do not modify
    BCSCTL1 = XT2OFF | (BCSCTL1 & (RSEL2|RSEL1|RSEL0));

    // BCSCTL2
    // .SELM = 0; select DCOCLK as source for MCLK
    // .DIVM = 0; set the divisor of MCLK to 1
    // .SELS = 0; select DCOCLK as source for SCLK
    // .DIVS = 2; set the divisor of SCLK to 4
    // .DCOR = 0; select internal resistor for DCO
    BCSCTL2 = DIVS1;

    // IE1.OFIE = 0; no interrupt for oscillator fault
    //CLR_FLAG( IE1, OFIE );
    IE1&=~OFIE;
  }
void MSP430InitTimerA()
  {
    TAR = 0;

    // TACTL
    // .TACLGRP = 0; each TACL group latched independently
    // .CNTL = 0; 16-bit counter
    // .TASSEL = 2; source SMCLK = DCO/4
    // .ID = 0; input divisor of 1
    // .MC = 0; initially disabled
    // .TACLR = 0; reset timer A
   TACTL = TASSEL1;
    //CCTL0
   //.CCIE:enable compare interupt
   CCTL0 |= CCIE;
   //CCR0
   //.setting the compare value
   CCR0 =0x3000;
   }
 void startTimerA()
  {
    // TACTL.MC = 1; up mode
    TACTL = MC0 | (TACTL & ~(MC1|MC0));
  }
 void LedInit()
 {
  //Init
  LEDDIR = LEDDIR | (RLEDBIT | YLEDBIT | GLEDBIT);
  LEDPORT = LEDPORT | (RLEDBIT | YLEDBIT | GLEDBIT);
  
 }
void RLedToggle()
 {
  LEDPORT ^= RLEDBIT;
 }

//main
void main()
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  MSP430InitClocks();
  MSP430InitTimerA();
  LedInit();
  startTimerA();
  _EINT();
  while(1);
}

//interupt routine
#pragma vector = TIMERA0_VECTOR
__interrupt void TimLed(void)  //timerA
{
    _DINT();
    RLedToggle();
    _EINT();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -