Работа с памятью

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Работа с памятью

Сообщение kras »

Люди, киньте ссылок, где хорошо написано о работе с памятью. Задача состоит в работе с сегментом данных, например, как записать значения битов PORTB в последовательно стоящие байты памяти при некоторых значениях времени? Вроде бы все просто, выполняется цикл, во время которого появляется команда типа "mov адрес_памяти, PORTB". А потом, например, надо считать эти биты. Наверное, это в таком духе: "mov PORTB, адрес_памяти" Какой тут синтаксис и правила? Вообще-то нужно для PIC контроллеров, но не прочь посмотреть, как это выглядит для AVR, например.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Работа с памятью

Сообщение Dmitry Dubrovenko »

kras писал(а):Какой тут синтаксис и правила?
Нет тут правил.
Как сделаете, так и будет. :wink:

При работе с массивом данных удобно пользоваться косвенной адресацией.
ICQ нет, и, в ближайшее время, не будет.
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6319
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Работа с памятью

Сообщение Jack_A »

kras писал(а):как это выглядит для AVR, например.
Для АВР это выглядит приблизительно так :
ldi ZL,low(Bufer)
sts UkL,ZL
ldi ZH,High(Bufer)
sts UkH,ZH
; проинициализировали указатели

. . . . . . . . . . . . . . . .
lds ZL,UkL
lds ZH,UkH
in R16,PORTB
st z+,R16
sts UkL,ZL
sts UkH,ZH

и нужно следить, чтобы указатель не вылезал за отведенную область памяти, а если вылезает, нужно делать то, что предписано алгоритмом работы : проинициализировать его, как в начале работы ( получается кольцевой буфер ), сбросить во внешнее окружение или что другое.
Напрямую в память, минуя регистр, пис`ать из портов нельзя.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа с памятью

Сообщение kras »

А я для пика пока даже примерно не знаю. Ну обхожусь я, например, простыми функциями mov. Например, смотрим структурную схему в datasheetе pic16f84a.
1. Программы заносятся во FLASH, а данные в EEPROM? То есть одна и та же память не делится на сегменты?
2. В EEPROM 64кБ памяти? То есть для управления нужно 16 выводов, на которые подается адрес от 0000h до FFFFh? Ну тут я еще понял, что 0000h это какой-то вектор сброса. Это как?
3. Адреса генерируются с выхода ALU? Тогда там 8 разрядов. А как формируется 16 разрядный адрес?
4. Для FLASH формируется 13 разрядов, хотя памяти на 10. Как так?
5. Вопрос-цель. Как все-таки написать этот самый адрес так, чтобы все получилось? На схеме есть регистры EEADR и EEDATA, что они там делают? Что за регистры EECON?

Надо, все-таки, начинать конкретизировать:) Вот код, но что я не понял, подписал в комментах.

Код: Выделить всё

movlw 0x20 ;настройка указателя на начальный адрес. Как получился этот адрес?

movwf FSR ;а что, напрямую в FSR занести нельзя?

NEXT mov PORTB, INDF ;вывод значения INDF. А как сделать стандартно, как в микропроцессоре? INDF это типо регистр, то есть так можно?

incf FSR ;инкремент значения указателя. Тут понятно, перехожу к следующему байту памяти.

btfss FSR.4 ;запись закончена?

goto NEXT ;нет, перейти на метку NEXT
Jack, а добавь комменты плз:)
Последний раз редактировалось kras Вт июн 28, 2011 04:03:50, всего редактировалось 1 раз.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Работа с памятью

Сообщение urry »

Реклама
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Работа с памятью

Сообщение Dmitry Dubrovenko »

kras, в принципе, Юрий Вам хорошую ссылку дал. Там, правда есть небольшие ошибки, и вообще он для 628, который уже давно не выпускают (заменён на 628A), но про основы работы там всё правильно.

У Вас пока каша наблюдается.
В данном МК есть память программ (то, что Flash),
энергонезависимая память данных EEPROM,
и ОЗУ (которое делится на регистры специального и общего назначения).

Так вот массив данных надо организовывать в ОЗУ.
Доступ к ячейкам ОЗУ можно получить как напрямую указав адрес ячейки, так и косвенно, с использованием указателя FSR. При этом, в команде обращаются к "виртуальному" (физически нереализованному) регистру INDF, а действие происходит с регистром, адрес которого находится в FSR.
Напрямую записать константу в регистр ОЗУ нельзя, поэтому её (первоначальный адрес) сперва записывают в аккумулятор.
ICQ нет, и, в ближайшее время, не будет.
Реклама
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа с памятью

Сообщение kras »

Так вот массив данных надо организовывать в ОЗУ
А почему написано тогда "EEPROM Data Memory"? Вы в курсе, что я i8086 знаю более менее? Мне теперь удобнее аналогию использовать:( А тут даже сегментация в блоках, как я понял, отсутствует. Но адрес формируется от балды (ничего не значащая сумма/последовательности).
Доступ к ячейкам ОЗУ
Ну вот я сколько читаю уже предложенный док, все равно не понял пока про формирование адреса. Как устроен виртуальный регистр? То есть как это выглядит в бинарном виде?
Кстати там в pdf написано, что EEADR 8 разрядный. А у меня там, вроде бы, дофига памяти. Или по стандарту там должно стоять "k", а у меня всего 64 Байта? Ну если все так, то с RAM более менее понятно, но что там с адресом до шины 7 разрядов?:) А почему ОЗУ? При отключении питания константы не стираются? Мне не надо, чтобы стирались.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6319
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Работа с памятью

Сообщение Jack_A »

Что может быть хуже чайника - это чайник с претензиями. Уровень даже не нулевой, а минусовый, ему пытаются помочь, а он :
kras писал(а): Вы в курсе, что я i8086 знаю более менее?
Да нам до ж... эти суперценные сведения о том, что ты знаешь - судя по вопросу, ничего. Читай книжки , а на форум тебе еще рано, если кроме грубости прочирикать нечего.
Ему urry ДШ по ПИКам советует, а тут еще букварь по информатике для 4-го класа читать пока не вникнет...
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Работа с памятью

Сообщение Dmitry Dubrovenko »

Jack_A писал(а):тут еще букварь по информатике для 4-го класа читать пока не вникнет...
Грубо, конечно, но справедливо. :)


kras, у Вас отсутствуют базовые знания по работе МК. Даже если допустить, что Вы знаете 8086 (что вызывает некоторые сомнения), то архитектура ПИКов среднего семейства принципиально от него отличается.
Сперва разберитесь с памятью программ, данных, и EEPROM, а потом уж начинайте массивы создавать.

kras писал(а):Кстати там в pdf написано, что EEADR 8 разрядный. А у меня там, вроде бы, дофига памяти.
EEADR - регистр работы с EEPROM (можно сказать, аналог FSR, только не для ОЗУ, а для EEPROM). А количество ячеек EEPROM, в среднем семействе ПИКов не превышает 256.
kras писал(а):Мне не надо, чтобы стирались.
Тогда используйте именно EEPROM. Только учтите, что запись в данные ячейки происходит очень медленно (около 10ms), и ресурс циклов записи ограничен.
ICQ нет, и, в ближайшее время, не будет.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа с памятью

Сообщение kras »

если кроме грубости прочирикать нечего
Что вы сэр, где вы видели хоть каплю грубости или сарказма?:) Я серьезно не врубаюсь, поэтому и пишу, как есть и чего еще не понятно. Хотя мне сообщения твои и не только уже немного помогли.
среднего семейства принципиально от него отличается
Ну это же не значит, что нужно "забыть все, что вы учили раньше" и "тупо зубрить" пока не поймется заново. Зачем что-то открывать?:) По крайней мере с открытиями надо идти при других целях. Ну идут к EEADR 8 проводков, регистр значит вообще защелка, а что творится на 2 из них? В оригинальном даташите pic16f84a, кстати, тоже не мало написано, только не понятно нифига до сих пор. Я только понял, как это на уровне ассемблера написать пока.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Работа с памятью

Сообщение Dmitry Dubrovenko »

kras писал(а):Ну это же не значит, что нужно "забыть все, что вы учили раньше"
Забывать как-раз ничего не нужно.
Нужно просто понять разницу.
kras писал(а):Ну идут к EEADR 8 проводков, регистр значит вообще защелка
Это Вы о чём? :shock:
kras писал(а):Я только понял, как это на уровне ассемблера написать пока.
А Вам какой уровень надо? Опкода что ли? :))) Так смотрите в конце даташита все опкоды приведены.


Но это всё разговоры совершенно не по теме топика. :roll:
ICQ нет, и, в ближайшее время, не будет.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа с памятью

Сообщение kras »

Не, ну есть схема. К АЛУ (я пока только так понял) подключаются блоки памяти через регистры-защелки. Адресация совмещенная. И? Мне важнее понять, как при этом работает железо, а не просто скопипастить непонятный код. Кстати, а как эта схема переходит в режим программирования?:)
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2360
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

Re: Работа с памятью

Сообщение Dmitry Dubrovenko »

kras писал(а):Мне важнее понять, как при этом работает железо, а не просто скопипастить непонятный код
Надо копипастить понятный код, а ещё лучше, писАть свой. И железо при этом будет работать как надо. :wink:
По поводу того, что Майкрочип предоставит Вам принципиальную схему своих МК, для изучения, я сильно сомневаюсь.
Короче говоря, тролля больше кормить не буду. 8)
ICQ нет, и, в ближайшее время, не будет.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа с памятью

Сообщение kras »

ЭЭЭ, еще раз, я не троль, обижаешь:D Речь идет об этом даташите: http://eicom.ru/downloads/?pdf=/Microch ... 16F84A.pdf. Там на 5 странице функциональная схема. С Flash прочиталась команда, затем устройству нужно обратиться к EEPROM по указанному в операнде команды адресу. Ну и?
Кстати, принципиальная схема тут предполагается, если вы иного мнения, поясните. Ничего принципиально нового в строении, например, регистров Microchip пока не предлагает, насколько я знаю, разница только в технологии изготовления.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Работа с памятью

Сообщение Мастер Ломастер »

а в чем сакральный смысл знаний о том, как на аппаратном уровне происходит работа с внутренними ресурсами МК? мне, например, вполне достаточно знаний о том, что "запиши в этот регистро такое-то число - получишь такое-то действие", а почему такое, как именно получишь - мне до лампочки. иначе так можно и до микрокода ядра дойти...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Работа с памятью

Сообщение urry »

Там на 5 странице функциональная схема. С Flash прочиталась команда, затем устройству нужно обратиться к EEPROM по указанному в операнде команды адресу
Зачем ???
В даташите ясно написано, что архитектура мк - Гарвардская, т.е программа и данные разделены, в отличие от архитектуры фон Неймана.
Программа - флеш, данные - регистры. Регистры (или ОЗУ, так понятнее) находятся в своем адресном пространстве, флеш в своем.
Регистры мк, используемые в процессе работы - например статус, аккумулятор и регистры "общего назначения" - находятся в одном адресном куске, поэтому работать - использовать в качестве оперативной памяти - нужно с определенного адреса, чтобы не затереть "служебные"
В 16Ф84 - это адрес 0хс , в 628 - это адрес 0х20
Второй том "Искусства схемотехники" по Вам просто плачет.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»