超声波在89c52上的使用
来源:互联网 发布:php读取word文档内容 编辑:程序博客网 时间:2024/04/29 23:27
89c52上的超声波芯模块:
首先是红外线发射器(我猜的咳咳,以后再补充这里)
引脚连接P1.0口,每隔一段时间P1.0发射脉冲,发出红外线
之后P1.1口连接红外线接收器CX20106A,原理图
一共7个引脚
来自:http://www.360doc.com/content/15/0412/18/1437142_462691828.shtml
所以当芯片收到信号后产生一个下降沿,I/O口检测到下降沿就可以利用往返时间来计算距离了。
工作原理:
时序图:
用定时器0每隔一段时间P1.0口向外发射8个40k的光波(相互之间间隔10us),这些间隔时间不计,可看成一个稳定的波,之后打开计时器1开始计时,直到P1.1为0收到信号,结束计时,之后通过时间计算距离。
另外波纹有一个极限距离,并且也要有一个极限时间,超过这个时间(就是定时器1赋值的时间到最大值65536的时间段)就当做无限远不再计算了。通过TF1是否为1判断溢出,就是已超过最大值。
代码:
#include "reg52.h" #include "intrins.h"#include "absacc.h"#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();\ _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();}sbit TX = P1^0; sbit RX = P1^1; code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\ 0xff};unsigned char dspbuf[8] = {10,10,10,10,10,10,10,10}; unsigned char dspcom = 0;unsigned int intr = 0;bit s_flag;unsigned int t = 0;void send_wave(void);void display(void);void main(void){ unsigned int distance; TMOD |= 0x11; TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; TH1 = 0; TL1 = 0; EA = 1; ET0 = 1; //打开定时器0中断 TR0 = 1; // 启动定时器 while(1) { if(s_flag)//每隔200us更新一次数据 { s_flag = 0; send_wave(); //发送方波信号 TR1 = 1; //启动定时器1 while((RX == 1) && (TF1 == 0)); //收到信号或者发生溢出结束while
TR1 = 0; //关闭定时器1
if(TF1 == 1)//溢出 {TF1 = 0;distance = 9999; } else {t = TH1;t <<= 8;t |= TL1;distance = (unsigned int)(t*0.017); //通过时间计算距离 } TH1 = 0; TL1 = 0; } dspbuf[5] = distance/100;dspbuf[6] = distance%100/10;
dspbuf[7] = distance%10; }}void isr_timer_0(void) interrupt 1 { TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; //赋初值 display(); //2数码管显示 if(++intr == 200) { s_flag = 1; intr = 0; }} void display(void){ XBYTE[0xE000] = 0xff; XBYTE[0xC000] = (1<<dspcom); XBYTE[0xE000] = tab[dspbuf[dspcom]]; if(++dspcom == 8){ dspcom = 0;}}void send_wave(void){unsigned char i = 8; //发送8次do{TX = 1;somenop;TX = 0;somenop;}while(i--);}
阅读全文
0 0
- 超声波在89c52上的使用
- 89c52 EEPROM使用
- MPU6050开发 -- 在 C52 单片机上测试
- 基于US-100超声波在dragonboard 410c Linux上的超声波驱动编写
- 使用两个89C52制作双机通讯
- 初学89c52单片机的心得
- 超声波技术在包装工业的应用
- 51单片机之超声波模块的使用
- 使用超声波美容仪的全套方案
- 单片机89c51与89c52的区别
- 11 H5上实现超声波测距模块的设备驱动
- C51和C52的RAM
- 89C52 PWM输出程序
- 89C52 PWM输出程序
- 89C52单片机之数码管
- 89C52单片机之串口
- 超声波在大功率的时候会有响声
- US-100超声波 使用
- 类加载过程俗解
- 论文代发一般要注意哪些要求
- postgre SQL 字符串处理总结【后续更新】
- javascript 闭包,小测试
- java源码修炼(二) Stack源码分析
- 超声波在89c52上的使用
- ImageNet Evolution论文笔记(4)
- label 富文本编辑 多个关键字高亮 (一些特殊的字符有可能匹配不到 如:*)
- Tiny4412 Android 5.0 编译系统学习笔记
- Spark 编程指南(二)
- Java CMS GC 361s引发的血案
- hw
- 有序数组归并和有序单链表归并
- Effective C++ 19. type conversions