您好!
我希望你们做得好。 我目前在 MSP430上的捕获模式设置定时器与 TCS3200颜色传感器连接时遇到问题。 颜色传感器根据所捕获的颜色输出频率的方波、我会尝试在一定时间内对其进行计数。 为此、我将在引脚8.3上使用计时器作为输入、但我无法获取递增的计数变量、我不确定原因。 我不知道在配置计时器时是否缺失了某些信息、或者我的中断矢量是否不正确。 下面提供了代码:
#包含
#包含
#包含
#include "hal_lcd.h"
无符号整型红色=0、绿色=0、蓝色=0;
无符号 int count = 0;
unsigned int white_filter = 0;
//中断
#pragma vector = TIMER0_A0_Vector
__interrupt void delay1 ()
{
P1OUT ^= BIT0;//闪烁 LED 以确认功能正常
}
//计时器通用中断
#pragma vector = Timer1_A1_vector
__interrupt void 增量(void)
{
开关(TA1IV){
案例0x08://Capture/compare 中断2
计数++;
中断;
默认值:
中断;
}
}
void displayIntegerOnLCD(int value){
char str[20];//假设整数最多为5位数
sprintf (str、"%d"、value);//将整数转换为字符串
displayScrollText (str);//使用 displayScrollText 函数在 LCD 上显示字符串
}
void init_timers()
{
//将计时器 A1分配给引脚8.3作为计数器
TA1CCTL2 |= CM_1;//在时钟的上升沿进行捕获
TA1CCTL2 |= CCIS_0;//选择引脚8.3
TA1CCTL2 |= SCS;//同步捕捉
TA1CCTL2 |= cap;//捕获模式
TA1CCTL2 |= CCIE;//启用中断
TA1CTL |= TASSEL_2 | MC_2 | TACLR;// SMCLK、连续模式、清除计时器
//计时器 A0 -已确认正常工作
TA0CTL |= TACLR;//重置计时器
TA0CTL |= tassel_1;// SMCLK
TA0CTL |= MC_1;//计时器开始计数到 TA0CCR0
TA0CCTL0 = CCIE;//启用中断
TA0CCR0 |= 50000 - 1 ;
}
空 init_ColorSensor()
P1DIR = 0x31;//端口1.4和1.5作为 S0和 S1的输出
P2DIR = 0xA0;//端口2.5和2.7分别作为 S2和 S3的输出
P8DIR =~0x08;//端口8.3设置为 OUT 的输入,以连接到计时器 TA0.1
P8SEL0 = 0x08;//端口8.3选择作为主要功能(计时器 A0)
P1OUT = 0x30;// 1.4高电平和1.5低电平:输出频率缩放= 100%
P2OUT = 0x00;//最初采用红色滤波器
}
int main (void){
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P1OUT |= 0x00;
PMM_unlockLPM5 ();
init_timers();
init_ColorSensor();
__enable_interrupt ();
_ bis_SR_register (GIE);//使计时器中断正常工作
init_lcd ();//初始化 LCD
ClearLCD();
while (1){
displayIntegerOnLCD(计数);
}
}