Microchip XC16:我们可以使用其地址访问端口吗?对于ex:& PortA?

时间:2017-02-09 09:11:49

标签: microcontroller microchip mplab xc16

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

在我的问题中,我想使用 Modbus协议 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系列)

2 个答案:

答案 0 :(得分:1)

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

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

LATA = rwCoil_000x; 

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

rwCoil_000x = PORTA;

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

答案 1 :(得分:0)

如果要概括许多不同的端口,可以构建一个对* PORT的易失性引用数组。

我这样做了一次,输出,LAT寄存器,见Using an array of LATs to toggle outputs. type of (byte) pointer to lat