Скачиваний:
19
Добавлен:
01.05.2014
Размер:
49.66 Кб
Скачать

Министерство образования РФ

Санкт – Петербургский Государственный Электротехнический Университет

имени В.И. Ульянова (Ленина) “ЛЭТИ”

Кафедра ВТ

Отчет по лабораторной работе №4

Выполнили студенты гр.2371

Абрамов А.

Зевакина О.

Проверил преподаватель

Головина Людмила Константиновна

Санкт – Петербург

2006

ИЗУЧЕНИЕ СТРУКТУРЫ И РЕЖИМОВ РАБОТЫ

ТАЙМЕРОВ-СЧЕТЧИКОВ ОМК P89LPC932.

Цель задания:

1.Ознакомление со структурой блока

таймеров/ счетчиков ОМК P89LPC932

2.Получение навыков программирования и применения таймеров/счетчиков в основных режимах работы.

Задания:

1) Задание (А)

Разработать программу аппаратно-программной задержки, обеспечивающую наблюдение эффекта "Бегущего огня" на индикаторных светодиодах. Вид и частота "бегущего огня" определены вариантом задания (номер бригады).

Совместно с таймером/счетчиком при выполнении лабораторной работы необходимо использовать подпрограмму задержки. Сигнал прерывания TF0 из С/Т0 вызывает модуль программной задержки, реализуемой с использованием соответствующего кода, загружаемого в регистр МК и декрементируемого после очередного сигнала прерывания из Т/С.

В режиме реального времени реализация задержки только посредством таймера при частоте тактирования микроконтроллера 6Mгц для 16-битного Т/С составляет около 130 мс, что недостаточно для визуального наблюдения за "бегущим огнем", используемым в качестве индикатора результатов эксперимента.

В режиме моделирования процессы в ОМК идут медленнее в сотни раз. Поэтому настройка C/T0 иная, чем в режиме реального времени

В соответствии с заданием определить длительность и количество вызовов подпрограммы задержки для режимов реального времени и моделирования.

Возврат из подпрограммы программной задержки обеспечивается командой RETI, восстанавливающей содержимое программного счетчика РС из стека. В стек РС загружается автоматически по аппаратно сформированному коду команды LCALL. В РС при прерывании от Т/С0 загружается код адреса 000BH, в котором находится команда перехода к подпрограмме обработки соответствующего прерывания.

А. Разрешение счета обеспечивается битом GATE, устанавливаемым в регистре TMOD.

В. Разрешение счета обеспечивается внешним сигналом, поступающим на вход прерывания INT0.

Вариант

задания

Вид бегущего огня

Время свечения

светодиода/СИД/

/в секундах/

2

Слева-направо; горят 2 СИД

1,0

ЛИСТИНГ

; Лабораторная работа №4, задание (А)

$NOMOD51

#include <REG932.H>

; Резервирование памяти под стек.

DSEG AT 20h

StackSG: DS 10h

; Переход к главной подпрограмме.

CSEG AT 0

LJMP initial

; Переход к подпрограмме обработки

; прерывания от таймера 0.

CSEG AT 0Bh

LJMP timer0Int

; Главная подпрограмма.

CodeSG SEGMENT CODE

RSEG CodeSG

initial:

MOV SP, #StackSG

MOV R1, #255

MOV R2, #11000000b

; устанавливаем двунаправленный режим

; работы для P2

MOV P2M1, #0

; устанавливаем режим работы 1 для таймера 0

MOV TMOD, #00001001b;#00000001b

; разрешаем все прерывания

SETB EA

; разрешаем запрос на прерывание от таймера 0

SETB ET0

; запускаем таймер 0

SETB TR0

; бесконечный цикл

Loop:

SJMP Loop

; Подпрограмма обработки прерывания

; от таймера 0.

Timer0IntSG SEGMENT CODE

RSEG Timer0IntSG

timer0Int:

PUSH ACC

MOV A, R1

JZ output

DEC A

MOV R1, A

SJMP continue

output:

MOV R1, #255

MOV P2, R2

MOV A, R2

RR A

MOV R2, A

;огоньки бегают по другому немного

; MOV A, R2

; RR A

; MOV R2, A

continue:

POP ACC

RETI

END

2) Задание (Б)

Разработать программу подсчета числа внешних сигналов /событий/. Источником сигналов является внешний сигнал, поступающий на вход Т0, режим работы Т/С0 - режим 1.

Результатом выполнения программы является код числа сигналов, выведенный на СИД.

ЛИСТИНГ

; Лабораторная работа №4, задание (Б)

$NOMOD51

#include <REG932.H>

; Резервирование памяти под стек.

DSEG AT 20h

StackSG: DS 10h

; Переход к главной подпрограмме.

CSEG AT 0

LJMP initial

; Переход к подпрограмме обработки

; прерывания от таймера 1.

CSEG AT 1Bh

LJMP timer1Int

; Главная подпрограмма.

CodeSG SEGMENT CODE

RSEG CodeSG

initial:

MOV SP, #StackSG

; устанавливаем двунаправленный режим

; работы для P2

MOV P2M1, #0

; устанавливаем режим работы 1 и

; "счетчик" для таймера 0,

; режим работы 1 и

; "таймер" для таймера 1

MOV TMOD, #00010101b

; разрешаем все прерывания

SETB EA

; разрешаем запрос на прерывание от таймера 1

SETB ET1

; запускаем таймер 0

SETB TR0

; запускаем таймер 1

SETB TR1

Loop:

SJMP Loop

; Сегмент кода подпрограммы обработки

; прерывания от таймера 1

Timer1IntSG SEGMENT CODE

RSEG Timer1IntSG

timer1Int:

MOV P2, TL0

RETI

END

3) Задание (В)

Построить программу подсчета внешних сигналов для Т/С0 в режиме 2. Для наблюдения выполнения программы загрузить в TL0 и TH0 одинаковые коды, например 0F8H.

Содержимое TL0 выводить на индикацию.

Изучить особенность работы Т/С0 в режиме 2.

Управление прерыванием (разрешить/запретить) от Т/С0 можно осуществить сбросом бита IE.7 или бита IE.1 в регистре масок прерывания IE.

ЛИСТИНГ

; Лабораторная работа №4, задание (В)

$NOMOD51

#include <REG932.H>

; Резервирование памяти под стек.

DSEG AT 20h

StackSG: DS 10h

; Переход к главной подпрограмме.

CSEG AT 0

LJMP initial

; Переход к подпрограмме обработки

; прерывания от таймера 1.

CSEG AT 1Bh

LJMP timer1Int

; Главная подпрограмма.

CodeSG SEGMENT CODE

RSEG CodeSG

initial:

MOV SP, #StackSG

; устанавливаем двунаправленный режим

; работы для P2

MOV P2M1, #0

; устанавливаем режим работы 2 и

; "счетчик" для таймера 0,

; режим работы 1 и

; "таймер" для таймера 1

MOV TMOD, #00010110b

; инициализируем регистры хранения

; результатов счета таймера 0

MOV TL0, #0F8h

MOV TH0, TL0

; разрешаем все прерывания

SETB EA

; разрешаем запрос на прерывание от таймера 1

SETB ET1

; запускаем таймер 0

SETB TR0

; запускаем таймер 1

SETB TR1

Loop:

SJMP Loop

; Подпрограммы обработки

; прерывания от таймера 1.

Timer1IntSG SEGMENT CODE

RSEG Timer1IntSG

timer1Int:

MOV P2, TL0

RETI

END

Вывод:

В результате выполнения лабораторной работы был изучен блок таймеров в заданном микроконтроллере, получены навыки программирования таймеров-счетчиков.Рассмотрены различные способы использования таймеров в P89LPC932.

Программы, написанные в соответствии с заданием, корректно работают в симуляторе KeiluVision 3. При прошивке микроконтроллера также не обнаружено никаких ошибок.

Соседние файлы в папке Лабораторная работа 4