标题: 单片机串口中断函数,函数体空着也可以实现发送接收功能吗? [打印本页]

作者: jackduan2018    时间: 2023-6-20 09:25
标题: 单片机串口中断函数,函数体空着也可以实现发送接收功能吗?
功能:51单片机的串口1中断处理函数        
**************************************************************************/
void UART1(void) interrupt 4  // 串行口1中断函数  
{ ; }

这样写的作用是什么?运行结果会怎么样?


作者: 飞云居士    时间: 2023-6-20 10:40
这样写是“框架”的意思。虽可以中断,但SBUF里的数据没有转存到你需要的地方
作者: LaoYuTou    时间: 2023-6-20 15:07
可以,但每次收发完一个字节都会到中断里来一下,如果不及时处理会一直进中断,甚至出不来,简单的测试可以,不建议这么做。不用中断可以把中断关掉,这个函数存在也没问题的。
作者: 188610329    时间: 2023-6-20 18:32
作用是占位。

会在  0023H  处写入一个字节:  32H
作者: wulin    时间: 2023-6-20 21:42
估计是预留,如果开了串口中断而没有中断函数,程序会出错。最好注释掉,有用到时再开。
作者: 49227630    时间: 2023-6-20 21:51
不能,会卡在这里,没有中断返回语句
作者: Y_G_G    时间: 2023-6-20 22:58
没试过会怎么,也懒得去试,你自己可以试一下
个人认为为卡死
如果中断已经开启了,中断标志位是必须要软件清除的,这是8051的基础知识
作者: devcang    时间: 2023-6-21 00:09
中断只是处理的一个方法,比较方便、也比较可靠。如果单片机足够快,可以用查询的方法处理的。
作者: coody_sz    时间: 2023-6-21 09:49
经常看到有人回“一楼占位”,就是这个意思。
作者: jackduan2018    时间: 2023-6-21 13:32
感谢各位大神,向各位学习了。
作者: atmfjg    时间: 2023-6-21 14:07
只是中断,没有实际数据
作者: 2728999742    时间: 2023-6-21 17:17
串口中断处理函数是一种特殊的函数,它在串口接收和发送数据时自动调用。在使用串口进行通信时,我们需要编写中断处理函数来处理接收和发送数据。
在接收数据时,中断处理函数首先判断接收缓冲区是否有数据可读。如果有数据可读,则将数据从缓冲区中取出并进行处理。处理完后,如果缓冲区还有数据可读,则继续处理,直到缓冲区中的数据全部处理完毕。
在发送数据时,中断处理函数首先判断发送缓冲区是否有空闲空间可用。如果有空闲空间可用,则将待发送的数据写入缓冲区中,并将发送指针加1。如果发送缓冲区已满,则等待下一次中断处理函数的调用。
第 1 页
需要注意的是,在编写中断处理函数时,我们需要考虑到数据的稳定性和可靠性。因为数据是通过串口进行通信的,如果数据传输出现错误或丢失,将会对系统产生严重影响。因此,我们需要合理地处理数据,保证数据的传输稳定和可靠。
总之,串口中断处理函数是串口通信中不可或缺的一部分。通过编写合理的中断处理函数,我们可以有效地处理串口接收和发送数据,保证系统的稳定性和可靠性。
作者: jackduan2018    时间: 2023-7-13 10:55
2728999742 发表于 2023-6-21 17:17
串口中断处理函数是一种特殊的函数,它在串口接收和发送数据时自动调用。在使用串口进行通信时,我们需要编 ...

谢谢!谢谢!的确想您说的那样,中断函数内的数据处理部分没写好,数据会丢失或者说根本没有发送成功,我想连续发送24位数据,可返回电脑的总是不一样。

作者: jackduan2018    时间: 2023-7-13 10:57
188610329 发表于 2023-6-20 18:32
作用是占位。

会在  0023H  处写入一个字节:  32H

为什么是32H?

作者: npn    时间: 2023-7-13 12:12
里面最好加一个 _nop_(); 否则编译器可能会优化掉。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1