«Взаимодействие двух стендов SDK1.1 через последовательный интерфейс» Методические указания к практическим занятиям

реклама
Уральский государственный технический университет -УПИ
Кафедра экспериментальной физики
Методические указания к практическим занятиям
«Взаимодействие двух стендов SDK1.1 через
последовательный интерфейс»
курс: Цифровые и микропроцессорные устройства
Составил: доцент Хохлов К.О.
Екатеринбург 2007
Содержание:
Введение .........................................................................................................................................3
1. Блок-схема программы .............................................................................................................4
2. Текст программы. ......................................................................................................................5
2.1 Блок инициализации INIT...................................................................................................5
2.2 Основная часть программы (блок main). ...........................................................................6
Вывод ..............................................................................................................................................8
Приложение....................................................................................................................................9
2
Введение
В качестве задания на практическое занятие было предложено написать
программу вывода кода нажатой клавиши на одном стенде на жидкокристаллический
дисплей (ЖКИ) другого учебного стенда, используя внешний параллельный порт
ввода-вывода в качестве последовательного интерфейса.
Задача состоит в обеспечении взаимодействия двух микроконтроллеров
ADuC812 (ADuC842) учебных стендов SDK1.1 через последовательный интерфейс, а
именно, в приеме байта кода нажатой клавиши через внешний параллельный порт и
вывод данного байта на ЖКИ.
3
1. Блок-схема программы
Начало
Блок инициализации init
Основной блок main
Запрет всех прерываний
Считывание с d1
Загрузка бита в регистр
Счетчик прерываний
Вывод байта на ЖКИ
Разрешение прерываний
Конец
4
2. Текст программы.
Для организации приема байта будем использовать внешний параллельный
порт ввода-вывода, точнее его первые два бита d0 и d1. В качестве передачи (приема)
сигнала синхронизации будет выступать бит d0, а в качестве самой линии передачи
данных бит d1.
Нам понадобятся следующие значения:
 Регистр EXT_LO (младший байт внешнего порта ввода-вывода) имеет
адрес 080002h;
2.1 Блок инициализации INIT
В этом блоке задаются значения регистров r1 и EXT_LO.
init:
mov r1,#00h;
mov ro,#04h;
call
putbyte

Регистр R1 будет использоваться как счетчик полученных битов и для
определения приема байта, изначально регистр обнулим:
R1 ← 00000000b (или 00h);
 Для ввода данных через внешний порт ввода-вывода (используем младший
байт) установим бит ENA.0, который имеет адрес 04h, в состояние логического
нуля, при этом использовали подпрограмму putbyte.
5
2.2 Основная часть программы (блок main).
main: clr
load: clr
mov
call
jnb
setC: jb
jnb
clr
mov
rlc
mov
inc
jb
setb
call
EA; запрет всех прерываний;
A; очистили аккумулятор;
ro,#02h; загрузили в регистр адрес регистра EXT_LO;
inbyte; загрузили байт с внешнего порта в аккумулятор;
acc.0, load
acc.1,set1; начало цикла определения значения принимаемого бита;
acc.1,set0;
A;
A,B; регистр В используется в качестве промежуточного буфера;
A; сдвиг аккумулятора влево через перенос для формирования
принимаемого байта;
B,A; пересылка в регистр В из аккумулятора;
r1; инкремент регистра r1, значение в регистре показывает номер
загружаемого бита;
r1.3,putchar; при загрузке восьмого бита (т.е. сформированного байта)
выполняется вывод полного принятого байта на ЖКИ;
EA; разрешение прерываний
main; вызов подпрограммы main;
setb C; установка бита переноса в логическую единицу «1»;
ret
set0: clr
C; установка бита переноса в логический ноль «0»;
ret
Подпрограмма putchar выводит на ЖКИ байт, находящийся в аккумуляторе А.
set1:
putchar: mov
push
anl
push
push
mov
mov
movx
clr
mov
mov
mov
clr
movx
setb
movx
clr
movx
pop
pop
pop
retI
A,B;
psw
psw,#11100111b;
0h;
dpp
dpp,#08d;
r0,#DATA_IND;
@r0,A;
RW;
c,RS;
acc.2,c;
r0,#C_IND;
E;
@r0,A;
E;
@r0,A;
E;
@r0,A;
dpp
0h ;
psw
6
Подпрограммы putbyte и inbyte являются вспомогательными, они используются для
работы с регистрами и обращению к внешней памяти и внешним устройствам.
putbyte: push
mov
movx
pop
ret
dpp;
dpp,#08d;
@r0,A;
dpp;
inbyte: push
mov
movx
pop
ret
end
dpp;
dpp,#08d;
A,@r0;
dpp;
Полный текст программы приведен в приложении.
7
Вывод
Написана программа приема байта данных через внешний порт ввода-вывода
(использовались биты d0 и d1) и отображении этого байта на ЖКИ.
В ходе написания программы были закреплены знания по устройству стенда
SDK1.1 (микроконтроллеры ADuC841 и ADuC842), а именно:
 устройство памяти стенда;
 форматы и способы адресации команд;
 команды пересылки и побитовой обработки информации;
 регистры специальных функций и система прерываний;
8
Приложение
Программа, которая осуществляет прием байта через внешний порт вводавывода и отображает код нажатой клавиши (на первом стенде) на ЖКИ:
.CODE
.ORG
jmp
.ORG
init:
mov
mov
mov
mov
call
0000h;
init;
0100h;
R1,#00h;
B,00h;
A,00h;
ro,#04h;
putbyte
main: clr
load: clr
mov
call
jnb
setC: jb
jnb
clr
mov
rlc
mov
inc
jb
setb
call
EA;
A;
ro,#02h;
inbyte
acc.0, load
acc.1,set1
acc.1,set0
A;
A,B;
A;
B,A;
r1;
r1.3,putchar
EA;
main
set1:
C;
set0:
setb
ret
clr
ret
C;
putchar: DATA_IND xdata 01h ;
C_IND
xdata 06h ;
E
BIT acc.0
RW BIT acc.1
RS
BIT F0
mov A,B;
push psw
anl
psw,#11100111b;
push 0h;
push dpp
mov dpp,#08d;
mov r0,#DATA_IND;
movx @r0,A;
clr
RW;
mov c,RS;
9
mov
mov
clr
movx
setb
movx
clr
movx
pop
pop
pop
retI
acc.2,c;
r0,#C_IND;
E;
@r0,A;
E;
@r0,A;
E;
@r0,A;
dpp
0h ;
psw
putbyte: push
mov
movx
pop
ret
dpp;
dpp,#08d;
@r0,A;
dpp;
inbyte: push
mov
movx
pop
ret
end
dpp;
dpp,#08d;
A,@r0;
dpp;
10
Скачать