我为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)
{
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");
}
答案 0 :(得分:3)
while
循环中的陈述没有意义:
while(*q) {
*(*q++);
}
这会导致您遇到error: (981) pointer required
错误,因为您要取消引用非指针:*q++
返回char
,因此您尝试取消引用char
}使用外部*
。
相反,您可能希望传输指针当前指向的字符(*q
),然后递增指针(q++
):
while(*q) {
tx(*q);
q++;
}
这也可以写成
while(*q) {
tx(*q++);
}
这样,您的代码编译(使用xc8
),但我还没有验证您的SFR设置 - 如果代码不是工作,请仔细检查您已正确设置SFR。有关详细信息,请参阅@LP提供的链接:https://electrosome.com/uart-pic-microcontroller-mplab-xc8/
答案 1 :(得分:2)
在表达式中:
*(*q++) ;
取消引用指针以获取一个char,然后再将其取消引用(*
);但是你不能取消引用非指针。
除此之外,您可能还打算在tx()
中致电uart_string()
,以便其执行任何有用的操作。