0

正如我的问题所说,要通过其地址访问端口,我们可以将其写为“&PORTA”吗?

在我的问题中,我想使用Modbus Protocol从/向HMI读取/写入端口值。

我有一个结构数组:

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系列)

4

2 回答 2

1

PORTx已经映射到 PORTx 寄存器的内容,你不需要它的地址。要从端口读取,请使用 PORTx 寄存器。要写入,请使用 LATx 寄存器。

因此,如果您希望将值rwCoil_000x反映在端口 (A) 上,只需编写:

LATA = rwCoil_000x; 

如果你想从端口读取到同一个变量,写:

rwCoil_000x = PORTA;

当然,这假设 PORTA 设置为通用输出。

于 2017-02-11T09:27:21.220 回答
0

如果您想在许多不同的端口上进行泛化,您可以构建一个对 *PORT 的易失性引用数组。

我用另一种方式做了一次,输出,LAT 寄存器,请参阅使用 LAT 数组切换输出。指向 lat 的(字节)指针的类型

于 2017-02-11T15:49:30.803 回答