如何将 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 寄存器。
所以我需要做的是使用 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 寄存器。