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

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

Описание

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

Содержание

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

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

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

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

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

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

Федеральное агентство по образованию и науке  РФ

Южно-Уральский  Государственный Университет

Кафедра Систем управления 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

  по курсу Организация  ЭВМ  
 
 
 
 
 
 
 

                    Выполнил: студент ПС-219

                                         Меркулов А.

                    «____»____________ 2008 г. 

                    Руководитель:

                    _______________ Садов В.Б.

                    «____»____________ 2008 г. 

                    Работа  защищена

                    с оценкой _______________

                    «____»____________ 2008 г. 
                     
                     
                     
                     
                     
                     
                     
                     
                     

Челябинск

2008

Содержание 

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

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

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

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

Тема: «Работа с лабораторной установкой. Использование  портов ввода-вывода микроконтроллера» 
 

Задание 

     Вариант №3: Написать программу вывода на светодиоды «нарастающей линейки» (8светодиодов). Шаг по времени задается с тумблера: 0.5 или 1 сек.   
 

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

     Все 8 светодиодов подключаются к выходам порта 7. Тумблер подсоединяется к выходу 0 порта 9. В бесконечном цикле в начале проверяется, в каком положении находится тумблер, в соответствии с этим определяется скорость нарастания «световой линейки» на светодиодах, то есть определяется величина программной паузы. 
 

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

#include<io70f3707.h>

#include<intrinsics.h> 

int main( void )

{

  int i, k;    /*Переменные цикла для создания программной паузы*/

 

  WDTM2 = 0x1f;   /*Запрет сторожевого таймера*/

  PM7L = 0;    /*Определение всех битов порта 7L как выходов*/

  PM9L = 0xff;   /*Определение 0 бита порта 9L как входа*/

  PU9L = 0x1;    /*Подключение подтягивающего резистра к 0 биту порта 9L*/

  for(;;)    /*Общий цикл программы*/

  {

    if (P9L_bit.no0)  /*Если тумблер в положении 1*/

      k = 10000;   /*Величина программной паузы*/

    else    /*Если тумблер в положении 0*/

      k = 50000;   /*Величина программной паузы*/

 

    P7L_bit.no0 = 1;  /*Зажигаем 1 светодиод*/

    for (i = 0; i < k; i++); /*Программная пауза*/

    P7L_bit.no1 = 1;

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

    P7L_bit.no2 = 1;

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

    P7L_bit.no3 = 1;

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

    P7L_bit.no4 = 1;

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

    P7L_bit.no5 = 1;

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

    P7L_bit.no6 = 1;

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

    P7L_bit.no7 = 1;

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

   

    for (i = 0; i < k; i++);  /*Программная пауза*/ 

    P7L_bit.no7=0;   /*Выключаем 8 из 8 светодиод*/

    for (i = 0; i < k; i++);  /*Программная пауза*/

    P7L_bit.no6 = 0;

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

    P7L_bit.no5 = 0;

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

    P7L_bit.no4 = 0;

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

    P7L_bit.no3 = 0;

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

    P7L_bit.no2 = 0;

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

    P7L_bit.no1 = 0;

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

    P7L_bit.no0 = 0;

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

  }

 

 

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Тема: «Управление светодиодным индикатором от микроконтроллера» 
 

Задание 

Вариант №3: Написать программу вывода на семисегментный индикатор времени между нажатием одной кнопки (до 99). Время вычислять с помощью программных пауз. 
 

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

     Все сегменты индикатора подключаются к порту 7L. 2 первых бита порта 7H используются для подсоединения индикаторов. Кнопка подсоединяется к выходу 0 порта 9. В бесконечном цикле проверяется нажатие кнопки, замеряется интервал времени до повторного нажатия. Полученное значение выводится на индикаторы. 
 

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

#include <io70f3707.h>

#include <intrinsics.h> 

unsigned char c1, c2, c3;  /*Выводимые на индикатор значения*/

unsigned char n_ind;   /*Номер текущего индикатора*/ 

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

{

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

 {

    case 0: return 0x3f;

    case 1: return 0x6; 

    case 2: return 0x5b;

    case 3: return 0x4f;

    case 4: return 0x66;

    case 5: return 0x6d;

    case 6: return 0x7d;

    case 7: return 0x7; 

    case 8: return 0x7f;

    case 9: return 0x6f;

  }

} 

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

#pragma vector = INTTP0OV_vector

__interrupt void indic(void)

{

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

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

  {

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

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

  }

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

  {

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

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

  }

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

  {

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

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

  }

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

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

    n_ind = 0;

} 

/*Основная программа*/

int main(void)    

{

  int timer;    /*Счетчик времени*/

  int i;     /*Переменная цикла для программной паузы*/

  short c_1, c_2, c_3;   /*Цифры выводимого числа*/

 

  WDTM2 = 0x1f;   /*Запрет сторожевого таймера*/

  PM9L = 0xff;   /*Определение всех битов порта 9L как входов*/

  PU9L = 0x1;    /*Подтягивающий резистор к битам порта 9L*/

  /*Установка коэффициента деления частоты тактового генератора в 1*/

  PRCMD = 0;    

  PCC = 0;

  __asm("nop");

  __asm("nop");

  __asm("nop");

  __asm("nop");

  __asm("nop");

  /*Установка коэффициента умножения частоты в 4*/

  PLLCTL_bit.no0 = 1;

  while (LOCKR_bit.no0);

  PLLCTL_bit.no1 = 1;

  __asm("nop");

  __asm("nop");

  __asm("nop");

  __asm("nop");

  __asm("nop");

  PM7L = 0;    /*Определение битов 0-7 порта 7 как выходов*/

  PM7H = 0xf8;   /*Определение битов 8-10 порта 7 как выходов*/

  P7L = 0;    /*Сегменты не светятся*/

  P7H = 0;    /*Индикаторы не выбраны*/

  c1 = 0x3f;    /*Коды индицируемых символов*/

  c2 = 0x3f;

  n_ind = 0;    /*Текущий номер индикатора – HG1*/

/*Разрешение прерывания по переполнению счетчика таймера TMP0*/ 

TP0OVIC_bit.no6 = 0;

  __EI();    /*Общее разрешение прерывания*/

  TP0CTL1 = 5;   /*Режим таймера со свободным пуском*/

  TP0CTL0 = 0;   /*Коэффициент пересчета = 244 Гц*/

  TP0CTL0_bit.no7 = 1;  /*Таймер запущен*/

 

  while(P9L_bit.no0);   /*Ожидание, если кнопка находится в положении 1*/

  while(!P9L_bit.no0);  /*Ожидание, если кнопка находится в положении 0*/

  timer = 0;    /*Обнуление счетчика времени*/

  while(P9L_bit.no0)   /*Выполнение, пока кнопка  - в положении 1*/

  {

    for (i = 0; i < 10000; i++);  /*Программная пауза*/

    timer+=1;    /*Увеличение счетчика на 1 единицу времени*/

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