You are on page 1of 7

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное


учреждение высшего образования
«Уральский Федеральный Университет имени первого
Президента России Б. Н. Ельцина» Физико-технологический
институт
Кафедра физических методов и приборов контроля качества

Отчёт по лабораторной работе №3


Модель микроконтроллера семейства MCS-51

Преподаватель: Моисейкин Е.В


Студент группы Фт-300009: Молина Б. Д.

Екатеринбург 2023
Цель работы
1. Изучить технологию программирования периферийных устройств
стенда SDK1.1, доступных через регистры ПлИС.
Задание 1

1. org 02000h 27.mov b, a


2. dpp data 84h 28.movx @r0, a
3. kb xdata 00h 29.movx a, @r0
4. sv xdata 07h 30.cpl a
5. mov r0, #sv 31.anl a, #0f0h
6. Lo: 32.jnz kb_cod
7. call getkey 33.inc r1
8. call putbyte 34.cjne r1, #4, KB_lp
9. sjmp Lo 35.mov a, #0ffh
10.putbyte: push dpp 36.sjmp kb_end
11.mov dpp, #08d 37.kb_cod: mov b, #0
12.movx @r0, A 38.mov c, acc.7
13.pop dpp 39.orl c, acc.5
14.ret 40.mov b.2, c
15.getkey: push psw 41.mov c, acc.7
16.push 0h 42.orl c, acc.6
17.push 1h 43.mov b.3, c
18.push b 44.mov a,b
19.push dpp 45.add a, r1
20.mov psw, 0h 46.kb_end: pop dpp
21.mov dpp, #08d 47.pop b
22.mov r0, #kb 48.pop 1h
23.mov r1, #0 49.pop 0h
24.mov b, #01111111b 50.pop psw
25.KB_lp: mov a, b 51.ret
26.rl a 52.end
Основная функция программы - опрос и вывод клавиш, которые нажимаются
на клавиатуре. Для этого используются две подпрограммы:
getkey: опрашивает клавиатуру и возвращает нажатую клавишу в регистре A.
putbyte: записывает содержимое регистра A в порт вывода.
В основной программе Lo происходит бесконечный цикл опроса клавиатуры
и вывода нажатых клавиш на экран.
Переменные dpp, kb, и sv используются для хранения данных в разных
сегментах памяти. Переменная r0 используется для хранения адреса сегмента
памяти sv. Переменные r1, a, b, и c используются как регистры общего
назначения.

Задание 2
1. org 02000h
2. dpp data 84h
3. ena xdata 04h
4. buz bit acc.2
5. mov r0, #ena
6. mov a,#20h
7. loop: setb buz
a. call putbyte
b. call delay
c. clr buz
d. call putbyte
e. call delay
f. sjmp loop
g. delay: mov r1, #0E6h
h. djnz r1, $
i. ret
8. putbyte: push dpp
9. mov dpp, #08d
10.movx @r0, A
11.pop dpp
12.ret
13.end

Данный код написан на ассемблере и используется для генерации звука с


помощью встроенного излучателя звука в микроконтроллер.
Здесь задаются начальные параметры:
 org 02000h - задает начальный адрес программы
 dpp data 84h - устанавливает начальный адрес внутренней
оперативной памяти (RAM)
 ena xdata 04h - задает начальный адрес внешней памяти (ROM)
 buz bit acc.2 - определяет, что бит 2 регистра acc будет использоваться
для управления звуковым излучателем.
Затем инициализируется переменная r0 с адресом ena, который указывает на
начало внешней памяти, где расположен излучатель звука. Затем переменной
a присваивается значение 20h, которое будет использоваться для генерации
звукового сигнала.
Далее идет бесконечный цикл loop, который управляет генерацией звука.
Сначала бит 2 регистра acc устанавливается, затем вызывается функция
putbyte, которая записывает значение переменной a в адрес излучателя звука.
После этого вызывается функция delay, которая задерживает выполнение
программы на некоторое время. Затем бит 2 регистра acc сбрасывается, и
функция putbyte вызывается еще раз, записывая в излучатель звука значение
a.
Далее снова вызывается функция delay, а затем выполнение переходит на
начало цикла loop.
Функция delay просто задерживает выполнение программы на некоторое
время, путем уменьшения счетчика r1 от 0E6h до 0.
Функция putbyte устанавливает указатель данных dpp на адрес 8-битного
регистра, который связан с излучателем звука. Затем она записывает значение
переменной a в адрес излучателя звука.
Общая суть работы программы заключается в генерации звуковых сигналов с
помощью встроенного излучателя звука, которые будут периодически звучать
через равные промежутки времени, определяемые функцией delay.

Задание 3
1. org 2000h
2. dpp data 84h
3. sv xdata 07h
4. mov r0, #sv
5. call uart_ini
6. loop: jnb scon.0, $
a. mov a, sbuf
b. clr scon.0
c. call svdisp
d. mov sbuf, a
e. jnb scon.1, $
7. clr scon.1
a. sjmp loop
8. s9600 equ 0fdh
9. uart_ini: mov th1, #s9600
i. orl tmod, #20h
ii. anl pcon, #not(80h)
iii. orl tcon, #40h
iv. mov scon, #50h
v. clr ie.4
vi. ret
10.svdisp: push dpp
a. mov dpp, #08d
11.movx @r0, A
i. pop dpp
ii. ret
12.end
Этот код на языке ассемблера предназначен для программирования УАПП
(универсальный асинхронный приемопередатчик) для связи между
устройствами. Он настроен на скорость передачи 9600 бод.
Функция uart_ini настраивает UART, устанавливая скорость передачи, режим
таймера, режим передачи данных, разрешение прерываний и прочие
настройки.
В основном цикле программы loop происходит прием данных из входного
буфера UART (sbuf) и вывод их на экран при помощи вызова функции svdisp.
Для передачи данных на другое устройство, данные записываются в буфер
sbuf.
Функция svdisp предназначена для вывода символа на экран. В данном
случае, символ выводится на экран через порт sv.

Реальным использованием данного кода может быть например обмен


данными между микроконтроллером и компьютером или другими
устройствами, такими как датчики, сенсоры
Данный код выполняет следующие действия:
1. С помощью команды "opencom1" открывается последовательный порт
COM1 на скорости 9600 бит/с.
2. Затем с помощью команды "addhexstart" создается массив с именем
"uart1.hex", начинающийся с адреса 0x02000 и имеющий размер 0x0
(т.е. пустой массив).
3. Командой "loadhex" загружается содержимое файла "uart1.hex" в
память микроконтроллера.
4. Командой "0 term" переводится монитор T2 в режим эмуляции
терминала с выводом символов на экран.
5. Командой "echo jeremmy" создается файл с именем "jeremmy" для
вывода, в который будут записываться все символы, полученные через
последовательный порт.
6. Командой "+echo" включается режим записи в файл "jeremmy".
7. Командой "0 term" переключается режим T2 на вывод символов в
шестнадцатеричном коде.
8. Командой "1 term" переключается режим T2 на вывод символов в
символьном виде.
9. Командой "-echo" выключается режим записи в файл "jeremmy".
10.Командой "bye" завершается работа монитора и производится запись
содержимого вывода в файл "jeremmy".
Таким образом, данный код открывает COM1 порт, создает пустой массив в
памяти микроконтроллера, загружает его содержимое, переключает монитор
T2 на вывод символов и запись в файл "jeremmy", выводит символы в
различных режимах (шестнадцатеричный код и символьный вид) и
записывает полученную информацию в файл "jeremmy". После завершения
работы монитора содержимое вывода будет сохранено в созданный файл
"jeremmy".

Вывод
все три кода используют регистры ПЛИС для управления периферийными
устройствами на SDK1.1. Код 1 считывает данные с клавиатуры и выводит их
на светодиоды, код 2 управляет зуммером и выводом данных, а код 3
устанавливает параметры связи UART для обмена данными с другими
устройствами. Каждый код используется в разных целях, но все они
демонстрируют, как использовать регистры ПЛИС для управления
периферийными устройствами на SDK1.1.

You might also like