реклама на сайте
подробности

 
 
> Непрерывная память для PIC-ов
zelvans
сообщение May 8 2010, 14:08
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 29-04-10
Пользователь №: 56 980



Недавно начал работать с PIC-ми, на мой взгляд такое рваное
распределение памяти неудобно для использования. Решил выстроить
память в непрерывные(линейные) адреса 0x00-0xff следующим образом:
0x60-0x6f банк0 --> 0x00-0x0f
0x20-0x6f банк1 --> 0x10-0x5f
0x20-0x6f банк2 --> 0x60-0xaf
0x20-0x6f банк3 --> 0xb0-0xff


Работаю MPLAB IDE. Пример для PIC16F88.

Чтение из линейного адреса 0xb2 выглядит так:

movlw 0xb2
call read_routine

на выходе в W прочитанный байт


Запись 0xaa в линейный адрес 0Xb2:

banksel 0
movlw 0xaa ;данные, которые
movwf WRITE_BYTE ;надо записать
movlw 0xb2
call write_routine

Копирование из одного участка памяти в другой(непересекающийся)
использую макрос

COPY_MEM read_address,write_address,count

read_address откуда
write_address куда
count сколько байтов

В моем проекте прописывается память своими адресами.
Если закоментарить строку goto Init_0015 то можно
проверить копирование памяти.
Прикрепленный файл  JQ017_L_M.rar ( 14.16 килобайт ) Кол-во скачиваний: 104
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Herz
сообщение May 12 2010, 07:16
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(zelvans @ May 12 2010, 03:56) *
Например для копирования большого количества байтов из произвольного банка в произвольный такой подход годится

А где такое надо? Не могу представить. Разве только в специфических задачах. Только там этой функции и место. На универсальность она не тянет.
Цитата(ar__systems @ May 11 2010, 18:50) *
Да нет, у человека там другая проблема.

Вообще если бы мне за каждым обращением в регистр надо было бы функцию вызывать, я бы удавился. Если у вас код настолько некритичный к скорости, пишите на C. У меня много девайсов на PIC12/16, на ассемблере, но ваш код я бы нигде не смог применить.

В крайнем случае можно не заморачиваясь перед каждым обращением в память banksel ставить.

+1!

Сообщение отредактировал Herz - May 12 2010, 07:16
Go to the top of the page
 
+Quote Post
zelvans
сообщение May 13 2010, 10:04
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 29-04-10
Пользователь №: 56 980



Цитата(Herz @ May 12 2010, 11:16) *
А где такое надо? Не могу представить. Разве только в специфических задачах. Только там этой функции и место. На универсальность она не тянет.

+1!


Слова что это универсальный подход сказал не я. Идея применима при копировании из прозвольного в произвольный банк и при расположении обрабатываемого массива в разных банках, например два массива по 100 байт и чтобы было на ассмблере. В остальных случаях, конечно, прямая адресация. Чтобы в последующих проектах не мучиться сделал сразу. Всем спасибо за высказанные мнения. testerplus-у отдельное спасибо за общение в личке.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 12:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016