找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2332|回复: 4
打印 上一主题 下一主题
收起左侧

为什么我用单片机串口发一个数组的内容出去,顺序是乱的?

[复制链接]
跳转到指定楼层
楼主
ID:735654 发表于 2021-1-15 19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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; /*启动内部扩展区寄存器访问功能*/
  20.   XOSCCR|=0xc0; /*启动外部晶振*/
  21.   while(!(XOSCCR & 1)); /*待晶振频率稳定*/
  22.   CLKDIV=0x00; /*晶振不分频*/
  23.   CKSEL=0x01; /*选用外部晶振*/
  24.   }
  25. SCON=0x50;   /*设定串口工作方式*/
  26. TMOD|=0x21;  /*设置T0T1寄存器*/
  27. AUXR=0xfc;  /*配置辅助寄存器*/
  28. TL1=TH1=0xdc; /*设置波特率为9.6kbit/s*/
  29. TR1=1;
  30. REN=1; /*允许接收串口数据*/
  31. EA=1;  /*打开总中断*/
  32. ES=1; /*打开串口中断*/
  33. P3M1=0x01; /*00000001*/
  34. P3M0=0x02; /*00000010,将串口接收口设为高阻输入模式,发送口设置为强推挽模式*/
  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. /*—————————————两个文件的分割线—————————————*/
  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. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2021-1-15 21:02 | 只看该作者
分享给你这个贴子,STC单片机串口发送 不需要while死等。http://www.51hei.com/bbs/dpj-200927-1.html
使用STC15W4K核心板调试串口1,晶振30M,波特率9600。需要发送的时候,Uart1_Flag=1即可发送一包数据。这样的代码CPU效率更高。
回复

使用道具 举报

板凳
ID:752974 发表于 2021-1-16 12:59 | 只看该作者
楼主说的乱不是发送的数据乱还是接收到的数据乱。在通信中通信的两方的通信参数必须设定一致,按着定好的协议收发数据,不然就易出问题。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:878235 发表于 2021-1-16 23:25 | 只看该作者
接收的时候,要想办法判断开始,接收的过程有可能丢失数据,所以要有校验码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:878235 发表于 2021-1-16 23:25 | 只看该作者
接收的时候,要知道从哪里开始,到哪里结束,校验码也是要有的,因为有可能丢失数据

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表