Микрочип 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 для переключения выходов. тип (байтовый) указатель на лат