发 帖  
原厂入驻New
[文章]

求高手帮助分析51测距程序

2011-9-13 11:12:43  1954
分享
0




  1. #include <reg52.h>

  2. #define uchar unsigned char //定义一下方便使用
  3. #define uint unsigned int
  4. #define ulong unsigned long

  5. uint distance_data;
  6. uchar outcomeH ,flag , outcomeL;

  7. sbit Trig= P1^0; //产生脉冲引脚
  8. sbit Echo = P3^2; //回波引脚
  9. sbit p0_0=P0^0; //灯
  10. sbit p0_1=P0^1;
  11. sbit p0_2=P0^2;
  12. sbit p0_3=P0^3;

  13. void DELAY()
  14. {
  15. uint i,j;
  16. for(i=0;i<=50;i++)
  17. {
  18. for(j=0;j<=1827;j++);

  19. }

  20. }
  21. //Delay(1)延时26us
  22. void Delay(uint a)
  23. {
  24. a++;
  25. a++;
  26. a++;
  27. a++;
  28. a++;
  29. a++;
  30. }


  31. void main(void) //主程序
  32. {


  33. P0=0xff;
  34. Trig =0;
  35. TMOD=0x11; //定时器0,16位工作方式定时
  36. IT0=1; //下降沿触发外部中断

  37. while(1) //程序循环
  38. {

  39. TH0=0;
  40. TL0=0; //定时器0初值
  41. TH1=0;
  42. TL1=0; //定时器1初值
  43. TF0=0; // 溢出标志位清0
  44. TF1=0;
  45. distance_data=0;
  46. outcomeH=0;
  47. outcomeL=0;
  48. TR1=1;
  49. EA=0; //关总中断;
  50. flag=0;
  51. //出发传感器
  52. Trig=1;
  53. Delay(1); //延时26us
  54. Trig=0;

  55. EX0=1; //打开外部中断0
  56. while(Echo==0); //等待Echo引脚变高电平执行以下语句
  57. p0_2=0;
  58. DELAY();
  59. p0_2=1;
  60. TR0=1;//定时器0开始计时
  61. EA=1; //开总中断

  62. while(TH1<0xDF) ; //等待中断测距,为DF00时为57088,57088×1us=57ms,测量周期设为60ms
  63. TR0=0;
  64. TR1=0;
  65. EX0=0; //关外部中断;

  66. if(flag==1)
  67. {

  68. if( distance_data<0x24C) //10cm为588us,1us加一次,加588次,即十六值24c
  69. {
  70. p0_1=0;
  71. DELAY();
  72. p0_1=1;

  73. }
  74. }
  75. if(flag==0)
  76. {
  77. p0_3=0;
  78. DELAY();
  79. p0_3=1;
  80. }

  81. }

  82. }

  83. //外中断0
  84. void INTO_() interrupt 0
  85. {
  86. EX0=0; //关外部中断0

  87. flag=1;
  88. TR0=0;
  89. outcomeH=TH0; //从定时器0取值
  90. outcomeL=TL0;
  91. distance_data=outcomeH; //测量结果的高8位
  92. distance_data<<=8; //放入16位的高8位
  93. distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
  94. p0_0=0;
  95. DELAY();
  96. p0_0=1;


  97. }


复制代码


测出distance_data值不对,求大家帮帮分析下程序
胡秋阳 2011-9-13 14:51:20
都不说下你是用什么测的,不知道的还以为51有新功能了。貌似是超声波?
回复

举报

柳兔宝 2011-9-13 22:17:51
使用超声波测距离了
回复

举报

好几个健康 2012-11-30 13:50:56
回复

举报

ordinaryboy 2013-8-13 22:22:39
用的测距hs-04模块吧?以前我在430上也用过这样的问题!你是不是只能测试1.3米左右而不是4。5米?是你的distance_data问题,改成ulong就好,因为uint数位不够溢出了,你可以仔细算算。当时我的程序也是这问题苦恼了好久好久,楼主要加油!!!
回复

举报

卢登攀 2013-12-8 11:26:42
回复

举报

康帅灵 2013-12-8 11:42:57
路过,看看,看看
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章
关闭

站长推荐 上一条 /8 下一条

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