Автор работы: Пользователь скрыл имя, 17 Ноября 2010 в 15:07, контрольная работа
Тема1: «Работа с лабораторной установкой. Использование портов ввода-вывода микроконтроллера».
Тема2: «Управление светодиодным индикатором от микроконтроллера».
Тема3: «Использование аналого-цифрового преобразователя (АЦП) микроконтроллера».
Лабораторная работа №1…………………………………………………………………3
Лабораторная работа №2…………………………………………………………………5
Лабораторная работа №3…………………………………………………………………8
Федеральное агентство по образованию и науке РФ
Южно-Уральский Государственный Университет
Кафедра
Систем управления
Отчет по лабораторным работам
по курсу Организация
ЭВМ
Выполнил: студент ПС-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); /*
while(!P9L_bit.no0); /*
timer = 0; /*Обнуление счетчика времени*/
while(P9L_bit.no0) /*
{
for (i = 0; i < 10000; i++); /*Программная пауза*/
timer+=1; /*Увеличение счетчика на 1 единицу времени*/
Информация о работе Отчет по лабораторным работам по курсу Организация ЭВМ