| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
как в PIC 18F452 считать из такойто ячейки ОЗУ данные?
21.08.2007, 11:45
|
|
|
Временная регистрация
Регистрация: 14.04.2007
Сообщений: 50
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
как в PIC 18F452 считать из такойто ячейки ОЗУ данные?
я хочу в банк такойто забить таблицу ячейки 0-256.
но я не знаю как, записать/считать  .
Например в ячейку с адресом таким-то записываем то-то.
И считываем из ячейки с адресом таким-то то-то.
програмирываю я на асемблере.
|
|
|
|
21.08.2007, 13:52
|
|
|
Прохожий
Регистрация: 19.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Не совсем понятно, что конкретно Вам не понятно  Записываем то-то, считываем то-то...
1) Прочитайте Data Sheet на ПИК, тем более именно на этот имеется документация на русском языке. Обратите внимание на пункты 4.10, 4.11, 4.12.
2) Вам нужно освоить операции перемещения данных (команды MOV) с прямой и косвенной адресацией.
3) Проанализируйте имеющиеся примеры в составе MPLAB.
4) А как же вы программируете на ассемблере, где чтение/запись данных является основой основ???
|
|
|
|
21.08.2007, 15:19
|
|
|
Временная регистрация
Регистрация: 14.04.2007
Сообщений: 50
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
0.  попробую еще раз объяснить. Я хочу в ОЗУ забить таблицу, а потом быстро вытягивать из нее данные из ячейки c адресом n.
1. прочитал но не могу понять  примеров понятных мне нет.
2. вот это мне как раз и непонятно  если возможно, моглибы вы дать мне небольшой рабочий пример.
3. 
4. я переменные ОЗУ сразу объявляю типа такого:
TIMER_REVERS_SEK EQU .94 ;реверсный таймер
tF_L EQU .95 ;эталон межфазного периуда
потом вот так их использую: MOVF t_FAZA_L,W,0
|
|
|
|
21.08.2007, 17:02
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
|
|
|
|
|
21.08.2007, 17:07
|
|
|
Прохожий
Регистрация: 19.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Такое обращение к ячейкам памяти как в вашем примере называется прямой адресацией. Удобно, но не всегда. Вам нужна косвенная адресация. Для этого имеются три регистра FSR0, FSR1 и FSR2. В них нужно записывать базовые (начальные) адреса ваших массивов (назовем так ваши таблицы). В общем случае в них записывается адрес (НЕ ЗНАЧЕНИЕ!) ячейки, с которой нужно работать.
Для чтения/записи из ячеек с этими адресами нужно обращаться к регистрам INDF0, INDF1 и INDF2 соответственно. Эти регистры физически не реализованы, но при обращении к ним фактически происходит обращение к ячейкам, адреса которых записаны в регистрах FSR.
Например.
|
Код:
|
;адрес ячейки памяти
ADDR_ARRAY EQU 0x0200
;заносим в FSR0 этот адрес
LFSR FSR0, ADDR_ARRAY
;читаем в W значение ячейки по адресу ADDR_ARRAY
MOVF INDF0, W, ACCESS
;записываем туда же число 0x9a
MOVLW 0x9a
MOVWF INDF0, ACCESS
;и инкременируем его там же
INCF INDF0, F, ACCESS |
и так далее.
Кроме INDFx имеются так же и другие вспомогательные регистры, которые помимо функций доступа к ячейкам, изменяют значения регистров FSR. Это регистры POSTINCx, POSTDECx, PREINCx и PLUSWx. Для работы с данными в табличном виде (с массивами) как раз то что надо. Предлагаю самостоятельно их изучить в указанных мною разделах...
Удачи.
|
|
|
|
22.08.2007, 11:09
|
|
|
Временная регистрация
Регистрация: 14.04.2007
Сообщений: 50
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
 спасибо, теперь понятно.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:58.
|
|