Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 19.08.2011, 10:46  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Два дня как начал изучать контроллеры avr и соответственно их ассемблер. Изучаю по книге Дж.Моргана "Микроконтроллеры AVR. Вводный курс". В данный момент читаю и вникаю в программы включения светодиода и кнопки. При отладке второй проги заметил интересную вешь, которую и изложу сейчас.
Часть кода:
.device at90s1200
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\1200def.inc"
.list
.def temp=r16
rjmp Init
Init:
;определяем порты на вход-выход
ser temp ;задаем все выводы порта В выходами
out DDRB,temp
ldi temp,0b11111110 ;задаем 0 вывод порта D входом, остальные выходами
out DDRD,temp

;задаём начальные значения напряжения на выводах
clr temp
out PortB,temp ;сбрасываем в 0 выводы порта В
sbi PortD,0
;ldi temp,0b0000001 ;включаем подтяжку на нулевой вывод порта D, остальные в 0
;out PortD,temp
sbi PortB,0
rjmp Init
Start:
Дальше копировать не стал, ибо не суть. А суть вот в чем. На сколько я понял, при установке в порту, например, B какого-либо двоичного числа, при выполнении любой следущей команды, это число переносится в регистр PinB. А вот здесь после выполнения команды sbi PortD,0 (или совокупности команд ldi temp,0b0000001 и out PortD,temp, законментированных здесь временно), единичка логическая НЕ ПЕРЕНОСИТСЯ в PinD при выполнении следующего шага. А вот после установки бита в PortB,0, при выполнении rjmp Init (знаю, что команда лишена смысла, она служит просто любым следущим шагом в данном случае) эта единица появляется в PinD... Это как так?
Реклама:
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
Непрочитано 19.08.2011, 10:57  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Ну и ещё спрошу здесь же... Вобще начальник мне повелел изучать архитектуру семейства Mega (в частности 128 и 64 контроллеров) и программирование на Си. Друг мой, который уже давно работает в avr, сказал, что нужно сначала хорошо изучить ассемблер и только потом переходить на си. Интуиция моя солидарна с другом, но начальство ограничивает во времени. Вопрос. Есть ли какая-нибудь литература, по которой можно начать изучение си применительно именно к контроллерам? Ранее я ни разу в жизни не сталкивался ни с ассмеблером, ни с си, ни с контроллерами. Да и вобще с программированием. По ассмеблеру и мк читаю книги Моргана и Ефстифеева, по Си посоветовали Кернигана и Ричи. Но насклько я понял из вступления, книга расчитана на тех, кто уже имеет представление о программировании.... Вобщем, мозги мои кипят. Хочется составить четкий план обучения.
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
Непрочитано 19.08.2011, 10:59  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

PORTD.0 настроен на ввод. Записью 1 в него Вы включаете подтяжку к плюсу. Хотите проверить включилась ли она - выполните код
Код:
in temp, PIND;
out PORTB, temp
И посмотрите состояние 0 порта B.
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
warel (28.06.2019)
Непрочитано 19.08.2011, 11:00  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Посмотрите Шпака Программирование микроконтроллеров на С. http://easyelectronics.ru/shpak-yua-...trollerov.html
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
warel (28.06.2019)
Непрочитано 19.08.2011, 11:06  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

PinX - это ваши входы. Когда вы выводите какое-то значение в PORTD оно появляется на выходе. Естественно не сразу а после выполнения команды. Поскольку выход и вход - это физически один и тот же пин, то понятно, что если вы выведете туда единицу, то вы её и прочитаете ...
Чисто теоретически - это не факт ... Если вы посадите эту ножку на землю (может привести к выходу из строя) и выведете в PORT 1, то она выведется (если прочитать PORT - она там будет), при этом PIN будет читаться 0, так как там физически находится 0.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
warel (28.06.2019)
Непрочитано 19.08.2011, 11:07  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Только сечас дошло, что лучше все таки использовать совокупность команд "ldi temp,0b0000001 и out PortD,temp", ибо в регистре может быть т.н. мусор, и установкой одного бита мы его ен вычистим, а записью целого числа мы его вычистим. Но это не касается сути вопроса. Написал на всякий случай, что бы знатоки не наругали =)
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
Непрочитано 19.08.2011, 11:15  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Такс... Т.е. получается, что при настройке вывода на вход он не зеркалируется в регистр PinX, и подачей 1 мы просто включаем подтяжку... А если настроен на вывод, то зеркалируется и, то что бы туда выдали, то и прочитали. Т.е. по сути регистр PinX может мониторить PortX только при настройке сего порта на вывод?
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
Непрочитано 19.08.2011, 11:21  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

guardianangel, спасибо за книгу.
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
Непрочитано 19.08.2011, 11:22  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Сообщение от artem-izh Посмотреть сообщение
Два дня как начал изучать контроллеры avr и соответственно их ассемблер. Изучаю по книге Дж.Моргана "Микроконтроллеры AVR. Вводный курс".
Рекомендую не заострять свое внимание только на программировании. Не менее важно "увидеть" и понять архитектуру единичного порта. Для этого достаточно открыть PDF на любого представителя Меги и найти описание портов ввода/вывода. Если английский вам не чужд и с пониманием "кубиков" все в порядке, вы сразу увидите, где PORT, а где PIN. Заодно и про "подтяжки" прочитаете.
Можно и в русском переводе. Книг по Мегам в переводе уже достаточно.
Миниатюры:
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 94
Размер:	84.3 Кб
ID:	25260  
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 19.08.2011, 11:44  
artem-izh
Прохожий
 
Регистрация: 19.04.2009
Адрес: Ижевск
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
artem-izh на пути к лучшему
По умолчанию Re: Перенос из PortX в PinX или два дня как изучаю AVR Assembler

Такс... Очередная ступень понимания (или заблуждения)... В регистр PinX записывается всё то, что поступает на ножки порта из внешнего мира. Разумеется если порт предварительно настроен на ввод иформации. При такой настройке мы можем включить подтяжку записав в регистр PortX еденицу в нужный бит. А вот если порт настроен на вывод, то регистр PinX будет зеркалировать PortX с отставанием на одну команду. Я правильно понял?
artem-izh вне форума  
Сказали "Спасибо" artem-izh
warel (28.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] про блоки питания бу-га-га! zalman Отвлекитесь, эмбеддеры! 12 29.01.2007 10:46
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 10:00.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot