контроллер ATmega1281 (Всё по лабораторным работам БМТ), страница 2
Описание файла
Файл "контроллер ATmega1281" внутри архива находится в следующих папках: Всё по лабораторным работам БМТ, 2. Документ из архива "Всё по лабораторным работам БМТ", который расположен в категории "". Всё это находится в предмете "электроника" из , которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "электроника и микропроцессорная техника" в общих файлах.
Онлайн просмотр документа "контроллер ATmega1281"
Текст 2 страницы из документа "контроллер ATmega1281"
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
mov ind, year2_s; в регистр ind заносится информация о первой цифре вторых
; двух цифр года рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfb ; в регистр temp заносится число которое используется для ; выбора третьего регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 03
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
mov ind, year2_m; в регистр ind заносится информация о второй цифре вторых
; двух цифр года рождения
rcall cod7 ; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xf7 ; в регистр temp заносится число которое используется для ; выбора четвертого регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 04
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
rjmp rc ; переход на метку rc в основном блоке программы
s2:
;день рождения
mov ind, birth_s; в регистр ind заносится информация о первой цифре дня ; рождения
rcall cod7 ; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfe ; в регистр temp заносится число которое используется для ; выбора первого регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 01
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
mov ind, birth_m; в регистр ind заносится информация о второй цифре дня ; рождения
rcall cod7 ; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfd ; в регистр temp заносится число которое используется для ; выбора второго регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 02
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
rjmp rc ; переход на метку rc в основном блоке программы
s3:
;месяц рождения
mov ind, mes_s ; в регистр ind заносится информация о первой цифре месяца ; рождения
rcall cod7 ; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfb ; в регистр temp заносится число которое используется для ; выбора третьего регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 03
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
mov ind, mes_m ; в регистр ind заносится информация о второй цифре месяца ; рождения
rcall cod7 ; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xf7 ; в регистр temp заносится число которое используется для ; выбора четвертого регистра
out $05, temp ; в порт B ($05) заносится номер индикатора на который
; пойдет отображение - 04
out $08, ind2 ; в порт С ($08) заносится код числа для отображения
rjmp rc ; переход на метку rc в основном блоке программы
;подпрограмма выделения цифр десятков и единиц из 2-х значного числа
translation:
BCD8:
clr r14; очистка регистра r14
clr r15; очистка регистра r15
BCD8_1:
SUBI for_trans,10; Определяем цифру десятков.
; Вычитаем 10 из значения регистра
Brcs BCD8_2; Перейти на метку BCD8_2, если установлен признак переноса,
; то есть если получилось отрицательное число
INC r14; Увеличить на 1 содержимое регистра, т.е. цифру десятков.
; Поскольку нет отрицательного числа
RJMP BCD8_1; Переход на метку BCD8_1. Если нет отрицательного
; результата вычитания
BCD8_2:
SUBI for_trans,-10; для восстановления цифры единиц после получения
; отрицательного числа прибавляем к полученному значению
; число 10
mov r15, for_trans; перенос в регистр r15 значения for_trans,
; то есть цифры единиц
Ret; возврат в место, откуда была вызвана подпрограмма
;процедура формирования кода для индикатора для отображения информации
Cod7:
cpi ind,0; сравниваем значение в регистре ind с 0
Brne DTI1; если бит регистра состояния Z не равен 0, переход по метке DTI1
LDI ind2, 0x3F; загрузка в регистр ind2 двоичного кода для вывода "0"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI1:
cpi ind,1; сравниваем значение в регистре ind с 1
Brne DTI2; если бит регистра состояния Z не равен 0, переход по метке DTI2
LDI ind2, 0x06;загрузка в регистр ind2 двоичного кода для вывода "1"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI2:
cpi ind,2; сравниваем значение в регистре ind с 2
Brne DTI3; если бит регистра состояния Z не равен 0, переход по метке DTI3
LDI ind2, 0x5b;загрузка в регистр ind2 двоичного кода для вывода "2"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI3:
cpi ind,3; сравниваем значение в регистре ind с 3
Brne DTI4; если бит регистра состояния Z не равен 0, переход по метке DTI4
LDI ind2, 0x4F;загрузка в регистр ind2 двоичного кода для вывода "3"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI4:
cpi ind,4; сравниваем значение в регистре ind с 4
Brne DTI5; если бит регистра состояния Z не равен 0, переход по метке DTI5
LDI ind2, 0x66;загрузка в регистр ind2 двоичного кода для вывода "4"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI5:
cpi ind,5; сравниваем значение в регистре ind с 5
Brne DTI6; если бит регистра состояния Z не равен 0, переход по метке DTI6
LDI ind2, 0x6d;загрузка в регистр ind2 двоичного кода для вывода "5"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI6:
cpi ind,6; сравниваем значение в регистре ind с 6
Brne DTI7; если бит регистра состояния Z не равен 0, переход по метке DTI7
LDI ind2, 0x7d;загрузка в регистр ind2 двоичного кода для вывода "6"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI7:
cpi ind,7; сравниваем значение в регистре ind с 7
Brne DTI8; если бит регистра состояния Z не равен 0, переход по метке DTI8
LDI ind2, 0x07;загрузка в регистр ind2 двоичного кода для вывода "7"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI8:
cpi ind,8; сравниваем значение в регистре ind с 8
Brne DTI9; если бит регистра состояния Z не равен 0, переход по метке DTI9
LDI ind2, 0x7F;загрузка в регистр ind2 двоичного кода для вывода "8"
RJMP DTIEnd; безусловный переход на метку DTIEnd
DTI9:
LDI ind2, 0x6F;загрузка в регистр ind2 двоичного кода для вывода "9"
DTIEnd:
ret; возвращение в программу, вызвавшую эту
Варианты выполнения программы:
-
Не нажата ни одна из кнопок:
Первый индикатор: Второй индикатор:
-
Нажата S1
Первый индикатор Второй индикатор
Т ретий индикатор Четвертый индикатор
-
Нажата S2.
П ервый индикатор Второй индикатор
-
Нажата S3.
Т ретий индикатор Четвертый индикатор
Т аблица соответствий
0 | 3F |
1 | 06 |
2 | 5B |
3 | 4F |
4 | 66 |
5 | 6D |
6 | 7D |
7 | 07 |
8 | 7F |
9 | 6F |