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

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

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

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

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

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

Проверка работы программы.

Поскольку в сравнении с предыдущей лабораторной работой изменилась только процедура реализации задержки, проверку будем вести именно по реализации программной задержки. Для этого проверим за какое время контроллер достигает строчек:

trans1:

rcall opros_klavy

rjmp m2

trans2:

rcall vyvod;

rjmp m3

Результаты тестов:

для процедуры вывода: - Частота примерно 30 Гц

для процедуры опроса: - Частота примерно 10Гц

Временные задержки получены правильно

Листинг:

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

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

.include "8535def.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; регистр для хранения кода для цифры индикации

.DEF ch=R18; регистр для хранения значения делителя для клавы

.DEF ch1=R19; регистр для хранения значения делителя для вывода

.org 0 ;в точку 0 __ памяти попадает микроконтроллер при перезагрузке

;или старте. При этом выполняется следующая за директивой ;.org строка

rjmp start

.org OVF0addr ; Адрес вектора прерывания по переполнению первого счетчика

; контроллера. По переполнению, программа попадает по ;метке tim0

rjmp tim0 ; (имя OVF0addr определено в файле m8535def.inc)

start:

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

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

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

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

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

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

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

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

rcall port_init;

;инициализация таймера

rcall tim0_init;

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

rcall load_num;

;загрузка в регистры ch и ch1 значений 2 и 6 для дополнительного увеличения

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

ldi ch, $06;

ldi ch1, $02

;опрос клавиатуры

rcall opros_klavy;

;вывод значений на индикаторы

rcall vyvod;

sei ;установка глобального флага прерываний в истинное значение

loop:

rjmp loop; бесконечный цикл, который крутится, когда контроллер не выполняет

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

tim0:

;здесь выполняются процедуры опроса клавиатуры и вывода на индикаторы

;Делителя счетчика в 256 единиц не хватает для обеспечения необходимой

;задержки (30 и 10Гц). В реальности получается 60Гц. Поэтому мы ;дополнительно

;вводим коэффициент деления в 6 и 2 единицы для опроса клавы и вывода на

;индикаторы соответственно

;Далее в соответствующих процедурах эти значения восстанавливаются

dec ch

breq trans1; переход происходит на метку trans1, поскольку без этого возникала

; ошибка по условному переходу на метку. Переход на опрос клавы

m2:dec ch1;

breq trans2; переход на вывод на индикаторы

m3:reti

tim0_init:

ldi temp,$04 ; 04 грузится в регистр управления таймера-счётчика

out tccr0,temp; коэффициент делителя - 256

; Это мы выбрали частоту, с которой будет считать таймер-счётчик

ldi temp,(1<<toie0)

out timsk,temp ; в поле toie0 регистра timsk будет записана 1

;Устанавливается возможность счетчика формировать запрос

; на прерывание по переполнению

ret

trans1:

rcall opros_klavy

rjmp m2

trans2:

rcall vyvod;

rjmp m3

port_init:

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

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

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

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

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

;

clr temp;

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

; порт D программируется на вывод

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

ret;

load_num:

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

;день лабы

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

ret;

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

opros_klavy:

clr klav;

in temp, portd; в регистр temp записывается значение на выводах порта D

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;

ldi ch, 6; восстановление значения ch для дальнейшей правильной работы по

; по прерываниям

ret;

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

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

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

ldi ch, 6; восстановление значения ch для дальнейшей правильной работы по

; по прерываниям

ret;

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

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

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

ldi ch, 6; восстановление значения ch для дальнейшей правильной работы по

; по прерываниям

ret;

b3: ;

ldi klav, 1; ldi what, 3; ldi ch, 6; метка для подготовки регистров для вывода месяца рождения

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

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

восстановление значения ch для дальнейшей правильной работы по

; по прерываниям

возвращение

ret;

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

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 portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 01

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

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

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

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

; второго регистра

out portb, temp; в порт B заносится номер индикатора на который пойдет отображение - 02

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