 
        
        Лабораторная работа 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).
аким
образом, разрядность  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 при перезагрузке не изменяется.
	
		 
		
