📄 test44x_ca04.c
字号:
#include "msp430x44x.h"
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5OUT &= ~0x02; // P5.1 reset
P5DIR |= 0x02; // P5.1 output direction
P1OUT &= ~(Ref + Sensor); // Ref set
P1DIR |= Ref + Sensor; // Ref output
CACTL1 = CARSEL + CAREF0 + CAON; // -Comp = 0.25*Vcc - on
CACTL2 = P2CA0; // +Comp = 1.6
TACTL = TASSEL_2 + MC_2; // SMCLK, clear TAR
_EINT(); // Enable interrupts
while (1) // Mainloop
{
sensor_time = measure(Sensor); // Measure discharge time through sensor
ref_time = measure(Ref); // Measure discharge time through Ref
if (sensor_time < ref_time) // if sensor time < ref time ( >25c )
P5OUT |= 0x02; // LED on - Set P5.1
else P5OUT &= ~0x02; // LED off - Reset P5.1
}
}
unsigned int measure(int source) {
P1OUT |= Ref; // Ref Set
P1DIR |= Ref; // Ref output
CCR1 = TAR + 5000; // CCR1 ~ TAR+5ms
CCTL1 = CCIE; // Comp,interrupt
LPM0; // Wait for CCR1 interrupt
P1DIR &= ~Ref; // Ref = HiZ, Charge complete
P1OUT &= ~Ref; // Ref = Reset
CCTL1 = CM_2 + CCIS_1 + CAP + CCIE; // Neg, CCIB,Cap,interrupt
timer_count = TAR; // TAR at before discharge
P1DIR |= source; // Temp = Sensor or Ref
LPM0; // Wait for CCR1 interrupt
timer_count = CCR1 - timer_count; // timer_count = discharge time
P1DIR &= ~(Sensor + Ref); // Disable Sensor or Ref
CCTL1 = 0x00; // Disable CCTL1
return(timer_count);
}
// Timer A1 interrupt service routine
interrupt[TIMERA1_VECTOR] void Timer_A(void)
{
switch( TAIV )
{
case 2: LPM0_EXIT; // ccr1
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -