Главная » Просмотр файлов » контроллер ATmega8535

контроллер ATmega8535 (1056169)

Файл №1056169 контроллер ATmega8535 (Всё по лабораторным работам БМТ)контроллер ATmega8535 (1056169)2017-12-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

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

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

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

Характеристики

Тип файла
Документ
Размер
89 Kb
Тип материала
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

Всё по лабораторным работам БМТ
1
lab
AvrBuild.bat
Ogonik_lab1.hex
Ogonik_lab1.obj
lab.aps
lab.asm
lab.hex
lab.map
lab.obj
labels.tmp
Ogonik_lab1.aps
2
AvrBuild.bat
Lab2.aps
Lab2.asm
Lab2.hex
Lab2.map
Lab2.obj
lab2.aws
laba2.aps
laba2.asm
laba2.hex
laba2.map
laba2.obj
labels.tmp
3
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6521
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее