pic16f877a通用异步收发器嵌入式c代码
我已经为PIC16F877A编写了UART代码。代码不工作,它显示了一个错误,如MP LAB IDE中需要的指针。我想将字符发送和接收到PC超级终端pic16f877a通用异步收发器嵌入式c代码,c,embedded,pic,microchip,C,Embedded,Pic,Microchip,我已经为PIC16F877A编写了UART代码。代码不工作,它显示了一个错误,如MP LAB IDE中需要的指针。我想将字符发送和接收到PC超级终端 #include<pic.h> void pic_init(void) { TRISC7=1; TRISC6=0; } void uart_init(void) { TXSTA=0x20; RCSTA=0x90; SPBRG=15; } void tx(unsigned char byte) {
#include<pic.h>
void pic_init(void)
{
TRISC7=1;
TRISC6=0;
}
void uart_init(void)
{
TXSTA=0x20;
RCSTA=0x90;
SPBRG=15;
}
void tx(unsigned char byte)
{
int i;
TXREG=byte;
while(!TXIF);
for(i=0;i<400;i++);
}
void string_uart(char *q)
{
while(*q)
{
*(*q++);
}
}
unsigned char rx()
{
while(!RCIF);
return RCREG;
}
void main()
{
char *q;
pic_init();
uart_init();
tx('N');
rx();
string_uart("test program");
}
while循环中的语句没有意义:
while(*q) {
*(*q++);
}
这将导致出现错误:981所需指针错误,因为您正在解引用非指针:*q++返回一个字符,因此您试图用外部*解引用一个字符
相反,您可能希望传输指针当前指向的字符*q,然后递增指针q++:
也可以这样写
while(*q) {
tx(*q++);
}
这样,您的代码可以用xc8编译,但我还没有验证您的SFR设置-如果代码不起作用,请仔细检查您是否正确设置了SFR。有关更多信息,请参阅@LPs提供的链接:while循环中的语句没有意义:
while(*q) {
*(*q++);
}
这将导致出现错误:981所需指针错误,因为您正在解引用非指针:*q++返回一个字符,因此您试图用外部*解引用一个字符
相反,您可能希望传输指针当前指向的字符*q,然后递增指针q++:
也可以这样写
while(*q) {
tx(*q++);
}
这样,您的代码可以用xc8编译,但我还没有验证您的SFR设置-如果代码不起作用,请仔细检查您是否正确设置了SFR。有关更多信息,请参见@LPs提供的链接:在表达式中:
*(*q++) ;
取消对指针的引用以获取一个字符,然后再次取消对该字符的引用*;但不能取消对非指针的引用
除此之外,您可能还打算在uart_字符串中调用tx,以便它执行任何有用的操作。在表达式中:
*(*q++) ;
取消对指针的引用以获取一个字符,然后再次取消对该字符的引用*;但不能取消对非指针的引用
除此之外,您可能还打算在uart_字符串中调用tx,以便它执行任何有用的操作。请查看。至少你必须设置波特率来做你想做的事情。一点小费。尝试短切TX和RX引脚并开始使其工作。要将它连接到PC,您至少还需要一根usb到TTL UART 5V电缆。如果您的编译器发出诊断消息,您应该在问题中包含确切的消息,并准确指出消息是在哪一行发出的。@LPs:带有旧串行端口的PC仍然可用。尽管需要一个232线驱动器。如果他的电脑默认安装了超级终端,那么它一定很旧,而且在任何情况下都可能有232个端口。@Clifford我的意思是,OP可以将PIC直接连接到电脑,而不使用至少一个MAX232。我建议使用USB到TTL电缆直接连接到TX和RX引脚,可能在带有PIC PDIP包的试验板测试电路上。当我们将SPBRG值设置为15时,buad速率值为9600,晶体频率为10MhZ,如数据表所示。请回复我,先生。查看。至少你必须设置波特率来做你想做的事情。一点小费。尝试短切TX和RX引脚并开始使其工作。要将它连接到PC,您至少还需要一根usb到TTL UART 5V电缆。如果您的编译器发出诊断消息,您应该在问题中包含确切的消息,并准确指出消息是在哪一行发出的。@LPs:带有旧串行端口的PC仍然可用。尽管需要一个232线驱动器。如果他的电脑默认安装了超级终端,那么它一定很旧,而且在任何情况下都可能有232个端口。@Clifford我的意思是,OP可以将PIC直接连接到电脑,而不使用至少一个MAX232。我建议使用USB到TTL电缆直接连接到TX和RX引脚,可能在带有PIC PDIP包的试验板测试电路上。当我们将SPBRG值设置为15时,buad速率值为9600,晶体频率为10MhZ,如数据表所示。请回复我,先生。谢谢。我已经编译了代码,没有错误。我将在proteous中进行检查,然后返回给您,先生谢谢。我已经编译了代码,没有错误。我会在Proteopus中进行检查,然后返回给您,先生