Châu Thanh Hải
Thành Viên PIF
Hiện em đang tìm tòi về ADC nhưng cũng chưa rõ lắm , mọi người cho em hỏi sao em set up timer + adc check cũng không thấy lỗi gì ,nhưng sao nó không nhảy vào ngắt timer được . Mọi người giải đáp giúp em với , cảm ơn mọi người nhiều.
Code:
#include <msp430.h>
#include <stdio.h>
#include "LCD_16x2.h"
/*
* main.c
*/
void Configure_Clock(void);
void Configure_Adc(void);
unsigned int GetAdcValue(void);
void Configure_Timer(void);
float temp;
unsigned char l = 'V';
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Configure_Clock();
Configure_Timer();
Configure_Adc();
P2DIR |= BIT0;
P2OUT |= BIT0;
LCD_Init();
while(1)
{
temp = GetAdcValue();
temp = (temp*4+40)/1024;
LCD_Clear();
LCD_Home();
LCD_PrintString("Voltage: ");
LCD_PrintFloat(temp,5,3);
LCD_Display(l);
__delay_cycles(500000);
}
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void interrupt_CR0(void)
{
_no_operation();
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void interrupt_CR1(void)
{
switch(TA0IV)
{
case 0x02:
{
P2OUT ^=BIT0;
}
break;
}
}
void Configure_Timer(void)
{
TA0CTL = TASSEL_2 + MC_2 + ID_3;
TA0CCR0 = 6000;
TA0CCR1 = 4000;
TA0CCTL0 = CCIE;
TA0CCTL1 = CCIE;
}
void Configure_Clock()
{
if(CALBC1_1MHZ == 0xFF)
{
while(1);
}
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL2 |= SELM_0;
}
void Configure_Adc()
{
ADC10CTL1 = INCH_0 | ADC10SSEL_0;
ADC10AE0 = BIT0;
ADC10CTL0 = SREF_0;
ADC10CTL0 |= ADC10ON + ENC;
}
unsigned int GetAdcValue(void)
{
ADC10CTL0 |= ADC10SC;
while(ADC10CTL1 & 1);
return ADC10MEM;
}