找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2345|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

為什么我用單片機(jī)串口發(fā)一個(gè)數(shù)組的內(nèi)容出去,順序是亂的?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:735654 發(fā)表于 2021-1-15 19:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. /*uart.c*/
  2. #define uc unsigned char
  3. #define ui unsigned int
  4. #define ul unsigned long
  5. #define iuc idata unsigned char
  6. #define iui idata unsigned int
  7. #define iul idata unsigned long
  8. #define bt bit
  9. #define swch switch
  10. #define cs case
  11. #define whl while
  12. #define rtn return
  13. #define brk break
  14. #define itrpt interrupt

  15. uart_init(bt xos)
  16. {
  17. if(xos==1)
  18.   {
  19.   P_SW2|=0x80; /*啟動(dòng)內(nèi)部擴(kuò)展區(qū)寄存器訪問(wèn)功能*/
  20.   XOSCCR|=0xc0; /*啟動(dòng)外部晶振*/
  21.   while(!(XOSCCR & 1)); /*待晶振頻率穩(wěn)定*/
  22.   CLKDIV=0x00; /*晶振不分頻*/
  23.   CKSEL=0x01; /*選用外部晶振*/
  24.   }
  25. SCON=0x50;   /*設(shè)定串口工作方式*/
  26. TMOD|=0x21;  /*設(shè)置T0T1寄存器*/
  27. AUXR=0xfc;  /*配置輔助寄存器*/
  28. TL1=TH1=0xdc; /*設(shè)置波特率為9.6kbit/s*/
  29. TR1=1;
  30. REN=1; /*允許接收串口數(shù)據(jù)*/
  31. EA=1;  /*打開(kāi)總中斷*/
  32. ES=1; /*打開(kāi)串口中斷*/
  33. P3M1=0x01; /*00000001*/
  34. P3M0=0x02; /*00000010,將串口接收口設(shè)為高阻輸入模式,發(fā)送口設(shè)置為強(qiáng)推挽模式*/
  35. }

  36. uart_txd(uc buf[])
  37. {
  38. iui i;
  39. iui j=sizeof(buf);
  40. TI=RI=0;
  41. for(i=0;i<j;i++)
  42.   {
  43.   SBUF=buf[i];
  44.   while(TI==0)
  45.     {
  46.     ;
  47.     }
  48.   TI=0;
  49.   }
  50. }

  51. /*—————————————兩個(gè)文件的分割線—————————————*/
  52. /*main.c*/

  53. #include <STC8x.H>
  54. #include <UART.H>

  55. iui txdbuf[13]={'H','E','L','L','O',' ','W','O','R','L','D','!','\0'};

  56. main()
  57. {
  58. uart_init(0);
  59. while(1)
  60.   {
  61.   uart_txd(txdbuf);
  62.   }
  63. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-1-15 21:02 | 只看該作者
分享給你這個(gè)貼子,STC單片機(jī)串口發(fā)送 不需要while死等。http://www.torrancerestoration.com/bbs/dpj-200927-1.html
使用STC15W4K核心板調(diào)試串口1,晶振30M,波特率9600。需要發(fā)送的時(shí)候,Uart1_Flag=1即可發(fā)送一包數(shù)據(jù)。這樣的代碼CPU效率更高。
回復(fù)

使用道具 舉報(bào)

板凳
ID:752974 發(fā)表于 2021-1-16 12:59 | 只看該作者
樓主說(shuō)的亂不是發(fā)送的數(shù)據(jù)亂還是接收到的數(shù)據(jù)亂。在通信中通信的兩方的通信參數(shù)必須設(shè)定一致,按著定好的協(xié)議收發(fā)數(shù)據(jù),不然就易出問(wèn)題。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:878235 發(fā)表于 2021-1-16 23:25 | 只看該作者
接收的時(shí)候,要想辦法判斷開(kāi)始,接收的過(guò)程有可能丟失數(shù)據(jù),所以要有校驗(yàn)碼

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:878235 發(fā)表于 2021-1-16 23:25 | 只看該作者
接收的時(shí)候,要知道從哪里開(kāi)始,到哪里結(jié)束,校驗(yàn)碼也是要有的,因?yàn)橛锌赡軄G失數(shù)據(jù)

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表