单片机与计算机进行通讯,一上电开始时检测如果上位机(计算机)按住空格键不松手,则将单片机波特率设置在19200,如果检测到没有按,则将波特率设置在9600,怎么实现呢???能有源代码更好了,谢谢!!!!!!!!!!
设单片机的波特率?这种方案不太可能吧。首先你得把计算机在按空格键的事件传给单片机,如果这时,串口还没好,怎么通信?这种情况波特率一般是定死的,或者从单片机那边设
上位机(计算机)要不停地发空格键.单片机初始化后不断接受,查接受到的字符是不是20h.
1楼说的很对,除非一开始先设置一个和上位机一样的波特率,然后才有可能通过串口接收到的数据进行波特率设置,要不连上位机传输的数据都无法接收,你怎么判断条件设置波特率呢
3楼说的 很有道理,那样的话 可以 在程序里设置一个 默认波特率(与计算机一致)。
引用: 引用 3 楼 huleide 的回复:
1楼说的很对,除非一开始先设置一个和上位机一样的波特率,然后才有可能通过串口接收到的数据进行波特率设置,要不连上位机传输的数据都无法接收,你怎么判断条件设置波特率呢
这位仁兄说的对
楼主这个不难实现吧。几行代码哦。
如果有个默认的波特率,保证串口通讯了在有可能达到你的要求。
我觉得一楼说的对。
波特率不对,会使单片机接受到的字符不是" ",不过一般不用" ",而用"U",因为U是0x55,即01010101.
这算是“波特率自适应”的一种应用。
启动后在一定时间(比如5秒)以内,检测串口的固定信号,并随之禁止串口、调整波特率、开启串口,再次循环判断,直到发现正确的波特率或者全部设完也找不到正确的。
你这个更简单一点:默认是19200,启动后,只要2秒内读不到' ',就禁止串口,设成9600,再打开串口。
有关于波特率自适应的源程序的 你拿过来看看就明白了
切换波特率,可以双方进行协商,这协商早有应用,像手机卡,支持几十种速度,但是最开始的速度都是9600.
然后双方可以协商,如不协商,就一直使用9600,协商成功,速度就提高,只要硬件支持,用什么速度都可以。
必须确保 最开始的波特率是一样的 否则会稍微麻烦一点 你得让下位机 或是上位机切换波特率 以获得握手信号
可以在单片机端,上电复位时设置波特率为9600,接收按键,如果是空格,就应答上位机并把波特率设置为19200.
上位机端则开始设置为9600,循环发送空格并检查应答,接收到应答就把波特率改为19200.
如果串口有数据过来,设置波特率为19200,看看是不是空格,如果是波特率就是19200
如果不是,则设置波特率为9600
这种程序我还是建议用串口中断来写,接收到数据就中断,但要注意你的串口命令是否需要包装
串行同步算法可以解决你的问题,你可以这样设计:
上位机软件:在未与下位机实现握手时一直发送同步码0x55或0xAA,同时接收下位机发送来的握手信号(同步码),当收到握手信号时上位机进入通讯状态。
下位机:
1)上电复位后先初始化好串口,将波特率设置成最高速率。
2)使能接收。
3)将接收到的数据与同步码进行比较。
4)如果不等时,屏闭接收,将波特率往小置,回到2)
5)如果相等,向上位机发送同步码。
6)进入到通讯状态。
注:最好进行多次确认,别一次成功接到同步码就完成同步。