【发布时间】:2011-08-05 16:09:51
【问题描述】:
这对于熟悉 C 的人来说应该很容易回答。我想在 LCD 上显示一个变量(微控制器上的 UART (RS-232) 接收寄存器)的先前值。这是我当前的实现,它工作正常。但我想知道是否有办法在我的中断程序中花费更少的时间。目前,外设配置为在接收到 UART 馈送中的一个新字符后立即跳转到中断例程。有人建议吗?
//Initialization
char U1RX_data = '\0';
char p0_U1RX_data = '\0';
char p1_U1RX_data = '\0';
char p2_U1RX_data = '\0';
char p3_U1RX_data = '\0';
char p4_U1RX_data = '\0';
char p5_U1RX_data = '\0';
char p6_U1RX_data = '\0';
char p7_U1RX_data = '\0';
char U1buf[] = {p7_U1RX_data, p6_U1RX_data, p5_U1RX_data,
p4_U1RX_data, p3_U1RX_data, p2_U1RX_data,
p1_U1RX_data, p0_U1RX_data, U1RX_data, '\0'};
disp_string(-61, 17, 1, U1buf); //X, Y, mode, string
void _U1RXInterrupt(void){
p7_U1RX_data = p6_U1RX_data;
p6_U1RX_data = p5_U1RX_data;
p5_U1RX_data = p4_U1RX_data;
p4_U1RX_data = p3_U1RX_data;
p3_U1RX_data = p2_U1RX_data;
p2_U1RX_data = p1_U1RX_data;
p1_U1RX_data = p0_U1RX_data;
p0_U1RX_data = U1RX_data;
U1RX_data = U1RXREG;
IFS0bits.U1RXIF = 0;
}
【问题讨论】:
-
感谢您的所有回答。我会看看循环缓冲区。出于好奇,这是在时钟频率为 7.3 MHz 的 dsPIC30F4013 上进行的。在这种情况下可能不需要优化,但如果我遇到问题我会知道该怎么做。
标签: c microcontroller microchip uart