Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

PIC18F45K22 не могу сбросить ANSELx в 0

Чт авг 24, 2017 17:15:04

Доброе время суток!

Взгляните, пожалуйста, свежим взглядом со стороны.

При начальной инициализации настраиваю порты. Кроме прочего нужно подключить цифровые входы сбросом соответствующих ANSELx в 0.

Код
Код:
   movlw   0x00
   movwf   0xF38
   movwf   ANSELA
   bcf      ANSELA, 0
   bcf      ANSELA, 1
   bcf      ANSELA, 2
   bcf      ANSELA, 3

Не меняет значение регистра. С другими аналогичными регистрами ситуация та же. Цифровые порты, соответственно, на вход тоже не работают. Состояние регистров смотрю через watch в MPLAB 8.92 + PICkit3.

С остальными регистрами всё работает штатно.

То ли это какой-то не документированный баг, то ли я что-то проглядел в даташите, хотя, вроде, просмотрел его полностью. До этого имел дело с другими пичками 18й серии - никаких проблем никогда не было, а тут буксую на ровном месте.

Добавлено after 2 hours 13 minutes 48 seconds:
Разобрался сам. Может, кому пригодится.

Ответ крылся в разделе Memory organization (не ожидал там увидеть что-то новое):

Addresses F38h through F5Fh are
also used by SFRs, but are not
part of the Access RAM. Users
must always use the complete
address or load the proper BSR
value to access these registers.


Регистры с указанными адресами не попали в страницу быстрого доступа (Access RAM) и для них надо использовать страничную адресацию с использованием BSR или команды использующие полный адрес (movff)

Рабочий вариант кода:
Код:
   movlw   0x00
   movff   WREG, ANSELA


PS
Надо читать даташит еще внимательней.

Re: PIC18F45K22 не могу сбросить ANSELx в 0

Чт авг 24, 2017 20:05:30

В догон.
Команда записи литерала в BSR: movlb <номер банка>
:wink: :tea:
Ответить