您现在的位置: 主页 > MCU > 单片机学习 > 第45节:主机的串口收发综合程序框架 -
本文所属标签:
为本文创立个标签吧:

第45节:主机的串口收发综合程序框架 -

来源: 网络用户发布,如有版权联系网管删除 2018-08-31 

[导读]从业近十年!手把手教你单片机程序框架 第45讲开场白:在大部分的项目中,串口都需要“一收一应答”的握手协议,主机先发一串数据,从机收到数据后进行校验判断,如果校验正确则返回正确应答指令,如果校验

从业近十年!手把手教你单片机程序框架 第45讲

开场白:

在大部分的项目中,串口都需要“一收一应答”的握手协议,主机先发一串数据,从机收到数据后进行校验判断,如果校验正确则返回正确应答指令,如果校验错误则返回错误应答指令,主机收到应答指令后,如果发现是正确应答指令则继续发送其它的新数据,如果发现是错误应答指令,或者超时没有接收到任何应答指令,则继续重发,如果连续重发三次都是错误应答或者无应答,主机就进行报错处理。

上一节已经讲了从机,这节就讲主机的收发端程序实例。要教会大家四个知识点:

第一个:为了保证串口中断接收的数据不丢失,在初始化时必须设置IP = 0x10,相当于把串口中断设置为最高优先级,这个时候,串口中断可以打断任何其他的中断服务函数,实现中断嵌套。

第二个:主机端的收发端程序框架。包括重发,超时检测等等。

第三个:主机的状态指示程序框架。可以指示待机,通讯中,超时出错三种状态。

第四个:其实上一节的LED灯闪烁的时间里,我忘了加原子锁,不加原子锁的后果是,闪烁的时间有时候会不一致,所以这节多增加一个原子锁变量ucLedLock,再次感谢“红金龙吸味”关于原子锁的建议,真的很好用。

具体内容,请看源代码讲解。

(1)硬件平台:

基于朱兆祺51单片机学习板。

(2)实现功能:

显示和独立按键部分根据第29节的程序来改编,用朱兆祺51单片机学习板中的S1,S5,S9,S13作为独立按键。

一共有4个窗口。每个窗口显示一个参数。串口可以把当前设置的4个数据发送给从机。从机端可以用电脑的串口助手来模拟。

第一:按键更改参数:

第8,7,6,5位数码管显示当前窗口,P-1代表第1个窗口,P-2代表第2个窗口,P-3代表第3个窗口,P-4代表第1个窗口。

第4,3,2,1位数码管显示当前窗口被设置的参数。范围是从0到9999。S1是加按键,按下此按键会依次增加当前窗口的参数。S5是减按键,按下此按键会依次减少当前窗口的参数。S9是切换窗口按键,按下此按键会依次循环切换不同的窗口。S13是启动发送数据和复位按键,当系统处于待机状态时,按下此按键会启动发送数据;当通讯超时蜂鸣器报警时,可以按下此键清除报警,返回到待机的状态。

第二:通过串口把更改的参数发送给从机。

波特率是:9600.

通讯协议:EB 00 55 GG 00 02 XX XX CY

其中第1,2,3位EB 00 55就是数据头

其中第4位GG就是数据类型。01代表更改参数1,02代表更改参数2,03代表更改参数3,04代表更改参数4,

其中第5,6位00 02就是有效数据长度。高位在左,低位在右。

其中从第7,8位XX XX是被更改的参数。高位在左,低位在右。

第9位CY是累加和,前面所有字节的累加。

一个完整的通讯必须发送完4串数据,每串数据之间的间隔时间不能超过10秒钟,否则认为通讯超时主机会重发数据,如果连续三次都没有返回,则引发蜂鸣器报警。如果接收到得数据校验正确,主机继续发送新的一串数据,直到把4串数据发送完毕为止。

系统处于待机状态时,LED灯一直亮,

系统处于非待机状态时,LED灯闪烁,

系统处于出错状态时,LED灯闪烁,并且蜂鸣器间歇鸣叫报警。

通过电脑的串口助手来模拟从机,返回不同的应答

从机返回校验正确应答:eb 00 55 f5 00 00 35

从机返回校验出错应答:eb 00 55 fa 00 00 3a

(3)源代码讲解如下:

第四十五节源代码讲解.rar
文件类型: .rar fd8723d1ab500faae48d7e4e909b431f.rar (7.40 KB)

总结陈词:

前面花了大量篇幅详细地讲解了串口收发数据的程序框架,从下一节开始我讲解单片机掉电后数据保存的内容,欲知详情,请听下回分解-----利用AT24C02进行掉电后的数据保存。



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机学习 > 第45节:主机的串口收发综合程序框架 -
 

"第45节:主机的串口收发综合程序框架 -"的相关文章

网站地图

围观()