Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание N 8.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
172.54 Кб
Скачать

5. Содержание отчета

  • Задание по лабораторной работе;

  • Текст программы с комментариями;

  • Краткое описание организации службы времени в микроконтроллере.

  1. Пример выполнения задания.

Написать систему программ , в которой подпрограмма вывода массива кодов вызывается каждые 1000 мкс. Обработчик прерывания от таймера 0 инкрементирует содержимое ячейки ADRT=50h. Первая программа выполняет циклический анализ содержимого ADRT и вызывает подпрограмму вывода массива кодов в порт Р1. Программа распологается начиная с адреса ADR0=4C8h. Программа должна состоять из двух частей. Первая часть инициализация системы, вторая – анализ содержимого ADRT=3Bh и вызов подпрограммы.

Вторая программа – должна распологаться начиная с адреса ADR1=5E3h. Она должна при каждом обращении передавать в порт Р1 массив длиной 6, расположенный начиная с адреса ADR2=245h.

Выберем начальную константу для таймера таким образом, чтобы прерывание от него поступало каждые 100 мкс. Так как максимальное число в таймере 255, следовательно начальное его значение должно быть 255-100=155=9Bh. Для задания интервала 1000 мкс в ячейке ADRT должен проверяться код 10=Ah.

Программа будет иметь следующий вид:

org 0

jmp start ; переход на начало программы

; обработчик прерывания от ТС0

org 0Bh прерывание от таймера-счетчика ТС0

inc 50h ; увеличение ADRT на 1

reti; возврат из прерывания

; организация массива

org 254h объявление массива

db 'Ivanov'

; начало основной программы

org 4C8h начало программы

;первая часть программы - инициализация

start:

mov dptr, #254h; в DPTR записать базу массива

mov tmod, #2; настроить ТС0 в режим 2

mov tl0, #9Bh; начальное значение для ТС0

mov th0, #9Bh; перезагружаемое значение для ТС0

mov ie, #10000010b; разрешить прерывание от ТС0

setb tr0; запустить таймер

; вторая часть программы анализ ADRT и вызов подпрограммы вывода

begin:

mov 50h,#0; инициализация ячейки ADRT

m:

mov a,50h; считать содержимое ADRT

cjne a,#0Ah,m; сравнить c числом 10

call vivod; вызов подпрограммы вывода

jmp begin; переход на начало вывода

; организация подпрограммы

org 5E3h ; подпрограмма вывода

vivod:

mov r0,#0; номер выводимого элемента массива

next:

mov a,r0; в А номер выводимого элемента

movc a,@a+dptr; извлечь элемент массива

mov P1,a; вывести

inc r0; перейти к следующему элементу

cjne r0,#6,next ; проверить все элементы выведены, если нет, то продолжить

ret; возврат из подпрограммы

end

6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]