Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

/* значение напряжения, а затем преобразует результат в коды ASCII для */

/* вывода на экран                                                     */

/*---------------------------------------------------------------------*/

void ADC_convert(void) {

 unsigned int sumadr;

 unsigned int avg_bin_voltage;

 unsigned int int_voltage;

 unsigned int ones_int;

 unsigned int tenths_int;

 unsigned int hundreths_int;

 char ones;

 char tenths;

 char hundreths;

 ATDCTL5 = 0х06; /*4 преобразования в последовательности, канал 6*/

 /* Ожидать завершения измерительной последовательности*/

 while((ATDSTAT 0х8000) != 0х8000) {

  ;

 }

 /* Вывести коды преобразования на экран для контроля */

 printf("%x %x %х %х\n" , ADR0H, ADR1H, ADR2H, АDR3Н);

 /* Взять среднее от 4 измерений для устранения шума*/

 sumadr = ADR0H + ADR1H + ADR2H + ADR3H;

 avg_bin_voltage = sumadr/4;

 /*Преобразовать результат из двоичного кода к абсолютному значению,*/

 /* умноженному на 100 D, получится число в диапазоне от 0 до 500 D*/

 int_voltage = (100*avg_bin_voltage/255) * 5;

 /*Выделить старший разряд результата и преобразовать в код ASCII */

 /* Правило преобразования: десятичная цифра +48*/

 ones_int = int_voltage/100;

 ones = (char) (ones_int + 48);

 /*Выделить второй разряд результата (десятые доли) и преобразовать в

   код*/

 /* ASCII */

 tenths_int = (int_voltage ones_int*100)/10;

 tenths = (char) (tenths_int + 48);

 /*Выделить третий разряд результата (сотые доли) и преобразовать в

   код*/

 /* ASCII */

 hundreths_int = (int_voltage ones_int*100 tenths_int*10) / 1;

 hundreths = (char) (hundreths_int + 48);

 /*Вывести значение измеренного напряжения на экран */

 printf("%c.%c%cV\n", ones, tenths, hundreths);

}


/*-----------------------------------------------------------------------*/

/* Функция delay_100us формирует задержку в 100 мкс, частота тактирования*/

/* межмодульных магистралей МК составляет 8 МГц                          */

/*-----------------------------------------------------------------------*/

void delay_100us(void) {

 int i;

 for (i=0; i50; i++) {

  asm("nop");

 }

}


/*------------------------------------------------------------------*/

/* Функция delay_5ms формирует задержку в 5мс, частота тактирования */

/* межмодульных магистралей МК составляет 8 МГц                     */

/*------------------------------------------------------------------*/

void delay_5ms(void) {

 int i;

 for (i=0; i50; i++) {

  delay_100us;

 }

}

/*------------------------------------------------------------------*/

4.22.4. Обслуживание прерываний от модуля ATD

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже