контроллер ATmega1281 (Всё по лабораторным работам БМТ)

2017-12-27СтудИзба

Описание файла

Файл "контроллер ATmega1281" внутри архива находится в следующих папках: Всё по лабораторным работам БМТ, 2. Документ из архива "Всё по лабораторным работам БМТ", который расположен в категории "". Всё это находится в предмете "электроника" из , которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "электроника и микропроцессорная техника" в общих файлах.

Онлайн просмотр документа "контроллер ATmega1281"

Текст из документа "контроллер ATmega1281"

;контроллер ATmega1281

;подключение файла заголовков регистров ввода вывода

.include "m128def.inc"

;.include "" ;файл куда можно записать изменения на портах ввода вывода

;определение имен некоторых регистров для дальнейшего использования их псевдонимов

.DEF klav=R20; регистр для сигнала нажатой кнопки

.DEF temp=R21; регистр для временной информации

.DEF what=R22; регистр для номера нажатой кнопки

.DEF for_trans=R17; регистр для числа, которое будет разбито на

; десятки и единицы

.DEF day_s=r2; регистр для хранения цифры десятков дня выполнения лабы

.DEF day_m=r3; регистр для хранения цифры единиц дня выполнения лабы

.DEF birth_s=r4; регистр для хранения цифры десятков дня рождения

.DEF birth_m=r5; регистр для хранения цифры единиц дня рождения

.DEF mes_s=r6; регистр для хранения цифры десятков месяца рождения

.DEF mes_m=r7; регистр для хранения цифры единиц месяца рождения

.DEF year1_s=r8; регистр для хранения цифры десятков первых двух цифр

; года рождения

.DEF year1_m=r9; регистр для хранения цифры единиц первых двух цифр

; года рождения

.DEF year2_s=r11; регистр для хранения цифры десятков вторых двух цифр

; года рождения

.DEF year2_m=r12; регистр для хранения цифры единиц вторых двух цифр

; года рождения

.DEF ind=R24; регистр для хранения цифры для индикации

.DEF ind2=R25; регистр для хранения кода для цифры индикации

;инициализация указателя стека

ldi r25, LOW(RAMEND); в регистр R25 загружается начальный байт указателя стека

out $3d, r25; по адресу регистра SPL записывается значение

; начального байта указателя стека

ldi r25, HIGH(RAMEND); в регистр R25 загружается конечный байт указателя стека

out $3e, r25; по адресу регистра SPL записывается значение

; конечного указателя стека

;инициализация портов ввода вывода

ldi temp, 0xff; в регистр temp заносится число ff.

out $04, temp; порт B программируется на вывод

; записью в регистр DDRB числа FF

out $07,temp; порт C программируется на вывод

; записью в регистр DDRC числа FF

clr temp;

out $0a, temp; порт D программируется на вывод

; записью в регистр DDRD числа 00

;запись чисел для вывода в регистры

;день лабы

ldi temp, 06; в регистр temp записывается число для дня лабы

mov for_trans, temp; копирование этого значения в регистр for_trans для

; дальнейшего преобразования

rcall translation; вызов процедуры выделения десятков и единиц из числа

mov day_s, r14; в регистр day_s копируется значение первой цифры числа

; дня выполнения лабы

mov day_m, r15; в регистр day_m копируется значение второй цифры числа

; дня выполнения лабы

;день рождения

ldi temp, 21; в регистр temp записывается число для дня рождения

mov for_trans, temp; копирование этого значения в регистр for_trans для

; дальнейшего преобразования

rcall translation; вызов процедуры выделения десятков и единиц из числа

mov birth_s, r14; в регистр birth_s копируется значение первой цифры ; числа дня рождения

mov birth_m, r15; в регистр birth_m копируется значение второй цифры ; числа дня рождения

;месяц рождения

ldi temp, 12; в регистр temp записывается число для месяца рождения

mov for_trans, temp; копирование этого значения в регистр for_trans для

; дальнейшего преобразования

rcall translation; вызов процедуры выделения десятков и единиц из числа

mov mes_s, r14; в регистр birth_s копируется значение первой цифры ; числа месяца рождения

mov mes_m, r15; в регистр birth_m копируется значение второй цифры ; числа месяца рождения

;первые две цифры года рождения

ldi temp, 19; в регистр temp записывается число первых двух цифр года

; рождения

mov for_trans, temp; копирование этого значения в регистр for_trans для

; дальнейшего преобразования

rcall translation; вызов процедуры выделения десятков и единиц из числа

mov year1_s, r14; в регистр year1_s копируется значение первой цифры ; первых двух цифр года рождения

mov year1_m, r15; в регистр year1_m копируется значение второй цифры ; первых двух цифр года рождения

;вторые две цифры года рождения

ldi temp, 86; в регистр temp записывается число вторых двух цифр года

; рождения

mov for_trans, temp; копирование этого значения в регистр for_trans для

; дальнейшего преобразования

rcall translation; вызов процедуры выделения десятков и единиц из числа

mov year2_s, r14; в регистр year2_s копируется значение первой цифры ; вторых двух цифр года рождения

mov year2_m, r15; в регистр year2_m копируется значение второй цифры ; вторых двух цифр года рождения

clr r15; очитска регистра r15

clr r14; очистка регистра r14

;основной блок программы

main:

;в данной программе происходит программная задержка микроконтроллера.

;задержка опроса клавиатуры составляет 1/10c. Достигается она с помощью

;вызова процедуры wait 3 раза, что обеспечивает загрузка в регистр R16

;числа 3. Процедура wait написана для обеспечения задержки порядка 1/30с.

;таким образом вызывая процедуру wait 3 раза с помощью меток w1 и rm

;можно обеспечить требуемое время задержки.

rcall opros_klavy; вызов процедуры опроса клавиатуры на нажатие одной

; или нескольких клавиш

ldi R16, 3 ; загрузка в регистр r16 числа 3 для обеспечения задержки

; опроса клавы

w1: cpi klav,1 ; сравнение регистра klav с 1

breq vyvod ; если в регистре состояния Z записана 1, то переход

; на процедуру вывода

rc: rcall wait ; вызов процедуры ожидания

rm: dec R16 ; уменьшение содержания регистра R16 на 1

brne w1 ; проверка последней операции на равенство 0. Если выполнено

; то переход на строчку вниз

rjmp main ; зацикливание программы

; процедура загрузки процессора вычислениями для отработки времени ожидания

; 3-ной вложенный цикл

wait:

; формирование задержки

; частота микроконтроллера равна 4 МГц. Следовательно на один такт тратится

; (1/40*10^6)c. для реализации задержки в 1/30c необходимо:

; (1/40*10^6)c/30=133000 тактов

; операции dec и brne занимают 1 такт. Следовательно для одного блока вложенного

; цикла требуется два такта. (пренебрегаем тем, что brne при выполнении условия

; занимает 2 такта)

; тогда 133000/(255*2)=261.

; Поучили максимальное значение внутреннего цикла R19=$ff

; 261/(65*2)=2

; Получили максимальные значения среднего и внешнего циклов R18=65, R20=2

;

ldi R19, 0xff ; загрузка в регистр r19 начального значения

; счетчика внутреннего цикла

ldi R18, 0x41 ; загрузка в регистр r18 начального значения счетчика

; среднего цикла

ldi R20, 0x02 ; загрузка в регистр r20 начального значения счетчика

; внешнего цикла

m2:

dec R19 ; уменьшение на 1 значение регистра r19

brne m2 ; если результат предыдущей операции равен 0,

; то переход на метку m2

ldi R19, 0xff; загрузка в регистр r19 начального значения счетчика

; внешнего цикла

dec R18 ; уменьшение на 1 значение регистра r18

brne m2 ; если результат предыдущей операции равен 0,

; то переход на метку m2

ldi R18, 0xff; загрузка в регистр r18 начального значения счетчика

; внешнего цикла

dec R20 ; уменьшение на 1 значение регистра r17

brne m2 ; если результат предыдущей операции равен 0,

; то переход на метку m2

=примерно 61000мкс=61мс=0.061с=16Гц

rjmp rm ; переход на метку rm (зацикливание программы)

;подпрограмма опроса состояния порта ввода (состояния нажатия каких-либо кнопок)

opros_klavy:

in temp, $0b; в регистр temp записывается значение на выводах порта D ($0b)

cpi temp, 0xfe; сравнение полученного значения с 1 - условие нажатия

; первой кнопки

breq b1 ; если результат выполнения предыдущей операции равен 0

; то переход на метку b1

cpi temp, 0xfd; сравнение полученного значения с 2 - условие нажатия

; второй кнопки

breq b2 ; если результат выполнения предыдущей операции равен 0

; то переход на метку b2

cpi temp, 0xfb; сравнение полученного значения с 3 - условие нажатия

; третьей кнопки

breq b3 ; если результат выполнения предыдущей операции равен 0

; то переход на метку b3

rjmp b0; в любом другом случае переход на метку b0

b0: ; метка для подготовки регистров для вывода дня выполнения лабы

ldi what, 0; в регистр what загружается информация о номере нажатой кнопки

ldi klav, 1; в регистр klav записывается единица - индикатор нажатия кнопки

ret;

b1: ; метка для подготовки регистров для вывода года рождения

ldi klav, 1; в регистр klav записывается единица - индикатор нажатия кнопки

ldi what, 1; в регистр what загружается информация о номере нажатой кнопки

ret;

b2: ; метка для подготовки регистров для вывода дня рождения

ldi klav, 1; в регистр klav записывается единица - индикатор нажатия кнопки

ldi what, 2; в регистр what загружается информация о номере нажатой кнопки

ret;

b3: ; метка для подготовки регистров для вывода месяца рождения

ldi klav, 1; в регистр klav записывается единица - индикатор нажатия кнопки

ldi what, 3; в регистр what загружается информация о номере нажатой кнопки

ret; возвращение в main

;подпрограмма вывода на порты вывода определенной информации

vyvod:

cpi what, 0 ; сравнение номера нажатой кнопки с 0 - выяснение какая

; кнопка нажата

breq no ; если результат выполнения предыдущей операции равен 0,

; то происходит переход на метку no

cpi what, 1 ; сравнение номера нажатой кнопки с 1 - выяснение какая

; кнопка нажата

breq s1 ; если результат выполнения предыдущей операции равен 0,

; то происходит переход на метку s1

cpi what, 2 ; сравнение номера нажатой кнопки с 2 - выяснение какая

; кнопка нажата

breq s2 ; если результат выполнения предыдущей операции равен 0,

; то происходит переход на метку s2

cpi what, 3 ; сравнение номера нажатой кнопки с 3 - выяснение какая

; кнопка нажата

breq s3 ; если результат выполнения предыдущей операции равен 0,

; то происходит переход на метку s3

no:

;вывод дня лабы

mov ind, day_s; в регистр ind заносится информация о первой цифре

; дня выполнения лабы

rcall cod7 ; вызов процедуры генерации кода цифры для отображения

ldi temp, 0xfe; в регистр temp заносится число, которое используется для ; первого регистра

out $05, temp; в порт B ($05) заносится номер индикатора

; на который пойдет отображение - 01

out $08, ind2; в порт С ($08) заносится код числа для отображения

mov ind, day_m; в регистр ind заносится информация о второй цифре дня

; выполнения лабы

rcall cod7 ; вызов процедуры генерации кода цифры для отображения

ldi temp, 0xfd; в регистр temp заносится число которое используется для ; выбора второго регистра

out $05, temp; в порт B ($05) заносится номер индикатора на который

; пойдет отображение - 02

out $08, ind2; в порт С ($08) заносится код числа для отображения

rjmp rc; переход на метку rc в основном блоке программы

s1:

;год рождения

mov ind, year1_s; в регистр ind заносится информация о первой цифре первых

; двух цифр года рождения

rcall cod7 ; вызов процедуры генерации кода цифры для отображения

ldi temp, 0xfe ; в регистр temp заносится число которое используется для ; выбора первого регистра

out $05, temp ; в порт B ($05) заносится номер индикатора на который

; пойдет отображение - 01

out $08, ind2 ; в порт С ($08) заносится код числа для отображения

mov ind, year1_m; в регистр ind заносится информация о второй цифре первых

; двух цифр года рождения

rcall cod7 ; вызов процедуры генерации кода цифры для отображения

ldi temp, 0xfd ; в регистр temp заносится число которое используется для ; выбора второго регистра

out $05, temp ; в порт B ($05) заносится номер индикатора на который

; пойдет отображение - 02

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее