
Лабораторные работы готовые / Лабораторная работа 2 Специальный регистр состояния SREG
.docxЗадание 1
Разработать программу на языке Assembler, реализующую бегущий огонь в
младшем полубайте PORTC от младшего бита к старшему, при этом при
достижении границы младшего полубайта бегущий огонь движется от старшего
бита к младшему. При достижении нулевого бита процесс повторяетсяc
Программа
reset: ; инициализация портов ввода/вывода
ldi r16,0xFF
out DDRC,r16 ; установка PORTС на вывод информации
NACH:
ldi r16,0x01 ; начальное положение бегущено огня (бит 0)
main:
out PORTC,r16 ; значение выводится на PORT
lsl r16 ; r16 сдвигается влево на 1 разряд
brhc main ; если флаг H снят, то на main
/*brhs m1 ; при Z=1 выполняется переход на m1*/
m1:
lsr r16 ; r16 сдвигается вправо на 1 разряд
out PORTC,r16 ; значение выводится на PORT
brne m1 ; если флаг H снят, то на m1
/*brhs main ; при Z=1 выполняется переход на main*/
rjmp NACH
Задание 2
Разработать программу на языке Assembler, выполняющую вычитание двух
чисел C = |A – B|, при этом знак числа указывается в старшем разряде.
Программа
.include "m32def.inc"
.cseg ;выбор сегмента программного кода
.org 0 ;установка текущего адреса на ноль
reset:
ldi r16,0xFF
out DDRD,r16 ;установка PORTD на вывод информации
ldi r17,0x00
out DDRC,r17
main:
in r16,PINC ;опрос PINC с занесением результата в r16
mov r17,r16 ;копирование результата в r17
mov r18,r16
andi r17,0x0F ;обнуление всех бит, кроме 0,1.2.3
andi r18,0xF0 ;обнуление всех бит, кроме 4,5,6,7
lsr r18
lsr r18
lsr r18
lsr r18
sub r17,r18
flag:
brmi otric
out PORTD,r17
rjmp main
otric:
com r17
inc r17
ori r17,0b10000000
out PORTD, r17
rjmp main