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() 以使其执行任何有用的操作。