Микрочип XC16: Можем ли мы получить доступ к порту, используя его адрес? Например: &PortA?

Как говорит мой вопрос, чтобы получить доступ к порту по его адресу, можем ли мы написать его как "&PORTA"??

В моей проблеме я хочу прочитать / записать значение порта из / в HMI, используя протокол Modbus.

У меня есть массив структуры:

typedef struct func_code_reg {
    volatile uint16_t addr;
    volatile uint16_t *data;
}RW_REG_DATA;

// described as
RW_REG_DATA rwCoilStatusTbl[] = {
    //      Addr        Data_Register
    {       0,           &rwCoil_0000      },
    {       1,           &rwCoil_0001      },
};

Всякий раз, когда HMI читает данные, он читает текущее значение регистра &rwCoil_000x

Всякий раз, когда HMI записывает данные, регистр &rwCoil_000x обновляется.

Вместо этого я хотел бы использовать &PORTA для чтения статуса порта или для обновления статуса порта.

Является ли это возможным?? И если это возможно, это правильный способ обновить статус порта?

Или лучше, пожалуйста, направь меня.

(Я использую серию dsPic33E)

2 ответа

Решение

PORTx уже сопоставлен с содержимым регистра PORTx, вам не нужен его адрес. Для чтения из порта используйте регистр PORTx. Для записи используйте регистр LATx.

Так что если вы хотите значение rwCoil_000x чтобы отразиться на порте (A), просто напишите:

LATA = rwCoil_000x; 

И если вы хотите прочитать из порта в ту же переменную, напишите:

rwCoil_000x = PORTA;

Конечно, это предполагает, что PORTA настроен как выход общего назначения.

Если вы хотите обобщить множество разных портов, вы можете создать массив изменчивых ссылок на *PORT.

Я сделал это один раз для другого способа, выходы, регистры LAT, см. Использование массива LAT для переключения выходов. тип (байтовый) указатель на лат

Другие вопросы по тегам