找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机外部中断读取信号误差较大

[复制链接]
跳转到指定楼层
楼主
做一个板子采集霍尔传感器的信号高低电平时间,在传送给电脑串口通讯的时候出现了比较大的误差 ,出现了很多这种坏数。 这是写数据的函数, 这是发送数据的函数。
波特率设置的是19200,定时器中断时间是100uS .大家帮忙看一下有没有什么问题。还有哪些方面没有考虑到。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:735148 发表于 2020-7-23 09:29 | 只看该作者
  1. void WR_Buf (void)
  2. {
  3.         static uchar w_hang = 0;
  4.         EX0 = 0;
  5.         EX1 = 0;
  6.         if(W_S_Buf[w_hang][6] == 0xff ) // 地址位是 0xFF 意味着是第一次进入本行
  7.         {
  8.                 W_S_Buf[ w_hang ][ 0 ] = 1;
  9.                 W_S_Buf[ w_hang ][ 6 ] = 1;
  10.                 W_S_Buf[ w_hang ][ 1 ] = T0_buf;       
  11.                 T0_buf = 0;                                                        //定时器计时时间

  12.         }
  13. //        else if ( W_S_Buf[w_hang][6] == 5 )
  14. //        {
  15. //                return ;
  16. //        }
  17.         else //多次进入中断
  18.         {
  19.                 W_S_Buf[ w_hang ][ 6 ] = W_S_Buf[ w_hang ][ 6 ] + 1; //写入位数 +1
  20.                 W_S_Buf[ w_hang ][ W_S_Buf[ w_hang ][ 6 ] ] = T0_buf; //按照最新位数 写入最新数据
  21.                 T0_buf = 0;
  22.         }
  23.        
  24.         if( W_S_Buf[ w_hang ][ 6 ] == 5 ) //判断本行是否写满
  25.         {
  26.                 w_hang = w_hang + 1;
  27. //                T0_buf = 0;
  28.         }
  29.        
  30.         if( w_hang == 5 ) // 判断行数是否用完
  31.         {
  32.                 w_hang = 0;
  33.         }
  34.         EX1 = 1;
  35.         EX0 = 1;
  36. }
  37. /*****************************************
  38. 函数名                                        void SE_Buf ( void )
  39. 作用                                                将数组发送出去
  40. 输入                                                 无
  41. 输出                                                无
  42. ****************************************/
  43. void SE_Buf ( void)
  44. {
  45.        
  46.         static uchar s_hang = 0;
  47.         static uchar i = 0;
  48.        

  49.         if( W_S_Buf[ s_hang ][ 6 ] == 5 )
  50.         {
  51. //                EX0 = 0;
  52. //                EX1 = 0;
  53.                
  54.                 LED = ~LED;
  55.                 SBUF = 0xff;
  56.                 while ( !TI );
  57.                 TI = 0;
  58.                 for(; i < 7; i++ )
  59.                 {
  60.                         SBUF = W_S_Buf[ s_hang ][ i ];
  61.                         while( !TI );
  62.                         TI = 0;
  63. //                        W_S_Buf[ s_hang ][ 6 ] = W_S_Buf[ s_hang ][ i ] + W_S_Buf[ s_hang ][ 6 ];
  64.                         W_S_Buf[ s_hang ][ i ] = 0xff;
  65.                 }
  66.                 i = 0;
  67.                 s_hang = s_hang + 1;
  68.         }
  69.         if ( s_hang == 5 )
  70.         {
  71.                 s_hang = 0;
  72.         }
  73.        
  74. //        EX0 = 0;
  75. //        EX1 = 0;
  76. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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