ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
69002 Топик полностью
zerga (15.09.2006 13:50, просмотров: 1) ответил misyachniy на Инициализация таймера и АЦП сильно сложно описана? ;-)
Ответ: вот как у меня было (небольшой кусочек) 

/////////////////////////////////////////
//инициализация АЦП
//	режим повторяющейся последовательности
//	импульсный режим выборки
//	использование множественных выборок MSI = 1
//	прерывания не настраиваются

void InitADC12(void)
{
	//настройка АЦП    , прерывания не разрешаем
	ADC12CTL0 = SHT0_3 + SHT1_3;	//время выборки хранения = 32 ADC12CLK циклов
    ADC12CTL0_bit.MSC = 1;			//множественная выборка
    ADC12CTL0_bit.REF2_5V = 1;		//2.5 В опорник
    //ADC12CTL0 |= REFON + ADC12ON;	//вкл АЦП и опорника


    ADC12CTL1 = SHS_1 + SHP + CONSEQ_1;	//тактирование от внутренего источника без делителя  + режим последовательности каналов
    ADC12MCTL0 = SREF_1 + INCH_2;       //выбор опорника и входа для 0-ой ячейки  "канал 0"
    ADC12MCTL1 = SREF_1 + INCH_4;       //выбор опорника и входа для 1-ой ячейки  "канал 1"
    ADC12MCTL2 = SREF_1 + INCH_3 + EOS; //выбор опорника и входа для 2-ой ячейки  "канал 2"   и конец последовательности
    ADC12MCTL3 = SREF_1 + INCH_2;       //выбор опорника и входа для 3-ой ячейки  "канал 0"
    ADC12MCTL4 = SREF_1 + INCH_4;       //выбор опорника и входа для 4-ой ячейки  "канал 1"
    ADC12MCTL5 = SREF_1 + INCH_3 + EOS; //выбор опорника и входа для 2-ой ячейки  "канал 2"   и конец последовательности
    ADC12MCTL6 = SREF_1 + INCH_2;       //выбор опорника и входа для 6-ой ячейки  "канал 0"
    ADC12MCTL7 = SREF_1 + INCH_4;       //выбор опорника и входа для 7-ой ячейки  "канал 1"
    ADC12MCTL8 = SREF_1 + INCH_3 + EOS;	//выбор опорника и входа для 8-ой ячейки  "канал 2"   и конец последовательности
    ADC12MCTL9 = SREF_1 + INCH_2;       //выбор опорника и входа для 9-ой ячейки  "канал 0"
    ADC12MCTL10 = SREF_1 + INCH_4;		//выбор опорника и входа для 10-ой ячейки  "канал 1"
    ADC12MCTL11 = SREF_1 + INCH_3 + EOS;//выбор опорника и входа для 11-ой ячейки  "канал 2"   и конец последовательности
    ADC12IFG = 0;

	//настройка CCR1 Таймера А      //таймер считает в непрерывном режиме
	TACCR1 = TCloc1;  	//возможна задержка при старте до 1 секунды
    TACCTL1 = OUTMOD_4; //режим вывода "переключение"

	return;
}

////////////////////////////////////
//Запуск измерения   (measuring)
void RunMeasuring(void)
{
	InitLocalDataBufADC();           //очистка буфера результатов измерения
    ADC12CTL1_bit.CSTARTADD = 0;	//установка начального адреса
	//включаем АЦП
	ADC12CTL0 |= REFON + ADC12ON;	//вкл АЦП и опорника
    ADC12CTL0_bit.ENC = 1;		//разрешаем преобразование
	//разрешаем прерывания
    ADC12IFG = 0;
    ADC12IE = ADC12_INTERRUPT_EN;//прерывания от 2, 5, 8 и 11 ячеек
    //вставить определение положения таймера для исключения задержки запуска(определять любым способом)
    TACCTL1_bit.CCIE = 1;		//вкл модумя синхронизации АЦП
    return;
}

////////////////////////////////////
//Остановка измерения
void StopMeasuring(void)
{
	//запрещаем прерывания
	ADC12IE = 0;
    ADC12IFG = 0;
    TACCTL1_bit.CCIE = 0;		//выкл модумя синхронизации АЦП
    //выключаем АЦП
    ADC12CTL0_bit.ENC = 0;		//запрещаем преобразование
	ADC12CTL0_bit.ADC12ON = 0; //выкл АЦП
    ADC12CTL0_bit.REFON = 0;	//выкл опорника
    return;
}
инициализация , запуск и остановка , могу и прерывание показать если надо