【发布时间】:2021-07-18 08:42:15
【问题描述】:
我是 PIC 微控制器的初学者,并尝试通过教程学习并同时实施一个我需要为 PIC 微控制器编程的项目。我已经尝试了各种教程中的 3 种不同的 UART 传输程序,但我仍然遇到同样的问题。
当我尝试传输一个字符串时,说“abcd”,我只会得到 adadadad.... 重复。可能是什么问题?我检查了波特率,它是正确的。我试过引入延迟,但没有帮助。将不胜感激任何建议。 UART 传输功能是频率计数器程序的一部分,它在接收到中断时计算频率并将其显示在 LCD 上。 LCD 上显示的值也将通过 UART 传输,但首先我试图使其适用于随机字符串“abcd”。我正在使用 proteus 进行模拟。目前使用以下函数传输数据字符串:
void UART_send_char(char bt)
{
while(!TXIF); // hold the program till TX buffer is free
TXREG = bt; //Load the transmitter buffer with the received value
}
void UART_send_string(char* st_pt)
{
while(*st_pt) //if there is a char
UART_send_char(*st_pt++); //process it as a byte data
}
以下是我的主要功能:
void main() {
char op[12]; // Display string for ascii converted long.
char opdb[12]; // double buffer to stop flicker.
unsigned long freq = 0; // display frequency value to use.
unsigned short blinkc=0; // blink counter
int i,n,num;
unsigned char letter;
unsigned char test[]="abcd";
init_ports();
init_interrupts();
Lcd_Init ();
Lcd_Cmd ( _LCD_CLEAR );
Lcd_Cmd ( _LCD_CURSOR_OFF );
start_timer_count();
for(;;) {
if (update_LCD) {
INTCON.GIE = 0; // Disable All interrupts.
INTCON.PEIE = 0; // Disable All Extended interrupts.
freq = (st_TMR1L+(st_TMR1H<<8)+(st_TMR1_ovfl<<16));//*1000;
ltoa(freq, op, 10);
n=ltoa(freq, opdb, 10); // Build string in non display buffer
memcpy(op,opdb,n); // Copy digits
memset(&op[n],' ',12-n); // Blank the rest.
LCD_Out(1,1,"FREQ:");
LCD_Out(1,7,op);
UART_send_string("abcd"); //<-----------TRANSMISSION FUNCTION CALLED HERE
update_LCD=0;
TMR1_counter=0;
TMR0_counter=0;
start_timer_count();
}
if (toggle_LED) { // Also check for signal presence at TMR1.
blinkc=~blinkc;
if (blinkc==0) { setBit(PORTD,0); } else { resBit(PORTD,0); }
toggle_LED=0;
if (freq==0) {
for ( i=0;i<12;i++) { op[i]=' ';}
LCD_Out(1,7,op);
}
}
}
}
【问题讨论】:
-
您在哪个板上使用哪个 PIC?您使用的是哪个串行接口库?也请出示minimal, complete, verifiable and reproducible example。我们需要查看所有代码。移除任何不需要的东西,比如 LCD。让您的示例最小化:只需发送“hello\r\n”并告诉我们您使用什么来接收数据(可能是接收器有问题)。
-
您使用什么 IDE 和编译器?你在哪里初始化串口?由于这是一个嵌入式应用程序,我们很难仅通过查看一段代码来检测错误。您必须通过提供有关您的项目和开发环境的有用信息来帮助我们检测问题。这样可以更轻松地帮助您。您还必须确保接收器硬件按@fpiette 所述的预期工作。继续帮助我们为您提供帮助。
-
问题在于未发布的接收代码。
标签: c microcontroller uart pic