Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
116.74 Кб
Скачать

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

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

Кафедра ВТ

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

3

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