📄 timera.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 + -