购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 串口中断发送与接收的C程序

在一些单片机资料的示范程序中,有用串口中断和不用串口中断的,但多数串口中断功能使用得不对,没有充分利用中断的作用。

1.2.1 不用串口中断发送字符串的C程序

程序源代码如下:

不用串口中断发送字符串时,每发送1个字节数据都要等其发送完再发送下一个字节数据,当发送数据量较大时,单片机在等待时间上耗时过长,这对于复杂的程序是不允许的,单片机还有很多任务要执行,这时就要使用串口中断功能。

1.2.2 不正确的中断发送字符串C程序

程序源代码如下:

以上代码虽然使用了串口中断功能,但只是用中断功能清除了标志位。总体来看,无论程序是在发送字符串时,还是阻塞在发送和等待上,CPU都无法执行别的任务。

1.2.3 正确的串口中断发送与接收C程序

程序源代码如下:

以上是一段较完整的程序,比较复杂,只看注释可能理解不了,详细解释如下:#include语句声明头文件时,文件名用的是双引号,代表头文件在程序所在文件夹内;声明库函数时,文件名用的是尖括号,代表库函数在系统文件夹内,后面的strlen(s)计算字符串长度函数属于<string.h>函数库内函数。接着定义了发送、接收缓冲区和有关状态位,接收数据的处理方式是按帧接收,即认为连续的一组数为一帧数据,中间间断20ms(这个值要根据波特率调整)及以上就判为此帧数据接收完毕,要对数据进行解析,再收到数据就是下一帧数据了,接收数据的过程用的是中断接收,当接收完成通过新数据标志位通知主程序进行处理。发送数据的处理方式是将要发送数据写入发送缓冲区,定义好发送数据量,发送第一个数据,余下的数据主程序就不管了,都在中断程序中自动执行。主程序中每秒发送“Hello world!”字符串,秒计时是靠定时中断完成的,主程序只是检测是否到1s和是否有新数据进来,如果到1s就发送,如果有新数据就处理,这样主程序的响应速度就快了,还可以添加别的任务让其执行。 Go/eO8p6KF7jgIEIFbeig4ZOKFl4Mrx/Wctd2kiBlaVTC2tNm8/YQ2/orbkkv78B

点击中间区域
呼出菜单
上一章
目录
下一章
×