[英]pic16f877a uart embedded c code
我已经为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");
}
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/
在表达式中:
*(*q++) ;
您取消引用指针以获得一个char,然后再次取消引用( *
); 但是您不能取消引用非指针。
除此之外,您可能还打算在uart_string()
调用tx()
来执行任何有用的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.