Отчет по лабораторным работам по курсу Организация ЭВМ

Автор работы: Пользователь скрыл имя, 17 Ноября 2010 в 15:07, контрольная работа

Описание

Тема1: «Работа с лабораторной установкой. Использование портов ввода-вывода микроконтроллера».
Тема2: «Управление светодиодным индикатором от микроконтроллера».
Тема3: «Использование аналого-цифрового преобразователя (АЦП) микроконтроллера».

Содержание

Лабораторная работа №1…………………………………………………………………3

Лабораторная работа №2…………………………………………………………………5

Лабораторная работа №3…………………………………………………………………8

Работа состоит из  1 файл

Отчет по лабораторным работам.doc

— 71.50 Кб (Скачать документ)

    if (timer==999) break;  /*При переполнении – выход из цикла*/

  }

  

  c_1 = timer/10;   /*Определение 1 цифры*/

  c_2 = timer%10;  /*Определение 2 цифры*/

   

  c1 = num_to_disp (c_1);  /*Определение выводимого числа на индикатор HG1*/

  c2 = num_to_disp (c_2);  /*Определение выводимого числа на индикатор HG2*/

 

  for (;;);    /*Бесконечный цикл*/

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Лабораторная  работа №5 

Тема: «Использование аналого-цифрового преобразователя (АЦП) микроконтроллера» 
 

Задание 

Вариант №5: Написать программу вывода с интервалом 0.5 секунды на индикатор разницу между двумя напряжениями, подаваемыми на входы AIN0 и AIN2 АЦП. Напряжения задается с помощью потенциометра. 
 

Реализация программы 

     Все сегменты индикатора подключаются к порту 9L.  3 первых бита порта 9H используются для подсоединения индикаторов. Потенциометры соединяются с входами AIN0 и AIN2. С помощью АЦП считывается текущие напряжения и вычитаются друг из друга. Эта разница и выводится на индикатор. 
 

Листинг программы с комментариями 
 

#include "io70f3707.h"

#include "intrinsics.h" 

char cur_lcd;

int lcd_out; 

char f(char a)/*Функция  вывода числа на индикатор*/

{

  switch(a)  /*Определение кода числа от его значения*/

  {

    case 0: return 0x3F;

    case 1: return 0x06;

    case 2: return 0x5B;

    case 3: return 0x4F;

    case 4: return 0x66;

    case 5: return 0x6D;

    case 6: return 0x7D;

    case 7: return 0x07;

    case 8: return 0x7F;

    case 9: return 0x6F;

    default: return 0x00;

  }

}

/*Подпрограмма  обработки прерывания от таймера  TMP0*/

#pragma vector = INTTP0OV_vector

__interrupt void indic(void)

{

  P9H = 0;    /*Выключаем все индикаторы HG1 – HG3 */

  if (n_ind == 0)   /*Вывод на индикатор HG1*/

  {

    P9L = c1;    /*Код выводимого числа*/

    P9H = 1;    /*Номер индикатора*/

  }

  if (n_ind == 1)   /*Вывод на индикатор HG2*/

  {

    P9L = c2;    /*Код выводимого числа*/

    P9H = 2;    /*Номер индикатора*/

  }

  if (n_ind == 2)   /*Вывод на индикатор HG3*/

  {

    P9L = c3;    /*Код выводимого числа*/

    P9H = 4;    /*Номер индикатора*/

  }

  n_ind++;    /*Смена номера индикатора*/

  if (n_ind > 2)    /*Условие перехода к индикатору HG1*/

    n_ind = 0;

}

/*функция*/

void pause(unsigned char a)

{

  long i;

 

  for(i = 0; i < 30000*a; ++i)

    ;

} 
 

unsigned int get_adc(char num)

{

  ADCSRA = 0x87;0

  ADMUX = 192 + num;

  ADCSRA |= 0x10;

  ADCSRA |= 0x40;  

  while((ADCSRA & 0x10) == 0)

    ;

 

  return ADC;

} 

void main(void)

{

  unsigned int adc1, adc2;

  long i;

 

 

 

  cur_lcd = 0x00;

  lcd_out = 0x00;

  DDRD = 0xFF;

  DDRC = 0xFF;

  DDRA = 0x00;

  DDRB = 0x03;

  PORTA = 0x00;

 

  PORTB = 0x00;

  MCUCR = 0;

 

  TIMSK = 0x01; 

  TCCR0 = 0x04; 

  _SEI();

 

 

  while(1)

  {

    adc1 = get_adc(0)>>2;

    adc2 = get_adc(2)>>2;

  

    if (adc1 > adc2)

    {

      lcd_out = (adc1 - adc2);

      PORTB = 1;

    }

   

    else

    {

      lcd_out = (adc2 - adc1);

      PORTB = 2;

    }

   

   

    for(i = 0; i <400000; ++i)

      ;

  }

}

Информация о работе Отчет по лабораторным работам по курсу Организация ЭВМ