📄 tb.c
字号:
//计数器操作
#include "msp430x13x.h"
unsigned long int TimeANumber; //TB中断时TA的计时数值
unsigned int TAIntCount; //TA中断的次数
unsigned int TAIntCountNow;
unsigned char TBInt; //TB中断标志
unsigned char SecondCount=0; //TB的秒中断计数,用于通讯延时保护
unsigned char SpiTimeOverCount; //SPI通讯超时计数器
unsigned char UARTTimeOverCount; //UART通讯超时计数器
unsigned int ZB_Count;
void InitTB (void)
{ TBCTL=TACLR+TBSSEL_1; //选择连接时钟到内部MCLK
TBR=0;
TBCCTL0|=CCIE; //开启中断
TBCCR0=32768/2; //计时上限 1S
TBCTL|=MC1; //处于连续计数模式
_EINT();
}
void ResetTB (void) //复位TB
{
TBCTL|=TBIFG+TBCLR;
}
void StopTBInt (void)
{
TBCCTL0&=~CCIE;
}
void InitTA (void)
{
P1SEL|=0x01; //使能外部时钟输入
TAR=0;
TACTL=TACLR;//+TASSEL0;; //选择外部TACLK
TACCTL0=CCIE; //开启中断
TACCR0=0xffff;
TACTL|=MC1; //处于连续计数模式
_EINT();
}
void ResetTA (void)
{
TACTL|=TAIFG+TACLR;
TAIntCountNow=0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
TAIntCountNow++;
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_BInt (void)
{
if(TBInt==1) //外部程序须处理后再更新下一个数据
{
TimeANumber=TAR;
TAIntCount=TAIntCountNow;
}
P6OUT^=0x20;
SecondCount++;
SpiTimeOverCount++;
UARTTimeOverCount++;
ResetTB();
ResetTA();
TBInt++;
ZB_Count++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -