контроллер ATmega8535 (Всё по лабораторным работам БМТ), страница 2
Описание файла
Файл "контроллер ATmega8535" внутри архива находится в следующих папках: Всё по лабораторным работам БМТ, 3. Документ из архива "Всё по лабораторным работам БМТ", который расположен в категории "". Всё это находится в предмете "электроника" из , которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "электроника и микропроцессорная техника" в общих файлах.
Онлайн просмотр документа "контроллер ATmega8535"
Текст 2 страницы из документа "контроллер ATmega8535"
out portc, ind2; в порт С заносится код числа для отображения
ldi ch1, 2; восстановление значения ch1 для дальнейшей правильной работы по
; по прерываниям
ret; переход на метку rc в основном блоке программы
s1:
;год рождения
mov ind, year1_s; в регистр ind заносится информация о первой цифре первых
двух цифр года рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfe; в регистр temp заносится число которое используется для выбора
; первого регистра
out portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 01
out portc, ind2; в порт С заносится код числа для отображения
mov ind, year1_m; в регистр ind заносится информация о второй цифре первых
; двух цифр года рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfd; в регистр temp заносится число которое используется для выбора
; второго регистра
out portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 02
out portc, ind2; в порт С заносится код числа для отображения
mov ind, year2_s; в регистр ind заносится информация о первой цифре вторых
; двух цифр года рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfb; в регистр temp заносится число которое используется для выбора
; третьего регистра
out portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 03
out portc, ind2; в порт С заносится код числа для отображения
mov ind, year2_m; в регистр ind заносится информация о второй цифре вторых
; двух цифр года рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xf7; в регистр temp заносится число которое используется для выбора
; четвертого регистра
out portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 04
out portc, ind2; в порт С заносится код числа для отображения
ldi ch1, 2; восстановление значения ch1 для дальнейшей правильной работы по
; по прерываниям
ret; переход на метку rc в основном блоке программы
s2:
;день рождения
mov ind, birth_s; в регистр ind заносится информация о первой цифре дня рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfe; в регистр temp заносится число, которое используется для выбора
; первого регистра
out portb, temp; в порт B заносится номер индикатора, на который пойдет отображение - 01
out portc, ind2; в порт С заносится код числа для отображения
mov ind, birth_m; в регистр ind заносится информация о второй цифре дня рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfd; в регистр temp заносится число, которое используется для выбора
; второго регистра
out portb, temp; в порт B заносится номер индикатора, на который пойдет отображение - 02
out portc, ind2; в порт С заносится код числа для отображения
ldi ch1, 2; восстановление значения ch1 для дальнейшей правильной работы по
; по прерываниям
ret; переход на метку rc в основном блоке программы
s3:
;месяц рождения
mov ind, mes_s; в регистр ind заносится информация о первой цифре месяца рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xfb; в регистр temp заносится число, которое используется для выбора
; третьего регистра
out portb, temp; в порт B заносится номер индикатора, на который пойдет отображение - 03
out portc, ind2; в порт С заносится код числа для отображения
mov ind, mes_m; в регистр ind заносится информация о второй цифре месяца рождения
rcall cod7; вызов процедуры генерации кода цифры для отображения
ldi temp, 0xf7; в регистр temp заносится число которое используется для выбора
; четвертого регистра
out portb,temp; в порт B заносится номер индикатора на который пойдет отображение - 04
out portc, ind2; в порт С заносится код числа для отображения
ldi ch1, 2; восстановление значения ch1 для дальнейшей правильной работы по
; по прерываниям
ret; переход на метку 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; возвращение в программу вызвавшую эту