This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、我需要你们的帮助、现在我正在处理 MSP430F149项目、我的 MSP430F149将通过 UART 连接另一个器件、我要做的是、如果 MSP430F149通过 UART 发送数据时器件未连接、LCD 显示屏"请先连接器件"。 我使用计时器进行检查、如果 UART 器件在5秒内没有响应、计时器将设置一个标志、MSP430F149将退出 UART 进程并显示"请首先连接器件"、但现在、如果器件未连接、UART 进程始终挂起。 我的代码如下所示。
#pragma vector=TIMERB1_vector
_interrupt void Timer_B1 (void)
{
switch (__evo_in_range (TBIV、2))
{
案例2:
{
uaraar=1;
TBCCTL1 &=~CCIE;
中断;
}
默认值:break;
}
}
void rs232_fn (uchar 命令、uchar 长度、uchar * ptr)
{
uchar i、temp、checksum;
//5S 正在等待 UART 响应
TBCTL |= TBCLR;
TBCTL = TBSSEL_1 + ID_3 + MC_1; //clock from ACLK、and devieded by 8、32.768kHz/8=4096Hz、
TBCCTL1 = CCIE;
IE1 &=~URXIE0; //禁用 Rx 中断
while ((IFG1&UTXIFG0)==0)
{
if (uaraar)(恐怖)
中断;
}
if (uaraar)(恐怖)
{
uaraar=0;
IE1|=URXIE0;
PAGE =200;
DisplayDesk (页面); //显示"请先连接设备"
}
其他
{
(笑声)
}
}
尊敬的 Jian:
您能否指出您的程序挂起的代码行?
我看到您使用 TimerB 捕获比较寄存器1 (CCR1)来实现超时功能、但您从未填充 CCR1寄存器的值。 这在您的代码中的其他地方完成了吗?
我也不理解您代码的以下部分:
while ((IFG1&UTXIFG0)==0) { if (uaraar)(恐怖) 中断; }
您轮询 UART 发送中断标志、但绝不会将任何数据放入 UART TX 缓冲区。 此外、如果器件连接到 UART 接口、则该标志不会更改值、因为它仅发出 UART TX 缓冲区为空的信号。 为了 更好地了解 UART 中断标志的用途、我建议阅读 MSP430x1xx 系列用户指南的第13章。
最后、我建议查看此处可供下载的计时器和 UART 示例: MSP430x13x、MSP430F14x、MSP430F15x、MSP430F16x 代码示例(修订版 T)
此致、
Caleb Overbay