【问题标题】:How can I use a port of PIC18F4550 as both input and output?如何使用 PIC18F4550 的端口作为输入和输出?
【发布时间】:2021-04-14 00:26:30
【问题描述】:

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

【问题讨论】:

    标签: microcontroller pic


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

      【解决方案2】:

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

      TRISx-Register 用于选择引脚模式(输入 = 1 / 输出 = 0)。

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-20
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        相关资源
        最近更新 更多