ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
633916
SaNeKnet (25.11.2015 11:33 - 17:15, просмотров: 3461)
Написал вначале программу АЦП Однократный одноканальный всё работает прекрасно. Теперь решил Циклический одноканальный и задействовать пересылку DTC. Что у меня в коде не так или что я неправильно понял ??? Но в число ADC_int ничего не пишется (((  #include <msp430g2553.h> void Init_IO (void); //Настройка портов, и частоты void SetupTIMER0_A0 (void); //Настройка таймера прерывания void ADC_init_1(void); //Настройка АЦП одноканальный режим volatile unsigned int ADC_int=0; //ADC_int =0 .. 65535 (2 байта) //volatile - те переменные, которые могут изменяться асинхронно void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; Init_IO (); //Настройка портов SetupTIMER0_A0 (); //Настройка таймера А0 ADC_init_1(); //Настройка АЦП одноканальный режим __enable_interrupt(); //Разрешаем прерывания глобально for (;;) { } } void Init_IO (void) //Настройка портов вход - "0", выход - "1" { P1DIR = 0b00000000; // настраиваем вывод P1.х на вход P2OUT =0b000000; // Ставим сигнал на выходе 0 у порта P2 P2DIR =0b111000; // настраиваем вывод P2.0..P2.2 на вход / P2.3..P2.5 на выход (подключены светодиоды) } void SetupTIMER0_A0 (void) { TACCR0 = 6000; // регистр TACCRx содержит число, которое срав нивается с содержимым регистра счётчика TAR. TACCTL0 = CCIE; TACTL = TASSEL_2 + // TASSEL_2 - источник тактов SMCLK (SubMainCLocK), по умолчанию настроенных на работу от DCO ID_3 + // ID_3 - делитель частоты 8 MC_1 + // Прямой счёт: таймер считает от 0000h до TACCR0. TACLR; //обнуляем счетчик } void ADC_init_1(void) //Настройка АЦП циклический одноканальный режим { ADC10CTL0 = SREF_0 + // Используем Vcc/Vss(аналоговая земля) для верхнего_нижнего ИОН / ADC10SHT_0 + //4 x ADC10CLK (выборка за 4 тактов) MSC + //первому нарастающему фронту сигнала SHI, а остальные выборки/преобразования запускаются автоматически ADC10ON; //Модуль ADC10 включён ADC10CTL1 = INCH_0 + //Выбор входного канала А0 SHS_0 + //Источник сигнала для пуска бит ADC10SC ADC10DIV_0 + // делитель ADC10CLK на 1. ADC10SSEL_0 + //Источник тактов АЦП ACLK CONSEQ_2; //Циклический одноканальный ADC10AE0 = BIT0; //Аналоговый вход включён ADC10DTC0 = ADC10CT; //Данные пересылаются непрерывно. ADC10DTC1 = 1; //Количество пересылок. ADC10SA = (unsigned int)&ADC_int; //Начальный адрес блока. Эти биты определяют начальный адрес для контроллера DTC ADC10CTL0 |= ENC + ADC10SC; //Разрешаем работу АЦП } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer1_A0 (void) { P2OUT ^= BIT5; //Желтый светодиод if (ADC_int < 100) //Красный светодиод P2OUT |= BIT4; else P2OUT &= ~BIT4; if (ADC_int != 0) //Зеленый светодиод P2OUT |= BIT3; else P2OUT &= ~BIT3; }