找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2856|回复: 5
收起左侧

怎么提取单片机串口SBUF接收的具体数据?

[复制链接]
ID:907024 发表于 2021-12-3 20:47 | 显示全部楼层 |阅读模式
我在发送一个16进制数到SBUF,SBUF接收后,请问我怎么读出SBUF的数据呢。
例如发送0x7f,二进制是0111 1111,我怎么把这些1都提取出来,经过计算让他显示10进制数?
回复

使用道具 举报

ID:57657 发表于 2021-12-3 22:02 | 显示全部楼层
10进制数,你要显示到什么地方?
回复

使用道具 举报

ID:907024 发表于 2021-12-3 22:54 | 显示全部楼层
npn 发表于 2021-12-3 22:02
10进制数,你要显示到什么地方?

数码管
回复

使用道具 举报

ID:956918 发表于 2021-12-3 23:48 | 显示全部楼层
直接在串口中断函数里头把SBUF读出来就行了,而且读回来是ascii码值,
回复

使用道具 举报

ID:624769 发表于 2021-12-4 00:09 | 显示全部楼层
你发送一个 16进制 到 SBUF 之后, 就立刻通过 Uart 发出来了呀。你得马上在线的另外一头接收,不然就没了,不是你想读就读,不想读就能不读的,不存在读的的问题。
回复

使用道具 举报

ID:1082282 发表于 2023-6-12 09:24 | 显示全部楼层
楼主看我的,那人回复的都是%
我这有代码:


  1. /*
  2. *pc端使用串口调试工具发送
  3. *usb转232串口小板连接51单片机
  4. */
  5. #include<reg51.h>
  6. #include<intrins.h>

  7. //--定义使用的IO--//
  8. #define GPIO_DIG P0
  9. //使用138译码器接八个数码管
  10. sbit LSA=P2^2;
  11. sbit LSB=P2^3;
  12. sbit LSC=P2^4;
  13. typedef unsigned int u16;
  14. typedef unsigned char u8;


  15. //--定义全局变量--//
  16. unsigned char code DIG_CODE[17]={
  17. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  18. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  19. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
  20. unsigned char DisplayData[8];
  21. //用来存放要显示的8位数的值

  22. //--声明全局函数--//
  23. void DigDisplay();         //动态显示函数           
  24. void UsartConfiguration();

  25. //将1个16进制数字转换为字符  
  26. //hex:16进制数字,0~15;  
  27. //返回值:字符  
  28. u8 chr2hex(u8 chr)  
  29. {  
  30.     if(chr>='0'&&chr<='9')  
  31.         return (chr-'0');  
  32.     if(chr>='A'&&chr<='F')  
  33.         return (chr-'A'+10);  
  34.     if(chr>='a'&&chr<='f')  
  35.         return (chr-'a'+10);   
  36.     return 0;  
  37. }  

  38. /*******************************************************************************
  39. * 函 数 名         : main
  40. * 函数功能                   : 主函数
  41. * 输    入         : 无
  42. * 输    出         : 无
  43. *******************************************************************************/

  44. void main()
  45. {
  46.         u8 receiveData;

  47.         UsartConfiguration();
  48.         while(1)
  49.         {
  50.                 if(RI == 1)                                //查看是否接收到数据
  51.                 {
  52.                         receiveData = SBUF;        //读取数据
  53.                         RI = 0;                                //清除标志位

  54.                                                                                                 SBUF=receiveData; //出去接收到的数据
  55.                                                                                                 while(!TI);                         //清楚接受中断标志位
  56.                         //--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//

  57.                                                                                                 receiveData = chr2hex(receiveData);
  58.                         DisplayData[0] = 0x00;
  59.                         DisplayData[1] = DIG_CODE[receiveData / 100];      // 百位
  60.                         DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位
  61.                         DisplayData[3] = DIG_CODE[receiveData % 10];           // 个位
  62.                         DisplayData[4] = 0x00;
  63.                         DisplayData[5] = 0x00; //DIG_CODE[receiveData / 100];      // 百位
  64.                         DisplayData[6] = 0x00; //DIG_CODE[receiveData % 100 / 10]; // 十位
  65.                         DisplayData[7] = 0x00; //DIG_CODE[receiveData % 10];
  66.                 }
  67.                 DigDisplay();
  68.         }
  69. }
  70. /*******************************************************************************
  71. * 函 数 名         :UsartConfiguration()
  72. * 函数功能                   :设置串口
  73. * 输    入         : 无
  74. * 输    出         : 无
  75. *******************************************************************************/

  76. void UsartConfiguration()
  77. {
  78.         SCON=0X50;                        //设置为工作方式1
  79.         TMOD=0X20;                        //设置计数器工作方式2
  80.         PCON=0X80;                        //波特率加倍
  81.         TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的
  82.         TL1=0XF3;
  83.         TR1=1;                                            //打开计数器
  84. }
  85. /*******************************************************************************
  86. * 函 数 名         : DigDisplay
  87. * 函数功能                   : 使用数码管显示
  88. * 输    入         : 无
  89. * 输    出         : 无
  90. *******************************************************************************/
  91. void DigDisplay()
  92. {
  93.         unsigned char i;
  94.         unsigned int j;
  95.         for(i=0;i<8;i++)
  96.         {
  97.                 switch(i)         //位选,选择点亮的数码管,
  98.                 {
  99.                         case(0):
  100.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  101.                         case(1):
  102.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  103.                         case(2):
  104.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  105.                         case(3):
  106.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  107.                         case(4):
  108.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  109.                         case(5):
  110.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  111.                         case(6):
  112.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  113.                         case(7):
  114.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位        
  115.                 }
  116.                 GPIO_DIG=DisplayData[i];//发送段码
  117.                 j=10;                                                 //扫描间隔时间设定
  118.                 while(j--);        
  119.                 GPIO_DIG=0x00;//消隐
  120.         }
  121. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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