Лабораторная работа 4 / lab4
.docМинистерство образования РФ
Санкт – Петербургский Государственный Электротехнический Университет
имени В.И. Ульянова (Ленина) “ЛЭТИ”
Кафедра ВТ
Отчет по лабораторной работе №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. При прошивке микроконтроллера также не обнаружено никаких ошибок.