pic16f877a uart嵌入式c代码
pic16f877a uart embedded c code
我已经为PIC16F877A 编写了UART 代码。该代码无法正常工作,它显示了一个错误,例如 MP LAB IDE.I 需要指针,希望向 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++
returns a char
,因此您正在尝试使用外部 *
.
取消引用 char
相反,您可能希望传输指针当前指向的字符 (*q
),然后递增指针 (q++
):
while(*q) {
tx(*q);
q++;
}
也可以这样写
while(*q) {
tx(*q++);
}
这样,您的代码 编译 (使用 xc8
),但我尚未验证您的 SFR 设置 - 如果代码不 工作,仔细检查您是否正确设置了 SFR。更多信息见@LPs提供的link:https://electrosome.com/uart-pic-microcontroller-mplab-xc8/
表达式中:
*(*q++) ;
您取消引用指针以获取一个字符,然后再次取消引用 (*
);但是你不能取消引用非指针。
除此之外,您可能还打算在 uart_string()
中调用 tx()
以使其执行任何有用的操作。
我已经为PIC16F877A 编写了UART 代码。该代码无法正常工作,它显示了一个错误,例如 MP LAB IDE.I 需要指针,希望向 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++
returns a char
,因此您正在尝试使用外部 *
.
char
相反,您可能希望传输指针当前指向的字符 (*q
),然后递增指针 (q++
):
while(*q) {
tx(*q);
q++;
}
也可以这样写
while(*q) {
tx(*q++);
}
这样,您的代码 编译 (使用 xc8
),但我尚未验证您的 SFR 设置 - 如果代码不 工作,仔细检查您是否正确设置了 SFR。更多信息见@LPs提供的link:https://electrosome.com/uart-pic-microcontroller-mplab-xc8/
表达式中:
*(*q++) ;
您取消引用指针以获取一个字符,然后再次取消引用 (*
);但是你不能取消引用非指针。
除此之外,您可能还打算在 uart_string()
中调用 tx()
以使其执行任何有用的操作。