您好!
我正在编写一个简单的应用程序、其中控制器应通过 UART 中断接收字符、同时我的 while 循环应该不会执行。
我正尝试执行以下代码、其中 UART 应接受该字符、而我的 while 循环应持续运行、并应根据接收到的字符执行 if 或 else if 条件。
但它不是以这种方式工作的、 而是在_ bis_SR_register (LPM0_bits + GIE)停止;甚至没有进入 while 循环。
有人能帮助我解决这个问题吗?
空 main (void)
{
__ bis_SR_register (LPM0_bits + GIE);
while (1)
{
if (UartRx_flag == 1)
{
UartRx_flag = 0;
if (UCA0RXBUF == 0x31)
{
__delay_cycles (100000);
ReadLocalTemp();
TestMenu();
}
否则、如果(UCA0RXBUF == 0x32)
{
__delay_cycles (100000);
ReadRemoteTemp();
TestMenu();
}
}
}
}
//*****
// UART RX 中断
//*****
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
#else
#错误编译器不受支持!
#endif
{
开关(__even_in_range (UCA0IV、4))
{
情形0:break;//向量0 -无中断
情形2://矢量2 - RXIFG
while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器是否已就绪?
UCA0TXBUF = UCA0RXBUF;// TX -> RXED 字符
UartRx_flag = 1; //将标志置为高电平
中断;
情形4:中断;//矢量4 - TXIFG
默认值:中断;
}
}
谢谢。此致、
K. Aravind,
第二代 Sigma 高级系统、
9848992750.