pic16f877a uart嵌入式c代码

时间:2016-04-08 05:08:33

标签: 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)
{
   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");
}

2 个答案:

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