标题:
关于如何解决单片机串口重复发送字符串的问题
[打印本页]
作者:
Yoona_Ssl
时间:
2023-8-24 21:05
标题:
关于如何解决单片机串口重复发送字符串的问题
单片机串口重复发送字符串,大佬回答说加while(1),可是我加了之后计算机收不到数据
作者:
wulin
时间:
2023-8-24 21:43
设置发送的条件即可
作者:
lkc8210
时间:
2023-8-24 21:54
贴完整代码
作者:
yzwzfyz
时间:
2023-8-25 08:24
我的方案及实用:没有等待,几乎不占(几条机器指令)其它低级中断时间。
1、建立一个缓冲区SS,专放需要发送的字节。
2、建立两个指针:其一,PCS1指向需要发送但还未发送的字节,也即向SS写一个,PCS1就+1个。
其二,PCS2指向正在发送的字节,也即发一个,PCS2就+1个。
3、规则1:起始让PCS1=PCS2,表示没有发送字节,或所有字节已发完。
4、发送中断(TI)服务程序,检查,当PCS1<>PCS2,就发送PCS2指向的字节,并将PCS2+1,退出中断。这样中断一次发一个字节,发完就走,用时极短,没有等待(从不等待TI),几乎不占时间。
5、所有需要发送的字节,依序写入SS即可:写入PCS1指向和地址,写完后PCS+1。
如此写入SS并不管它是否被发送,除非它是第一个字节(PCS1=PCS2时)。
作者:
yzwzfyz
时间:
2023-8-25 08:46
6、将SS做成循环地址,如256个,64个,32个,这样方便循环(只要限制PCS1、2的高位=0即可达成循环)
另:高级防止意外部分(如,意外无TI中断,发送未通连续):
如果间隔△t(如20ms)无发送,复位PCS1=PCS1=0(丢弃意外)。这需要做发送计时标记,定时器……,不在此细述了。
总结:
1、新手发送10个字节,会发1个等1个(等TI=1),再发下1个,直到发完10个字节。
假设发送一个字节需要2ms,则发送10字节就用了20ms,而真正地执行10个字节的发送,只需不到10us(CPU执行10个BSUF=A指令,及其它辅助指令),这里20ms几乎白白地等待浪费了。
2、当你调用【发送函数】时,谁能知道【发送函数】是如何发送的呢?它有没有象1、一样呢?
这是你不能控制的,因为程序是别人的。
楼主要重复发送:
只要将需要重复的字节写入SS即可,想重复几次就写几次。
作者:
ydatou
时间:
2023-8-25 12:01
看了你另一个相关帖子。
void main()
{
uart_init();
delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500);
uart1_send_string("yes,you can!\r\n");
delay_ms(500);
while(1);
}
复制代码
作者:
zsyzdx
时间:
2023-8-25 16:22
发送需要延时处理一下比较好!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1