Доброго времени суток . Помогите пожалуйста разработать и написать программу ( желательно на Assembler ) для микроконтроллера ATmega8 . Работа программы примитивна : включать светодиод по нажатию кнопки . Имеются программы AVR Studio и Proteus ( по сути эмулятор ) . Хочется понять сам принцип разработки программы , алгоритм ее составления , с чего начинать . Всем заранее спасибо !
Ну принцип такой - 1.Читаются книги и даташиты. 2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу. 3.Программа компилируется в АВРСтудио, если нужно. 4.Прошивка прошивается в МК программатором, если нужно.
Ну принцип такой - 1.Читаются книги и даташиты. 2.Пишется несколько строчек программы, в любом тектсовом редакторе или в АВРСтудио сразу. 3.Программа компилируется в АВРСтудио, если нужно. 4.Прошивка прошивается в МК программатором, если нужно.
Компилировать и прошивать МК собираюсь после проверки на эмуляторе . Хочется понять больше по программной части . Изучал Assembler на KP580 , поэтому на Atmel мне не так-то легко сейчас . Очень понравилась книга Ю.Ревич , "Практическое программирование Микроконтроллеров AVR на языке ассемблера" читал , старался понять .
Если я не прав , и где-то ошибка , если можно конечно , подскажите над чем мне подумать , поработать .
Подключил кнопку к порту C , светодиод к порту D . По схеме у меня порт C - ввода , порт D - вывода . Кнопка у нас ввод , светодиод вывод . По умолчанию все порты настроены на ввод , поэтому настраиваем только порт D на вывод . При нажатии кнопки на порту ввода C появляется число 10000000 , до нажатия было 00000000 . Вводим это число в регистр . Далее его выводим .
У меня вопросы : при нажатии кнопки как показано на рисунке , в порту ввода будет появляться число 10000000 или 00000000 . На KP580 включенная кнопка это 0 , тут аналогично ? Как писать заголовок , первую строку программы , например ".include "d:\avr\avrasm\appnotes\2313def.inc" . Нужно ли настраивать порт D на вывод ? ( объясните если можно ) . Настройка порта D на вывод осуществляется с помощью этой команды ( ldi Temp, 0D11111111 ) ?
Заранее извиняюсь за код , старался написать базу , тело программы .
Код:
.include " C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def " .def Temp=R16 .cseg .org 0 in DDRC,Temp out DDRD ,Temp
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод - в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
огромное спасибо за ответ . Постараюсь поработать над этим . У меня самая первая ошибка в заголовке , выдает ошибку
Код:
C:\Users\kompYOUter\Desktop\project\AVR\programm.asm(1): error: Missing include file name
, подскажите как ее убрать , хочется понять .
Последний раз редактировалось RossiaForever Сб янв 05, 2013 10:02:58, всего редактировалось 2 раз(а).
Компилирую программу , компилируется . Заметил "ошибку" программы при загрузке ее в МК в Proteus , думал это Proteus виноват ( в интернете часто на программу сваливают ) . Решил отладить программу через Debug в AVR Studio , так-то и нашел ошибочку .
В пример приведу часть программы ( она компилируется ) , команда заносит в регистр R16 ( Temp ) число 11111111 :
Код:
.include "m8def.inc"
.def Temp=R16
.cseg .org 0
ldi Temp, 0b11111111 out DDRD,Temp
При отладке в Debug в регистре R16 появляется число FF ( 11111111 ) как и должно быть . Счетчик циклов увеличивается с 0 до 4096 и т.д. Счетчик программ (PC) = 0x000001 . Счетчик циклов , программ и регистр R16 выделены красным цветом .
Код:
AVR Simulator: Invalid opcode 0xffff at address 0x000002
Без подпрограммы ( задержка ) все работает нормально . При отладке программы : по команде rcall вызывается п/п , при выходе из п/п ... снова возвращается на команду Init: Ldi Temp , 0b00000001 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения