如何将 PIC18F4550 的一个端口同时用作输入和输出?

How can I use a port of PIC18F4550 as both input and output?

所以我需要做的是使用 PIC18F4550、74LS244 和 HCT573 的三态逻辑应用程序。这里的问题是我需要使用 PIC 的一个端口作为输入和输出。我需要使用端口的 7 个引脚,因为我需要连接一个 7 段显示器,其中四个引脚必须同时用作输入。这些输入连接到 74LS244 并从那里连接到四个按钮,因此当我在显示器中输入二进制数字 0 到 15 时,必须显示 10 到 15 的数字或字母。显示器已连接到 HCT573,然后从那里到 PIC。这里的主要问题是我真的不知道如何同时将端口用作输入和输出。 我用来写代码的软件是CCS Compiler (PIC C Compiler)。

您可以 运行 无限循环。在该循环中,您可以执行两种方法,一种用于轮询,一种用于显示。一些伪代码可能如下

int pollState()
{
    //return the output as an int
    
    int output = 0;
    //set 4 pins state to input - 0b00001111
    TRISC = 0x0f;
    
    //do some checking on the pins 
    if(PORTCbits.RC0 = 1)
    {
        output |= 1 <<0;
    }
    
    if(PORTCbits.RC1 = 1)
    {
        output |= 1<<1;
    }
    
    if(PORTCbits.RC2 = 1)
    {
        output |= 1 <<2;
    }
    
    if(PORTCbits.RC3 = 1)
    {
        output |= 1 <<3;
    }
    
    
    
    return output;
    
    
}



int setState(int number)
{
    //set the portC as output
    
    TRISC = 0;
    
    //the binary was tranfered in the poll state
    //shift out the data here
    
    shiftOut(number);
    
    
    return 0;
    
}

int main(int argc, char **argv)
{
    int state=0;
    
    while(1)
    {
        
        state=pollState();
        setState(state);
    }
    
    
    return 0;
}

好吧,我会更改 Pin-Mode 本身,以防止 PIC18F4550 出现某些不良行为。 因此,如果您想读取一些引脚:更改这些位上的 TRISx 寄存器,您希望将输入设置为 1。 如果您想从某些引脚写入:将这些位上的 TRISx 寄存器改回 0。

TRISx 寄存器用于 select 引脚模式(输入 = 1/输出 = 0)。

如果您不更改此寄存器,它可能会得到错误的结果或者可能会毁坏您的 PIC。

嗯,我想告诉你的是:你不能/不应该同时读取和写入数据。您始终必须使用 TRISx 寄存器切换引脚模式。写入数据:使用 LATx-Register;读取数据:使用 PORTx 寄存器;更改引脚模式:使用 TRISx 寄存器。