Лабораторная работа 4 / lab4_nastena
.docСанкт-Петербургский Государственный Электротехнический Университет
имени В.И. Ульянова (Ленина) «ЛЭТИ»
Кафедра ВТ
Лабораторная работа № 4
по дисциплине
“Микропроцессорные системы”
“ИЗУЧЕНИЕ СТРУКТУРЫ И РЕЖИМОВ РАБОТЫ ТАЙМЕРОВ-СЧЕТЧИКОВ
ОМК P89LPC932.”
Вариант 5
Группа: 2373
Выполнили: Негрей А.
Паршина А.
Проверила: Головина Е.К.
Санкт-Петербург
2006
Цель работы:
1.Ознакомление со структурой блока таймеров/ счетчиков ОМК P89LPC932
2.Получение навыков программирования и применения таймеров/счетчиков в основных режимах работы.
Задание:
Вывод результата эксперимента осуществляется через порт P2 контроллера.
1.Разработать программу аппаратно-программной задержки, обеспечивающую наблюдение эффекта "Бегущего огня" на индикаторных светодиодах. Вид и частота "бегущего огня" определены вариантом задания (номер бригады).
Совместно с таймером/счетчиком при выполнении лабораторной работы необходимо использовать подпрограмму задержки. Сигнал прерывания TF0 из С/Т0 вызывает модуль программной задержки, реализуемой с использованием соответствующего кода, загружаемого в регистр МК и декрементируемого после очередного сигнала прерывания из Т/С.
В режиме реального времени реализация задержки только посредством таймера при частоте тактирования микроконтроллера 6Mгц для 16-битного Т/С составляет около 130 мс, что недостаточно для визуального наблюдения за "бегущим огнем", используемым в качестве индикатора результатов эксперимента.
В режиме моделирования процессы в ОМК идут медленнее в сотни раз. Поэтому настройка C/T0 иная, чем в режиме реального времени
В соответствии с заданием определить длительность и количество вызовов подпрограммы задержки для режимов реального времени и моделирования.
Возврат из подпрограммы программной задержки обеспечивается командой RETI, восстанавливающей содержимое программного счетчика РС из стека. В стек РС загружается автоматически по аппаратно сформированному коду команды LCALL. В РС при прерывании от Т/С0 загружается код адреса 000BH, в котором находится команда перехода к подпрограмме обработки соответствующего прерывания.
Вариант задания |
Вид бегущего огня |
Время свечения светодиода/СИД/ /в секундах/ |
5 |
Слева-направо; горят 4 СИД |
0,5 |
2. Разработать программу подсчета числа внешних сигналов . Источником сигналов является внешний сигнал, поступающий на вход Т0, режим работы Т/С0 – режим 1. Результатом выполнения программы является код числа сигналов, выведенный на СИД.
3.Построить программу подсчета внешних сигналов для Т/С0 в режиме 2. Для наблюдения выполнения программы загрузить в TL0 и TH0 одинаковые коды, например 0F8H.
Содержимое TL0 выводить на индикацию.
Используемые режимы:
Режим 0
Таймер в режиме 0 аналогичен таймеру 8048. Старшая часть T/C работает как 8-разрядный делитель, младшая часть - как 5-разрядный предделитель (реализует деление на 32). Таким образом, разрядность T/C в этом режиме равна 13. Старшие 3 бита TLn игнорируются. Работа таймера разрешена если TRn = 1 и либо TnGATE = 1 либо INTn = 1. Установка TnGATE в 1 позволяет управлять таймером с помощью внешнего сигнала INTn. TRn – управляющий бит в регистре специальных функций TCON. TnGATE – бит регистра TMOD. Установка TRn (флаг запуска) не очищает регистр. При изменении значения со всех единиц на все нули (переполнение таймера), таймер выставляет запрос на прерывание (флаг TFn).
Функционирование в режиме 0 идентично для T/C0 и T/C1.
Рис. 3.1. Логика работы T/C0 или T/C1 в режиме 0.
Режим 1
Режим 1 аналогичен режиму 0, за исключением того, что разрядность T/C равна 16 (используются все биты THn и TLn).
Рис. 3.2. Логика работы T/C0 или T/C1 в режиме 1.
Режим 2
В режиме 2 таймер работает в качестве 8-разрядного счетчика (TLn) с автоматической перезагрузкой. При переполнении TLn устанавливается флаг TFn и в TLn загружается значение, находящееся в THn (значение должно быть задано программно). Значение THn при перезагрузке не изменяется. Функционирование в режиме 2 идентично для T/C0 и T/C1.
Рис. 3.3. Логика работы T/C0 или T/C1 в режиме 2.
Текст программ с комментариями:
1) лабораторная работа № 4.1
$NOMOD51
#include <REG932.H>
// Резервирование памяти под стек.
DSEG AT 20h
StackSG: DS 10h
// Переход к главной подпрограмме.
CSEG AT 0
JMP init
// Переход к подпрограмме обработки прерывания от таймера 0.
CSEG AT 0Bh
JMP timer0Int
// Главная подпрограмма.
CodeSG SEGMENT CODE
RSEG CodeSG
init:
MOV SP, #StackSG ;20
MOV R1, #45 ;для задержки по времени
MOV R2, #10001000b ; СИД горят слева-направо
MOV P2M1, #00h ; устанавливаем двунаправленный режим работы для P2 MOV TMOD, #00001001b; устанавливаем режим работы 1 для таймера 0
SETB EA ; разрешаем все прерывания
SETB ET0 ; разрешаем запрос на прерывание от таймера 0
SETB TR0 ; запускаем таймер 0
infLoop:
JMP infLoop ; бесконечный цикл
// Подпрограмма обработки прерывания от таймера 0.
Timer0IntSG SEGMENT CODE
RSEG Timer0IntSG
timer0Int:
PUSH ACC ;поместить слово в стек
MOV A, R1
JZ vuvod ; определяется истекло ли время задержки,если да,то вывод на P2
DEC A ;если нет, то уменьшение времени
MOV R1, A
SJMP continue
vuvod:
MOV R1, #45 ; "инициализация" задержки
mov A, #11110000b
ANL A,R2
MOV P2, A ;вывод на индикацию, 4 СИД
cont: MOV A, R2
RR A ;слева-направо=>сдвиг А вправо
MOV R2, A
continue:
POP ACC ;считать слово из стека
RETI ;возврат
END
2) Лабораторная работа № 4.2
$NOMOD51
#include <REG932.H>
// Резервирование памяти под стек.
DSEG AT 20h
StackSG: DS 10h
// Переход к главной подпрограмме.
CSEG AT 0
JMP init
// Переход к подпрограмме обработки прерывания от таймера 1.
CSEG AT 1Bh
JMP timer1Int
// Главная подпрограмма.
CodeSG SEGMENT CODE
RSEG CodeSG
init:
MOV SP, #StackSG
MOV P2M1, #0 ; устанавливаем двунаправленный режим
; работы для P2
MOV TMOD, #00010101b ; устанавливаем режим работы 1 и
; "счетчик" для таймера 0,
; режим работы 1 и
; "таймер" для таймера 1
SETB EA ; разрешаем все прерывания
SETB ET1 ; разрешаем запрос на прерывание от таймера 1
SETB TR0 ; запускаем таймер 0
SETB TR1 ; запускаем таймер 1
infLoop:
JMP infLoop
// Сегмент кода подпрограммы обработкипрерывания от таймера 1
Timer1IntSG SEGMENT CODE
RSEG Timer1IntSG
timer1Int:
MOV P2, TL0 ;код числа внешних сигнало выводиться на СИД
RETI ;возврат
END
3) Лабораторная работа № 4.3
$NOMOD51
#include <REG932.H>
// Резервирование памяти под стек.
DSEG AT 20h
StackSG: DS 10h
// Переход к главной подпрограмме.
CSEG AT 0
JMP init
// Переход к подпрограмме обработки прерывания от таймера 1.
CSEG AT 1Bh
JMP timer1Int
//Главная подпрограмма.
CodeSG SEGMENT CODE
RSEG CodeSG
init:
MOV SP, #StackSG
MOV P2M1, #0 ; устанавливаем двунаправленный режим
; работы для P2
MOV TMOD, #00010110b ; устанавливаем режим работы 2 и "счетчик" для таймера 0, режим работы 1 и "таймер" для таймера 1
MOV TL0, #0F8h ; инициализируем регистры хранения MOV TH0, TL0 ; результатов счета таймера 0
SETB EA ; разрешаем все прерывания
SETB ET1 ; разрешаем запрос на прерывание от таймера 1
SETB TR0 ; запускаем таймер 0
SETB TR1 ; запускаем таймер 1
infLoop:
JMP infLoop
// Подпрограммы обработки прерывания от таймера 1.
Timer1IntSG SEGMENT CODE
RSEG Timer1IntSG
timer1Int:
MOV P2, TL0 ;содержимое TL0 выводиться на индикацию
RETI ;возврат
END
Результаты работы:
1) результатом работы является программа аппаратно-программной задержки, обеспечивающую наблюдение эффекта "Бегущего огня" на индикаторных светодиодах. Вид и частота "бегущего огня" определены следующим образом: горят 4 СИД слева-направо. Время свечения светодиода составляет 0.5 сек.
Совместно с таймером/счетчиком при выполнении лабораторной работы необходимо использовать подпрограмму задержки. Сигнал прерывания TF0 из С/Т0 вызывает модуль программной задержки, реализуемой с использованием соответствующего кода, загружаемого в регистр МК и декрементируемого после очередного сигнала прерывания из Т/С.
В режиме реального времени реализация задержки только посредством таймера при частоте тактирования микроконтроллера 6Mгц для 16-битного Т/С составляет около 130 мс, что недостаточно для визуального наблюдения за "бегущим огнем", используемым в качестве индикатора результатов эксперимента.
В режиме моделирования процессы в ОМК идут медленнее в сотни раз. Поэтому настройка C/T0 иная, чем в режиме реального времени
Возврат из подпрограммы программной задержки обеспечивается командой RETI, восстанавливающей содержимое программного счетчика РС из стека. В стек РС загружается автоматически по аппаратно сформированному коду команды LCALL. В РС при прерывании от Т/С0 загружается код адреса 000BH, в котором находится команда перехода к подпрограмме обработки соответствующего прерывания.
2) результатом работы является программа подсчета числа внешних сигналов /событий/. Источником сигналов является внешний сигнал, поступающий на вход Т0, режим работы Т/С0 - режим 1.
Результатом выполнения программы является код числа сигналов, выведенный на СИД.
3) результатом работы является программа подсчета внешних сигналов для Т/С0 в режиме 2. Для наблюдения выполнения программы в TL0 и TH0 загружаются одинаковые коды, например 0F8H.Содержимое TL0 выводится на индикацию.
При переполнении TL0 устанавливается флаг TF0 и в TL0 загружается значение, находящееся в TH0 (значение задается программно). Значение TH0 при перезагрузке не изменяется.