Работа с памятью
Работа с памятью
Люди, киньте ссылок, где хорошо написано о работе с памятью. Задача состоит в работе с сегментом данных, например, как записать значения битов PORTB в последовательно стоящие байты памяти при некоторых значениях времени? Вроде бы все просто, выполняется цикл, во время которого появляется команда типа "mov адрес_памяти, PORTB". А потом, например, надо считать эти биты. Наверное, это в таком духе: "mov PORTB, адрес_памяти" Какой тут синтаксис и правила? Вообще-то нужно для PIC контроллеров, но не прочь посмотреть, как это выглядит для AVR, например.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
- Реклама
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Работа с памятью
Нет тут правил.kras писал(а):Какой тут синтаксис и правила?
Как сделаете, так и будет.
При работе с массивом данных удобно пользоваться косвенной адресацией.
ICQ нет, и, в ближайшее время, не будет.
Re: Работа с памятью
Для АВР это выглядит приблизительно так :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
и нужно следить, чтобы указатель не вылезал за отведенную область памяти, а если вылезает, нужно делать то, что предписано алгоритмом работы : проинициализировать его, как в начале работы ( получается кольцевой буфер ), сбросить во внешнее окружение или что другое.
Напрямую в память, минуя регистр, пис`ать из портов нельзя.
Re: Работа с памятью
А я для пика пока даже примерно не знаю. Ну обхожусь я, например, простыми функциями 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?
Надо, все-таки, начинать конкретизировать:) Вот код, но что я не понял, подписал в комментах.
Jack, а добавь комменты плз:)
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
Последний раз редактировалось kras Вт июн 28, 2011 04:03:50, всего редактировалось 1 раз.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
- Реклама
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Работа с памятью
kras, в принципе, Юрий Вам хорошую ссылку дал. Там, правда есть небольшие ошибки, и вообще он для 628, который уже давно не выпускают (заменён на 628A), но про основы работы там всё правильно.
У Вас пока каша наблюдается.
В данном МК есть память программ (то, что Flash),
энергонезависимая память данных EEPROM,
и ОЗУ (которое делится на регистры специального и общего назначения).
Так вот массив данных надо организовывать в ОЗУ.
Доступ к ячейкам ОЗУ можно получить как напрямую указав адрес ячейки, так и косвенно, с использованием указателя FSR. При этом, в команде обращаются к "виртуальному" (физически нереализованному) регистру INDF, а действие происходит с регистром, адрес которого находится в FSR.
Напрямую записать константу в регистр ОЗУ нельзя, поэтому её (первоначальный адрес) сперва записывают в аккумулятор.
У Вас пока каша наблюдается.
В данном МК есть память программ (то, что Flash),
энергонезависимая память данных EEPROM,
и ОЗУ (которое делится на регистры специального и общего назначения).
Так вот массив данных надо организовывать в ОЗУ.
Доступ к ячейкам ОЗУ можно получить как напрямую указав адрес ячейки, так и косвенно, с использованием указателя FSR. При этом, в команде обращаются к "виртуальному" (физически нереализованному) регистру INDF, а действие происходит с регистром, адрес которого находится в FSR.
Напрямую записать константу в регистр ОЗУ нельзя, поэтому её (первоначальный адрес) сперва записывают в аккумулятор.
ICQ нет, и, в ближайшее время, не будет.
Re: Работа с памятью
А почему написано тогда "EEPROM Data Memory"? Вы в курсе, что я i8086 знаю более менее? Мне теперь удобнее аналогию использовать:( А тут даже сегментация в блоках, как я понял, отсутствует. Но адрес формируется от балды (ничего не значащая сумма/последовательности).Так вот массив данных надо организовывать в ОЗУ
Ну вот я сколько читаю уже предложенный док, все равно не понял пока про формирование адреса. Как устроен виртуальный регистр? То есть как это выглядит в бинарном виде?Доступ к ячейкам ОЗУ
Кстати там в pdf написано, что EEADR 8 разрядный. А у меня там, вроде бы, дофига памяти. Или по стандарту там должно стоять "k", а у меня всего 64 Байта? Ну если все так, то с RAM более менее понятно, но что там с адресом до шины 7 разрядов?:) А почему ОЗУ? При отключении питания константы не стираются? Мне не надо, чтобы стирались.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Re: Работа с памятью
Что может быть хуже чайника - это чайник с претензиями. Уровень даже не нулевой, а минусовый, ему пытаются помочь, а он :
Ему urry ДШ по ПИКам советует, а тут еще букварь по информатике для 4-го класа читать пока не вникнет...
Да нам до ж... эти суперценные сведения о том, что ты знаешь - судя по вопросу, ничего. Читай книжки , а на форум тебе еще рано, если кроме грубости прочирикать нечего.kras писал(а): Вы в курсе, что я i8086 знаю более менее?
Ему urry ДШ по ПИКам советует, а тут еще букварь по информатике для 4-го класа читать пока не вникнет...
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Работа с памятью
Грубо, конечно, но справедливо.Jack_A писал(а):тут еще букварь по информатике для 4-го класа читать пока не вникнет...
kras, у Вас отсутствуют базовые знания по работе МК. Даже если допустить, что Вы знаете 8086 (что вызывает некоторые сомнения), то архитектура ПИКов среднего семейства принципиально от него отличается.
Сперва разберитесь с памятью программ, данных, и EEPROM, а потом уж начинайте массивы создавать.
EEADR - регистр работы с EEPROM (можно сказать, аналог FSR, только не для ОЗУ, а для EEPROM). А количество ячеек EEPROM, в среднем семействе ПИКов не превышает 256.kras писал(а):Кстати там в pdf написано, что EEADR 8 разрядный. А у меня там, вроде бы, дофига памяти.
Тогда используйте именно EEPROM. Только учтите, что запись в данные ячейки происходит очень медленно (около 10ms), и ресурс циклов записи ограничен.kras писал(а):Мне не надо, чтобы стирались.
ICQ нет, и, в ближайшее время, не будет.
Re: Работа с памятью
Что вы сэр, где вы видели хоть каплю грубости или сарказма?:) Я серьезно не врубаюсь, поэтому и пишу, как есть и чего еще не понятно. Хотя мне сообщения твои и не только уже немного помогли.если кроме грубости прочирикать нечего
Ну это же не значит, что нужно "забыть все, что вы учили раньше" и "тупо зубрить" пока не поймется заново. Зачем что-то открывать?:) По крайней мере с открытиями надо идти при других целях. Ну идут к EEADR 8 проводков, регистр значит вообще защелка, а что творится на 2 из них? В оригинальном даташите pic16f84a, кстати, тоже не мало написано, только не понятно нифига до сих пор. Я только понял, как это на уровне ассемблера написать пока.среднего семейства принципиально от него отличается
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Работа с памятью
Забывать как-раз ничего не нужно.kras писал(а):Ну это же не значит, что нужно "забыть все, что вы учили раньше"
Нужно просто понять разницу.
Это Вы о чём?kras писал(а):Ну идут к EEADR 8 проводков, регистр значит вообще защелка
А Вам какой уровень надо? Опкода что ли?kras писал(а):Я только понял, как это на уровне ассемблера написать пока.
Но это всё разговоры совершенно не по теме топика.
ICQ нет, и, в ближайшее время, не будет.
Re: Работа с памятью
Не, ну есть схема. К АЛУ (я пока только так понял) подключаются блоки памяти через регистры-защелки. Адресация совмещенная. И? Мне важнее понять, как при этом работает железо, а не просто скопипастить непонятный код. Кстати, а как эта схема переходит в режим программирования?:)
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2360
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: Работа с памятью
Надо копипастить понятный код, а ещё лучше, писАть свой. И железо при этом будет работать как надо.kras писал(а):Мне важнее понять, как при этом работает железо, а не просто скопипастить непонятный код
По поводу того, что Майкрочип предоставит Вам принципиальную схему своих МК, для изучения, я сильно сомневаюсь.
Короче говоря, тролля больше кормить не буду.
ICQ нет, и, в ближайшее время, не будет.
Re: Работа с памятью
ЭЭЭ, еще раз, я не троль, обижаешь:D Речь идет об этом даташите: http://eicom.ru/downloads/?pdf=/Microch ... 16F84A.pdf. Там на 5 странице функциональная схема. С Flash прочиталась команда, затем устройству нужно обратиться к EEPROM по указанному в операнде команды адресу. Ну и?
Кстати, принципиальная схема тут предполагается, если вы иного мнения, поясните. Ничего принципиально нового в строении, например, регистров Microchip пока не предлагает, насколько я знаю, разница только в технологии изготовления.
Кстати, принципиальная схема тут предполагается, если вы иного мнения, поясните. Ничего принципиально нового в строении, например, регистров Microchip пока не предлагает, насколько я знаю, разница только в технологии изготовления.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Работа с памятью
а в чем сакральный смысл знаний о том, как на аппаратном уровне происходит работа с внутренними ресурсами МК? мне, например, вполне достаточно знаний о том, что "запиши в этот регистро такое-то число - получишь такое-то действие", а почему такое, как именно получишь - мне до лампочки. иначе так можно и до микрокода ядра дойти...
битва с дураками проиграна, победители торжествуют. слава победителям!
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Работа с памятью
Зачем ???Там на 5 странице функциональная схема. С Flash прочиталась команда, затем устройству нужно обратиться к EEPROM по указанному в операнде команды адресу
В даташите ясно написано, что архитектура мк - Гарвардская, т.е программа и данные разделены, в отличие от архитектуры фон Неймана.
Программа - флеш, данные - регистры. Регистры (или ОЗУ, так понятнее) находятся в своем адресном пространстве, флеш в своем.
Регистры мк, используемые в процессе работы - например статус, аккумулятор и регистры "общего назначения" - находятся в одном адресном куске, поэтому работать - использовать в качестве оперативной памяти - нужно с определенного адреса, чтобы не затереть "служебные"
В 16Ф84 - это адрес 0хс , в 628 - это адрес 0х20
Второй том "Искусства схемотехники" по Вам просто плачет.


