单片机的串口输入总是中断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机的串口输入总是中断相关的知识,希望对你有一定的参考价值。

我用串口精灵在电脑上调,单片机作为串口的输入和输出,用单片机给电脑发数据时没有问题,电脑上能显示正确。但是用电脑去给单片机发信息时就完全不对,甚至我串口精灵没有发数据时,单片机的程序都会跑到串口中断里面去,比如我写成下面这样,就算不给单片机发数据等都会一直闪(P1接了一排LED),按理说不是应该给单片机发送数据后,REN为1,RI=0会开始接收,接受完了进入中断且RI标志位置为1么?怎么随随便便就总往终端里面跑,更奇怪的是发送的时候没有任何问题

void UARTInterrupt(void) interrupt 4

if(RI)

RI = 0;
P1=0x00;
delay();
P1=0xff;
delay();

else

TI = 0;
sending=0;


我刚才把RXD那根线彻底拔了都能进中断去闪灯,
EA=0; //暂时关闭中断
TMOD&=0x0F; //定时器1模式控制在高4位
TMOD|=0x20; //定时器1工作在模式2,自动重装模式
SCON=0x50; //串口工作在模式1
TH1=0xFD; //计算定时器重装值
TL1=0xFD;
PCON|=0x00; //串口波特率加倍
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1;
配置是这样写的,发送数据时没有问题,不知道是不是配置错了,大神们给看看

肯定串口有数据,且接收完成后才能进入中断,造成你这种现象的,要么是硬件电路有干扰,RXD线总有一些干扰脉冲,所以造成中断。要么是程序其他地方有问题,强制是RI置1,而进入了中断。追问

可是我把RXD的那条导线已经拔掉了,让管脚和串口根本断着,甚至线都拆下来还是会进中断,而且进去的很有规律,灯闪的很平均,奇怪了

追答

你将RXD接地试试,还有你程序其他地方是否有强制RI置1的情况?

追问

我用的仿真器,我刚才接地试了下,仿真器没办法下载程序了,不接地就能下载,我怀疑是仿真器用的也是这个串口,强行把RXD接地导致下载不下去程序,不接地仿真器一直会占着这个口传输数据导致频频进入中断。会不会是这个问题呢?

追答

将仿真器拔下试试就清楚了。

参考技术A 这个问题我遇到过,建议楼主尝试通过计算机串口给单片机供电,看能否解决该问题。 参考技术B 不要在中断里面延时,闪灯要在主程序中 参考技术C 问3个问题:
1、波特率是多少?
2、在中断了的延时多长?
3、你怎么知道进中断了?

单片机c语言中interrupt4表示啥意思

串口中断里用的

参考技术A 对51来说,
中断0
外部中断0
中断1
定时器1中断
中断2
外部中断1
中断3
定时器2中断
中断4
串口中断
当PC机发给51数据(通过RS232串口)时就会触发这个中断
一般要写个函数响应中断,函数名随便,但是格式必须一定:
例如
void
UART_Interrupt_Receive(void)
interrupt
4

unsigned
char
k
=
0;
if
(RI==1)

RI
=
0;
k
=
SBUF;
....

else


以上是关于单片机的串口输入总是中断的主要内容,如果未能解决你的问题,请参考以下文章

单片机串口中断接收

STM8S单片机串口UART2接收中断一直在运行,出不来,怎么回事?

51单片机串口中断函数响应并返回后主函数运行到末尾后卡着不动,主函数无法循环了

STC12C5A60S2单片机的串口中断问题求助

串口中断优先级最高的是

单片机串口发送的数据一直是00;求解