欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2726|回復: 6
收起左側

關于如何解決單片機串口重復發送字符串的問題

[復制鏈接]
ID:1091909 發表于 2023-8-24 21:05 | 顯示全部樓層 |閱讀模式
單片機串口重復發送字符串,大佬回答說加while(1),可是我加了之后計算機收不到數據
回復

使用道具 舉報

ID:213173 發表于 2023-8-24 21:43 | 顯示全部樓層
設置發送的條件即可
回復

使用道具 舉報

ID:161164 發表于 2023-8-24 21:54 | 顯示全部樓層
貼完整代碼
回復

使用道具 舉報

ID:123289 發表于 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時)。

回復

使用道具 舉報

ID:123289 發表于 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即可,想重復幾次就寫幾次。
回復

使用道具 舉報

ID:1073939 發表于 2023-8-25 12:01 | 顯示全部樓層
看了你另一個相關帖子。
  1. void main()
  2. {
  3.         uart_init();
  4.         delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500); delay_ms(500);
  5.         uart1_send_string("yes,you can!\r\n");
  6.         delay_ms(500);
  7. while(1);
  8. }
復制代碼
回復

使用道具 舉報

ID:320306 發表于 2023-8-25 16:22 | 顯示全部樓層
發送需要延時處理一下比較好!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表