我知道有很多关于这个功能的问题,但是在这里搜索了几个小时后,我找不到能够帮我解决这个问题的答案。
这是通过我试图实现的UART读取字符串的功能。
void UART_Read_Text(char *Output, unsigned int length)
{
unsigned int i;
for(int i=0;i<length;i++)
Output[i] = UART_Read();
}
我有一个16字符数组,名为全局定义的标签。我想将UART数据接收到这个数组中。
以下是我尝试使用它的方法。
UART_Read_Text(label,16);
有人可以说清楚我做错了什么吗?请记住,我的UART TX功能运行良好,所以我已正确设置。此外,我试图不必使用中断,但也许这就是我必须要去的方式。任何帮助,将不胜感激。
答案 0 :(得分:0)
您是否尝试使用调试器放置断点并逐步执行代码?您还可以尝试打印UART_Read()的输出以查看它是否输出任何内容。
另外,删除
unsigned int i;
令人困惑,因为它与之后的陈述相矛盾。也许编译器将i的初始化删除为0,因为它在同一语句中将其声明为int?
答案 1 :(得分:0)
我今晚开始工作了。我实际上最终使用了中断服务程序。我要发布它,希望它可以帮助别人。
void interrupt ISR()
{
if (PIR1bits.RCIF) // see if interrupt caused by incoming data
{
UART_Read_Text(Output,16); //replace "Output" with the array that you want populated.
PIR1bits.RCIF = 0; // clear interrupt flag
}
}
此外,这些功能的版本似乎工作得很好。虽然,有一些清理要做,这应该让某人开始。
char UART_Read()
{
while(!RCIF);
return RCREG;
}
void UART_Read_Text(char *Output, unsigned int length)
{
unsigned int i;
for(int i=0;i<length;i++)
Output[i] = UART_Read();
}
我通过以下链接向作者表示感谢。我在此代码中找到了有用的信息。务必设置控制中断的所有位。它们也可以在以下链接中找到。
https://gist.github.com/gshrikant/8549474
但他们在这里:
RCIF=0; // make sure receive interrupt flag is clear
RCIE=1; // enable UART Receive interrupt, 1 to enable
PEIE = 1; // Enable Peripheral interrupts //WAS ORIGINALLY 1
GIE = 1; // Enable global interrupts
再次感谢所有试图提供帮助的人。总是很感激。