- •Министерство образования украины
- •«Однокристальный микроконтроллер i8051»
- •Практическая часть
- •Лабораторная работа №1 изучение программных и аппаратных средств разработки и отладки систем на базе i8051 Практическая часть.
- •Порядок выполнения работы
- •Name sample
- •Задания.
- •Лабораторная работа №2.
- •III. Работа с внешней памятью данных (впд).
- •1. Запомнить в впд содержимое регистров банка 0.
- •IV.Операции со стеком.
- •Индивидуальное задание на лабораторную работу
- •Задания 2
- •Контрольные вопросы.
- •Лабораторная работа №3.
- •Задания 1.
- •Задания 2
- •Контрольные вопросы.
- •Лабораторная работа №4
- •X equ p1.2
- •V equ p1.1
- •Задания 1.
- •Задания 2.
- •Задания 3.
- •Контрольные вопросы.
- •Лабораторная работа №5 команды передачи управления. Практическая часть.
- •3. Временная задержка длительностью 1с:
- •4. Передать управление одной из восьми программ rout0 - rout7 при появлении нулевого уровня на соответствующем входе порта 0. Наивысшим приоритетом обладает вход р1.0:
- •5. Множественное ветвление программы:
- •6. Последовательная передача параметров
- •Задания 1.
- •Индивидуальные задания 2
- •Контрольные вопросы.
- •Лабораторная работа №6 изучение системы прерываний Практическая часть.
- •1. Сохранение состояния центрального процессора во время прерываний
- •End Задания 1.
- •Контрольные вопросы.
- •Устранение дребезга контактов
- •2. Формирование импульсных сигналов
- •Xcor: cpl p3.4
- •3. Измерение длительности импульса
- •5. Передача символьной строки через последовательный порт.
- •6. Ввод данных с тумблеров, подключенных к линиям 3 и 4 порта 1 и выдача их на светодиоды, подключенные к линиям 4 и 5 порта 3.
- •7. Воспроизведение звука через динамик, подключенный к p3.5.
- •Задание 1
- •Задание 2
- •Контрольные вопросы.
- •3. Считывание текущего состояния таймера без нарушения процесса синхронизации.
- •4. Измерение длительности сигнала.
- •Задания.
- •Контрольные вопросы.
- •Лабораторная работа №9 организация Динамической индикации Практическая часть.
- •Задания.
- •Контрольные вопросы.
- •Лабораторная работа №10 вВод информации с Клавиатуры
- •Mov numb,#8
- •Movx @dptr,a ; Вывод следующего знакоместа
- •Задания.
- •Контрольные вопросы.
3. Считывание текущего состояния таймера без нарушения процесса синхронизации.
Все регистры таймеров/счетчиков микроЭВМ могут читаться или записываться в процессе работы, однако для этого надо соблюдать меры предосторожности.
Предположим, что подпрограмма RDTIME должна возвращать 16-разрядное значение в регистры R1 и R0, отражающее содержимое таймера 0. Существует опасность, что при считывании двух половин числа переполнение младшего регистра может перейти на одержимое старшего регистра, так что две возвращаемых половины слова окажутся "не в фазе". Решение этой проблемы заключается в том, чтобы читать сначала старший байт, а затем - младший, после чего выдать подтверждение того, что старший байт не изменился. Если изменение имело место, то следует повторить процесс сначала.
RDTIME: MOV А,ТН0 ; Выборка содержимого таймера Т0
MOV R0,TL0
CJNE A,TH0,RDTIME
MOV R1,A
RET
4. Измерение длительности сигнала.
Подпрограмма для измерения длительности «положительного» сигнала будет выглядеть так:
MOV TMOD,#00001001B ; Настройка Т/С0
MOV TH0,#0 ; Сброс таймера
MOV TL0,#0
SETB TCON.4 ; Старт Т/С0
WAIT0: JNB P3.2,WAIT0 ; Ожидание “1”
WAITC: JB P3.2,WAITC ; Ожидание “0”
CLR TCON.4 ; Стоп Т/С0
EXIT: RET ; Выход из процедуры
Подпрограмма обслуживания 8-и разрядного семисегментного индикатора.
Подпрограмма работает от прерывания таймера 0 и выводит на индикатор содержимое ячеек РПД по адресам 31h-38h. Ячейка 39h используется подпрограммой
ORG 030H
MAS DS 9
NUMB DS 1
ORG 0C00BH
JMP TIMERENT
ORG 0C100H
MOV NUMB,#8
ORL TMOD,#00000010B ;Установка режим 2 таймера 0
MOV TL0,#0 ; Загрузка таймера
MOV TH0,#0
SETB TR0 ; Старт Т/С0
SETB IE.1 ; Разрешение прерывания от Т/С0
SETB EA ; Разрешение прерываний
JMP $
TIMERENT: PUSH ACC ; Запоминание в стеке необх. регистров
PUSH 0
PUSH DPH
PUSH DPL
PUSH PSW
MOV DPTR,#8000H
MOV A,#0
MOVX @DPTR,A ; Гашение сегментов
DEC P1
DJNZ NUMB,NEXT
MOV NUMB,#8
MOV P1,#0F7H
NEXT: MOV A,#MAS ; Вычисление адреса символа
ADD A,NUMB
MOV R0,A
MOV A,@R0
MOVX @DPTR,A ; Вывод следующего знакоместа
POP PSW
POP DPL
POP DPH
POP 0
POP ACC
RETI
END
Задания.
При выполнении заданий используйте Таймер 0.
1. Мигать левым светодиодом, а по переполнению таймера вывести информацию с двух правых переключателей на остальные светодиоды.
При каждом пятом прерывании таймера сдвигать содержимое светодиодов вправо. Освободившийся светодиод должен отображать состояние правого тумблера.
Используя прерывания таймера организовать «тики» с периодом 20 мс. На их основе мигать светодиодами с чостотой 2 Гц.
При каждом четвертом переполнении таймера инвертировать состояние светодиодов.
Подсчитать количество нажатий на кнопку INTR1 за 5 сек. Отобразить на светодиодах.
Программу генерации звука заданой частоты (тумблерами).
Программу, которая фиксирует время нажатия и отпускания кнопки INTR1 в ячейках ОЗУ. Время должно быть выражнно в переполнениях таймера.После 20 отметок программа заканчивает работу.
Программа точно 1 раз в секунду увеличивает содержимое светодиодов.
Напишите программу, которая каждые 0,5 секунды увеличивает значение трех младших разрядов регистра R0 на 1 и выводит на светодиоды.
Напишите программу, которая через секунду после запуска программы увеличивает значение регистра трех младших разрядов R0 на 1, через 2 секунды – на 2, через 3 – на 3 и т.д. и выводит на светодиоды.
Напишите программу, которая последовательно считывает значения младшего байта содержимого таймера 0 и заполняет ими внешнюю память данных.
Напишите программу, которая последовательно считывает 16-ти разрядное значение содержимого таймера 0 и заполняет ими внешнюю память данных.
Напишите программу, подсчитывающую время в секундах с начала работы программы. Учтите переполнение.
Напишите программу, которая каждые 500мс циклически сдвигает содержимое трех старших разрядов регистра R0 на один разряд вправо и выводит на светдиоды.
Напишите программу, которая каждые 500мс циклически сдвигает содержимое регистровой пары (R2) (A) влево и младшие три разряда выводит на светодиоды.
18. Написать подпрограмму, определяющую количество единичных бит в байтах РПД по адресу 20Н 23Н. Полученный результат выставить на линиях порта 0, сопроводив его стробом на линии РЗ.6 и длительностью в одну секунду.
19. Написать программу, сканирующую линии порта 2. При наличии единицы на какой-либо линии записать в регистр с соответствующим номером текущее состояние младшего байта TL0 таймера Т0, предварительно запустив таймер на счет.