找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2319|回复: 3
收起左侧

往上位机发送51单片机串口数据(压力传感器)求帮助

[复制链接]
ID:690019 发表于 2020-2-4 18:17 | 显示全部楼层 |阅读模式
用keil打开,编译,烧录到51单片机中即可。用串口助手读取数据。

单片机源程序如下:
  1. ///**********************************************
  2. //*  平台:BST-V51 + Keil U3 + STC89C52
  3. //*  名称:往串口发送一字节数据(可通过超级终端或者串口调试助手显示出来,
  4. //                  超级终端波特率选为9600)。
  5. //                  超级终端设置好后,每按下一次S2键,松开后均会在超级终端
  6. //                  上显示一串字母"abcdefg哈哈"。   
  7. //*  日期:2012-8-14
  8. //*  晶振:11.0592MHZ
  9. //*  说明:免费开源,不提供源代码分析.
  10. //
  11. //******************************************************************/
  12. #include <stdio.h>  
  13. #include <reg52.h>
  14. #include <intrins.h>

  15. //IO设置
  16. sbit HX711_DOUT=P3^4;
  17. sbit HX711_SCK=P3^5;

  18. //HX711缓存区初始值设为0.
  19. unsigned long HX711_Buffer = 0;

  20. //毛皮和实物初始化,都为0.
  21. unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;

  22.   
  23. void InitUART(void)//使用定时器1作为串口波特率发生器  
  24. {  
  25.     TH1 = 0xFD;  //晶振11.0592mhz 波特率设为9600  
  26.     TL1 = TH1;  
  27.     TMOD |= 0x20;    //定时器1方式2  
  28.     SCON = 0x50;     //串口接收使能  
  29.     ES = 1;          //串口中断使能  
  30.     TR1 = 1;         //定时器1使能  
  31.     TI = 1;          //发送中断标记位,必须设置  
  32. }  

  33. //毫秒延时函数  
  34. void delay_ms(unsigned int t)  
  35. {  
  36.     unsigned char a,b;  
  37.     while(t--)  
  38.     {  
  39.       for(b=102;b>0;b--)  
  40.       for(a=3;a>0;a--);  
  41.     }  
  42. }

  43. //****************************************************
  44. //延时函数
  45. //****************************************************
  46. void Delay__hx711_us(void)
  47. {
  48. //_nop_()一般包含在#include "intrins.h",,,一个_nop_();函数延时一个机器周期的时间
  49.     _nop_();
  50.     _nop_();
  51. }

  52. //****************************************************
  53. //读取HX711
  54. //****************************************************
  55. unsigned long HX711_Read(void)    //增益128
  56. {
  57.     unsigned long count;
  58.     unsigned char i;
  59.       HX711_DOUT=1;
  60.     Delay__hx711_us();
  61.       HX711_SCK=0;
  62.       count=0;
  63.       while(HX711_DOUT);
  64.       for(i=0;i<24;i++)
  65.     {
  66.           HX711_SCK=1;
  67.           count=count<<1;
  68.         HX711_SCK=0;
  69.           if(HX711_DOUT)
  70.             count++;
  71.     }
  72.      HX711_SCK=1;
  73.     Delay__hx711_us();
  74.     HX711_SCK=0;  
  75.     return(count);
  76. }
  77. //****************************************************
  78. //称重
  79. //****************************************************
  80. void Get_Weight()
  81. {
  82.     HX711_Buffer = HX711_Read();
  83.     HX711_Buffer = HX711_Buffer/100;
  84.     if(HX711_Buffer > Weight_Maopi)            
  85.     {
  86.         Weight_Shiwu = HX711_Buffer;
  87.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取实物的AD采样数值。
  88.    
  89.         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/2.09+0.05);     //计算实物的实际重量
  90.                                                                         //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的2.15这个除数。
  91.                                                                         //当发现测试出来的重量偏大时,增加该数值。
  92.                                                                         //如果测试出来的重量偏小时,减小改数值。
  93.                                                                         //该数值一般在2.15附近调整之间。因传感器不同而定。
  94.                                                                         //+0.05是为了四舍五入百分位        
  95.             Weight_Shiwu=Weight_Shiwu/2;   
  96.    
  97.     }
  98. }

  99. //****************************************************
  100. //获取毛皮重量
  101. //****************************************************
  102. void Get_Maopi()
  103. {
  104.     unsigned char i = 0;
  105.     unsigned int Temp_Weight = 0;

  106.     Weight_Maopi = 0;

  107.     for( i = 0 ; i < 10 ; i++)
  108.     {


  109.         if( Temp_Weight > Weight_Maopi)
  110.         {
  111.             Weight_Maopi = Temp_Weight;     
  112.         }
  113.     }        
  114. }  
  115.   
  116. void main()  
  117. {         
  118.     Get_Maopi();                //称毛皮重量
  119.     InitUART(); //初始化串口  
  120.     EA = 1;     //开总中断  
  121.         while(1)
  122.     {
  123.         Get_Weight();            //称重
  124.                 printf("%d\n",Weight_Shiwu);//串口打印结果

  125.     }
  126. }
复制代码

目前程序还有问题,求大佬指点:
读取.zip (1.83 KB, 下载次数: 15)


回复

使用道具 举报

ID:704752 发表于 2020-3-27 01:15 | 显示全部楼层
请问超级终端是什么东西
回复

使用道具 举报

ID:704752 发表于 2020-3-27 01:17 | 显示全部楼层
还有你要发送的数据一串字母"abcdefg哈哈"不用在什么程序中体现吗,我是小白不太懂,大神可以解释下吗
回复

使用道具 举报

ID:603160 发表于 2020-8-18 13:46 | 显示全部楼层
浪费黑币,有问题的东西,大家别下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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