繁体   English   中英

pic16f877a uart嵌入式C代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM