РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ

  • Курс по ускорению работы Мозга на 100%


    • Страница 1 из 1
    • 1
    Архив - только для чтения
    Форум радиолюбителей » СХЕМЫ » НАЧИНАЮЩИМ » Помогите разобраться с средой разработки для AVR
    Помогите разобраться с средой разработки для AVR
    Чт, 17.01.2019, 18:52 | Сообщение # 1        
    gorvinyk
    аватар
      Постов: 5   ОК 
    Всем привет, читаю самоучитель по программированию AVR на ассемблере. Файл с текстом программы прикрепил. Хочу пошагово выполнить программу в симуляторе.
    В программе мы должны зависнуть в бесконечном цикле до возникновения прерывания по INT0. Изменения значения регистров я отслеживаю добавляя их в окно Watch
    Имею следующие проблемы:
    1. При работе в AVR Studio4 в подпрограмме Int0: , командой out gifr,temp в переменную
    gifr записывается значение 63 , хотя при этом в temp было значение 255, Как-так??? Если дальше выполнять, то команда sbr flag,0 не устанавливает бит 0 в регистре flag...

    2. Поставил Atmel Studio7 загнал туда тот же текст и имею другие проблемы:
    Регистр timsk имеет значение 57 при выполнении команды out timsk,temp его значение не меняется , при этом в temp находилось значение 1 и изменить значение этого регистра в окне Watch не получается.

    3. Загнал тот же текст в MPLAB X IDE 5.10 выполняются все команды до метки Cykle:
    в нём мы будем висеть до безконечности пока не произойдёт прерывание по INT0. меняю состояние INT0 в окне I/O pins и прерывание не происходит. Попробовал открыть меню Window/simulator/stimulus, ничего не открылось.
    Кто что может посоветовать?
    И может кто подскажет почему в MPLAB X в окно Watches не получается добавить регистр прописывая его имя, если я пишу temp, ничего не добавляется, если пишу r16 он добавляется и отображаются данные этого регистра, можно написать его адрес 0x10,
    тоже всё ок, но работать так не удобно?
    Файлы: main.asm (2.8 Kb)
    Чт, 17.01.2019, 23:03 | Сообщение # 2        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата gorvinyk ()
    Поставил Atmel Studio7 загнал туда тот же текст и имею другие проблемы: Регистр timsk имеет значение 57 при выполнении команды out timsk,temp его значение не меняется ......

    gorvinyk, не там смотришь: Watch - это для наблюдения за переменными, а timsk - это объявленная в хидере константа (адрес регистра ввода/вывода), тип dword.
    За регистрами ввода/вывода наблюдай во вкладке "I/O". Все там меняется.
    Вс, 20.01.2019, 01:10 | Сообщение # 3        
    gorvinyk
    аватар
      Постов: 5   ОК 
    Спасибо, но помогло не сильно.
    Теперь смотрю в "I/O".
    1. В avrstudio4 имеем следующее:
    Проходит весь блок от метки Start: до Cykle: без проблем, меняю уровень на pd2. Перехожу по прерыванию к метке Int0: , командой out gifr,temp в рег. gifr записывается число 63, хотя в temp находится значение 255. У gifr рабочие только два самые старшие биты, остальные, я так понимаю должны читаться как единица. До выполнения записи значение gifr равнялось 0(точнее два самых старших бита пустые, а остальные вроде как полные, но неактивные,менять значения нельзя.)после записи значение ровняется 63 хотя биты не изменились. Почему 63 а ни 255? Почему биты не изменились?
    Ну и команда sbr flag,0 не меняет содержимое рег. flag. Не меняется его значение и в окне memory раздел register.
    А с atmelstudio7 такая - же картина как и с mplab, не срабатывает прерывание при изменении уровня на pd2. Что может быть не так?
    Вс, 20.01.2019, 15:47 | Сообщение # 4        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата gorvinyk ()
    с atmelstudio7 такая - же картина как и с mplab, не срабатывает прерывание при изменении уровня на pd2. Что может быть не так?
    Да, действительно, переход на обработчики прерываний в пошаговом режиме по умолчанию отключен (если пользоваться точками останова и run-ом, то все работает). Фикс:
    debug -> options -> tools -> Mask interrups while stepping -> FALSE
    Цитата gorvinyk ()
    gifr записывается число 63, хотя в temp находится значение 255.
    А переведи 63 из десятичной системы в двоичную smile . И переключи индикацию данных в шестнадцатеричный режим (правой кнопкой) - меньше путаницы будет.
    Цитата gorvinyk ()
    Ну и команда sbr flag,0 не меняет содержимое рег. flag. Не меняется его значение и в окне memory раздел register.
    Невнимательно прочитал описание команды. Смотри во вложении.
    Файлы: AVR_Instruction.pdf (1.06 Mb)
    Вс, 20.01.2019, 20:30 | Сообщение # 5        
    gorvinyk
    аватар
      Постов: 5   ОК 
    Цитата msmmmm ()
    А переведи 63 из десятичной системы в двоичную

    Да, это будет равно 3F ,т.е. шесть младших битов единицы, но команда должна была записить в рег. число 255, т.е и два самых старших бита установить в 1 или я что-то не понял?
    За файлик спасибо! А на русском такого же нет? Или, даже, чего нибудь более подробного, с подробнейшим описанием каждой команды. А по atmelstudio7 нет ли чего - нибудь в роде руководства пользователя (на русском)?
    И по mplabX не подскажешь? Там тоже не происходят прерывания в пошаговом режиме и с окном watches не могу разобраться, если добавляю имя переменной, то ничего не добавляется, напр. добавляю temp - ничего не происходит, добавляю r16, или адрес 0x10 всё добавляется, но так - же невозможно работать.
    Хотел уже отправлять, но поклацал в симуляторах и непоняток стало больше:
    1.Правильнее всего происходит в mplabX, поставил вместо rjmp Start команду
    rjmp Int_0 чтоб сразу попасть в эту подпрограмму, так вот, при выполнении out gifr
    в него записывается значение 192 - это похоже на правду (все младшие чиатются как 0 а два старших как 1)
    2. в avrstudio4 той-же командой в gifr записывается значение 63
    3. в atmelstudio7 той-же командой значение gifr вообще не меняется.
    P.S. все числа указываю в десятичном формате, если буду указывать в 16-ричном буду писать 0x10, если в бинарном то 0b00010000.
    Вс, 20.01.2019, 22:03 | Сообщение # 6        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Цитата gorvinyk ()
    два самых старших бита установить в 1 или я что-то не понял?
    Ответ находится прямо в твоей программе:
    ldi temp,255
    out gifr,temp ; gifr очищается записью единиц

    Но зарезервированные биты gifr у меня (Atmel Studio 7, Version: 7.0.1931) читаются как 0. Посмотрел даташит - должны быть нули. И флаги сбрасываются записью единиц. Не забывай, что они же сбрасываются аппаратно при входе в обработчик прерывания.
    Попробуй установи флаг в 1 (gifr=0х40), выполни обсуждаемые команды - регистр должен сброситься в 0.

    По atmelstudio7 есть в свободном доступе Atmel Studio 7 User Guide, но на английском. Проблемы чаще решаются методом научного тыка или гуглением.
    На русском о контроллерах есть неплохая книга А. В. Евстифеева "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL". Там же и описание команд на русском, только в случае проблем сверяйся с оригиналом, я перестал читать неоригинальные даташиты после нескольких танцев с бубном из-за неправильного перевода.

    По Atmel Studio 4 и mplabX подсказать не могу, не пользуюсь.
    Пн, 21.01.2019, 21:16 | Сообщение # 7        
    gorvinyk
    аватар
      Постов: 5   ОК 
    Всё прекрасно. Да, действительно рег. gifr очищается записью единиц. А можно как нибудь сделать, чтоб в окне watch значения некоторых переменный отображалось в двоичной ситсеме, других в десятичной а третьих в шестнадцатиричной?
    Пн, 21.01.2019, 22:18 | Сообщение # 8        
    msmmmm
    аватар
      Постов: 891   Друзья 
    Я такой возможности не знаю, да и не нужно это. Двоичный код в уме переводится в шестнадцатеричный и обратно уже не задумываясь, а в десятичный переключается в IDE.
    Вт, 22.01.2019, 19:53 | Сообщение # 9        
    gorvinyk
    аватар
      Постов: 5   ОК 
    Большое спасибо за помощь!
    Форум радиолюбителей » СХЕМЫ » НАЧИНАЮЩИМ » Помогите разобраться с средой разработки для AVR
    • Страница 1 из 1
    • 1
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA