Обработка сигналов на основе MCS-51
В данном курсовом проекте рассматриваются практические примеры и их программная реализация на языке ассемблера для микроконтроллера семейства MCS-51 (МК51).
При рассмотрении решения задач, связанных с генерацией временных интервалов и работой последовательного порта предполагается использование МК с частотой задающего генератора равной 12 МГц.
1. Использование команд передачи данных
Пример 1. Передать содержимое буфера последовательного адаптера в резидентную память данных по косвенному адресу в R0:
MOVВа @R0, SBUF; передача принятого по последовательному каналу; байта в РПД.
Пример 2. Записать в ячейки РПД с адресами 39 и 40 число FA1BH:
LOAD:ВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа MOVВаВаВаВаВаВаВаВаВа 39H,#0FAH
MOVВа 40H,#1BH
Пример З. Загрузить в указатель данных начальный адрес 4300Н массива данных, расположенного во внешней памяти данных:
MOV DPTR,#4300НВаВаВа ; загрузка начального значения указателя данных.
Пример 4. Загрузить управляющее слово в регистр управления таймером:
MOV TCON,#00000101В; разрешение внешних прерываний по низкому уровню сигнала.
Пример 5. Сбросить все флажки пользователя (биты) в резидентной области памяти от 20Н до 2FH:
MOVВа R0,#20НВаВа ; заданный начальный адрес области памяти
MOVВа Rl,#0FHВаВа ; загрузить счетчик (длина области памяти)
LOOP: MOVВаВаВаВаВаВаВа @R0,#0 ВаВаВаВа ; снять один байт (8 флажков)
INCВаВаВаВа R0ВаВаВаВаВаВаВаВаВаВаВа ; переход к следующему байту
DJNZВа R1, LOOP ; цикл, если не все флажки сброшены
Пример 6. Передать управление по метке L0, если счетчик 0 достиг значения 128:
MOVВа A, TL0ВаВаВаВаВа ; передача содержимого счетчика в аккумулятор
JBВаВаВаВаВаВа А.7, L0ВаВаВаВа ; перейти на L0, если А.7=1
тАж
L0:ВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа ; продолжение программы
Пример Запомнить во внешней памяти данных содержимое регистров
банка 0. Начальный адрес ВПД тАУ 2000Н:
MOVВа PSW,#00010000B; выбор банка регистров 1
MOVВа R0,#8ВаВаВаВаВаВа ; счетчик Вм 8
MOVВа DPTR, #2000H; определение начального адреса ВПД
MOVВа Rl,#0ВаВаВаВаВаВаВа ; определение начального адреса РПД
LOOP: MOVВаВаВаВаВаВаВа A,@R1ВаВаВаВаВаВа ; (А) Вм (регистр)
MOVXВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа @DPTR, A; передача из аккумулятора в ВПД
INCВаВаВаВа RlВаВаВаВаВаВаВаВаВаВаВаВа ; переход к следующему регистру
INCВаВаВаВа DPTRВаВаВаВаВаВа ; приращение указателя адреса
DJNZВа R0, LOOP ; R0=R0тАУ1, если R0>0 то повторить цикл
Пример 8. Обращение к памяти программ, где сохраняется готовая таблица значений. Для этого используется специальная команда MOVC. Например: программа для выбора значений функции синуса из таблицы с точностью 0,4% и дискретом 1В°. Начальный параметр для подпрограммы есть значения угла х, которое находится в аккумуляторе. Данная программа работает без указателя данных DPTR. Инкремент аккумулятора перед обращением к таблице необходим в связи с использованием однобайтной команды возврата. Таблица синусов занимает в памяти 90 байтов.
; вычисление sin(x) по таблице значений: вход (А)Вм(х), хÎ(0,89В°);
; выход (А) Вм дробная часть значения синуса
SIN:ВаВаВа INCВаВаВаВаВаВаВаВаВа AВаВаВаВаВа ; инкремент аккумулятора
MOVCВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа А,@А+РСВа ; загрузка значения синуса из таблицы
RETВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа ; возвращение
; таблица синусов
SINUS: DB 00000000В; SIN (0)=0
DB 00000100ВВаВа ; SIN (1)=0,017 DB 00001001В; SIN (2)=0,035
тАжтАжтАжтАжтАжтАжтАжтАжтАж
DB 11111111ВВаВа ; SIN (89)=0,999
Пример 9. Операции со стеком и организация прерываний. Механизм доступа к стеку MCS-51: перед записью в стек содержимое регистра-указателя стека SP инкрементируется, а после чтения данных из стека декрементируется.
После начальной установки ОМЭВМ в SP заносится начальное значение 07Н. Для переопределения начального значения SP можно использовать команду MOV SP, #data16.
Таким образом, стек может быть расположен в любом месте РПД. Стек используется для организации обращения к подпрограммам и при обработке прерываний. Кроме того, может использоваться для временного хранения значений регистров специальных функций.
Подпрограмма обработки прерываний.
ORGВаВа 3ВаВаВаВаВаВаВаВаВаВаВаВаВаВа ; задание адреса вектора прерываний
SJMPВа SUBINOВаВа ; переход на подпрограмму обработки
ORGВаВа 30Н
SUBINO: PUSH PSWВа ; сохранение в стеке PSW
PUSH AВаВаВаВаВаВаВаВаВаВаВаВаВа ; сохранение в стеке аккумулятора А
PUSH ВВаВаВаВаВаВаВаВаВаВаВаВаВа ; сохранение в стеке дополнения-аккумулятора В
PUSH DPL ВаВаВаВаВаВаВаВа ; сохранение в стеке DPTR
PUSH DPH ВаВаВаВаВаВаВа ; сохранение в стеке DPTR
MOVВа PSW,#00001000B; выбор другого банка регистров (1)
.
обработка прерываний
.
POPВаВаВа DPHВаВаВаВаВаВаВаВа ; восстановление DPTR
POPВаВаВа DPL ВаВаВаВаВаВаВаВа ; восстановление DPTR
POPВаВаВа В ВаВаВаВаВаВаВаВаВаВаВаВа ; восстановление В
POPВаВаВа A ВаВаВаВаВаВаВаВаВаВаВаВа ; восстановление аккумулятора
POPВаВаВа PSW ВаВаВаВаВаВаВа ; восстановление PSW и банка регистров 0
RETIВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВаВа ; возвращение в основную программу
Если SP=1FH, размещение регистров в стеке после входа в подпрограмму обработки будет таким, как показано на рис. 1.
7FH | ||
26H | DPH | Вм(SP) |
25H | DPL | |
24H | В | |
23H | А | |
22H | PSW | |
21H | РСН | Указатель Вм(счетчик) команд PC |
20H | PCL | |
1FH | ||
00H |
Вместе с этим смотрят:
IP-телефония. Особенности цифровой офисной связи