| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Непрерывная память для PIC-ов
08.05.2010, 18:03
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Непрерывная память для PIC-ов
Недавно начал работать с 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 то можно
проверить копирование памяти.
|
|
|
|
08.05.2010, 18:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Дааа проблема целая с этими банками в пиках,как в 24 серии не знаю,но вот в 18 ОЗУ так и разбита тож на банки 
Хотя компилятор на Си все это сглаживает,а на ассамблере туго.
__________________
Глаза боятся,а руки делают.
|
|
|
|
08.05.2010, 20:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,284
Сказал спасибо: 441
Сказали Спасибо 1,040 раз(а) в 701 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Основные сложности возникают при работе с большими объемами данных, для простых проектов хватает и одного банка памяти. Большой объем данных предполагает и большой объем кода для их обработки, а тут уже и прямая дорога к С-компиляторам
__________________
misterdi<@>i.ua
|
|
|
|
08.05.2010, 20:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Мыши плакали, кололись, но продолжали есть кактус.
Существуют контроллеры (даже среди ПИКов) с абсолютно линейной адресацией памяти. Какой смысл вначале создавать себе проблему, а затем мужественно с ней бороться?
|
|
|
|
08.05.2010, 21:45
|
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Еще в ПИКах сильно бесит, что, когда в TRIS пишешь "1", он становится на вход, хотя удобнее - на выход. Тут производители ПИКов явно не досмотрели. Поэтому я тоже написал функцию. Думаю, она окажется многим полезной:
|
Код:
|
WRITE_TRISA:
bsf STATUS, RP0
bcf STATUS, RP1
xolrw 0xFF
movwf TRISA
clrf STATUS
return
WRITE_TRISB:
bsf STATUS, RP0
bcf STATUS, RP1
xolrw 0xFF
movwf TRISB
clrf STATUS
return
и т.д. |
Потом вызываем из программы так:
|
Код:
|
movlw 0x00001111 ; RB0..RB3 - выходы,
; RB4..RB7 - входы
call WRITE_TRISB |
По-моему очень удобно
|
|
|
|
08.05.2010, 21:53
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Сообщение от testerplus
|
|
Еще в ПИКах сильно бесит, что, когда в TRIS пишешь "1", он становится на вход, хотя удобнее - на выход. Тут производители ПИКов явно не досмотрели.
|
Виктор, не пугайте меня. 
1 - I Input, 0- O Output. Имхо всё логично.
|
Цитата:
|
По-моему очень удобно
|
Наверное шутка.
|
|
|
|
08.05.2010, 22:00
|
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Сообщение от st_1
|
Виктор, не пугайте меня.
1 - I Input, 0- O Output. Имхо всё логично.
|
Шутка, конечно  (Кстати, следую той же логике: I = 1, O = 0 )
Автоу темы: насчет косвенной адресации для Вашей схемы подумайте.
|
|
|
|
08.05.2010, 22:02
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Непрерывная память для PIC-ов
Сообщение от niXto
|
Мыши плакали, кололись, но продолжали есть кактус.
Существуют контроллеры (даже среди ПИКов) с абсолютно линейной адресацией памяти. Какой смысл вначале создавать себе проблему, а затем мужественно с ней бороться?
|
А с каким семейством у начинающих нет проблем? 
Только не говорите, что "с АВР нет проблем".
|
|
|
|
09.05.2010, 06:35
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Непрерывная память для PIC-ов
Автоу темы: насчет косвенной адресации для Вашей схемы подумайте.[/QUOTE]
Не совсем понял насчет косвенной адресации. У меня для адреса
определяется банк и в FSR заносится уже модифицированный под
этот банк адрес и далее movf INDF,0.
READ_FSR и WRITE_FSR выступают в роли прообраза FSR в процедуре
копирования участка памяти
|
|
|
|
09.05.2010, 06:40
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Непрерывная память для PIC-ов
Сообщение от testerplus
|
|
Автоу темы: насчет косвенной адресации для Вашей схемы подумайте
|
Не совсем понял насчет косвенной адресации. У меня для адреса
определяется банк и в FSR заносится уже модифицированный под
этот банк адрес и далее movf INDF,0.
READ_FSR и WRITE_FSR выступают в роли прообраза FSR в процедуре
копирования участка памяти
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:38.
|
|