Программа управления состоянием светодиода по нажатию кнопки на языке Assembler (усложненная)
Код программы:
LDI
r16, 0b00000000
OUT
DDRB, r16
LDI
r16, 0b00000010
OUT
PUEB, r16
LDI
r16, 0b00100000
OUT
DDRA, r16
LDI
r16, 0b00000000
OUT
PORTA, r16
Main:
IN
r16, PINB
SBRS
r16, 1
RCALL
Blink
SBRC
r16, 1
LDI
r17, 0b00100000
SBRC
r16, 1
OUT
PORTA, r17
RJMP
Main
.equ
LowByte = 255
.equ
MedByte = 255
.equ
HighByte = 4
Blink:
LDI
r18, 0b00000000
OUT
PORTA, r18
RCALL
Delay
LDI
r18, 0b00100000
OUT
PORTA, r18
RCALL
Delay
RET
Delay:
LDI
r19, LowByte
LDI
r20, MedByte
LDI
r21, HighByte
loop:
DEC
r19
BRNE
loop
DEC
r20
BRNE
loop
DEC
r21
BRNE
loop
RET
По сути, данная
программа является комбинацией программ
из п. 1 и п. 3, и результат её выполнения
заключается в мигании светодиода при
нажатой кнопке на плате, и отключение
светодиода при её отпускании.
Выводы:
Микроконтроллер является сложным, по
своей структуре, устройством. Написание
даже простых программ для такого
устройства требует знания и понимания
происходящих внутри процессов. Полезным,
в процессе написания алгоритмов, является
умение использовать разные подходы к
реализации поставленных задач, в
частности, выбор языка программирования.
Оба, из использованных
языков, имеют свои преимущества и
недостатки. Так, в Ассемблере, мы имеем
наиболее близкую к машинному языку
логику, что позволяет максимально
оптимизировать код, но с другой стороны
отнимает больше времени и требует больше
усилий со стороны разработчика. В Си, в
свою очередь, гораздо более простой
синтаксис, но так как он является
высокоуровневым языком, мы в меньшей
степени понимаем логику происходящего
внутри МК, что тоже, в некоторых случаях,
может быть недостатком.