单片机超声波探伤工程量计算计算为啥是t*0.0184

【图片】来看看我这个有点问题的超声波测距实验【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:139,701贴子:
来看看我这个有点问题的超声波测距实验收藏
突然想起来了带上单片机去旅游,在车上、旅店一字一句码好了这个程序,发现
为用户提供各种低成本,低功耗,低能耗,功能强的微控制器解决方案.恩智浦微控制器,高性能,设计新颖,性能稳定,价格超低,欲购从速,欢迎垂询!
解决了层层套路
首先东西太多,只拿了两个买的最小系统,黑心卖家没给我这个线
于是我用了一个黑心卖家给的不能下载的下载模块供电
没有焊接工具,都懂
经过几天钓鱼、游泳、吃饭的空隙时间断断续续的调整程序,终于可以比较正常地用了
可是无论怎么调都只能测4米左右,多了就直接变成30多,两米以内还是比较准的,可以达到厘米
走前匆匆记了声速及模块用法就,具体都是想当然写的,不知道是不是算法问题,别的程序没看过
楼主用充电宝供电?不会供一会儿就断电
直接上点图你们看看
广弘达电子是台湾义隆电子正式授权代理商,负责义隆单片机的推广和销售!台湾总部:弘硕电子科技股份有限公司,保证品质,货真价实,诚信双赢!
#include &reg52.h&#define uchar unsigned char#define uint unsigned intsbit SHOU = P3^2;sbit FA
= P3^3;//超声波模块sbit RW
= P3^6;sbit RS
= P3^5;sbit E
= P3^4;//1602液晶模块uint SJ;//直接的距离uchar x,a,H,F,C,D;//莫名其妙“A,B”冲突,换HFvoid yan(uchar v)//延时{uchar m,n;for (m=v;m&0;m--)for (n=10;n&0;n--);}void yan2(uchar g){for(o=0;o&g;o++);} xie (bit ms,uchar sj)//写数据(ms=0写命令ms=1写数据){P0 =RS =E
= 0;yan(10);E
= 1;yan(10);E
= 0;}init1602()//1602初始化{RW = 0;E
= 0; xie(0,0x38);yan(20);xie(0,0x0c);yan(20);xie(0,0x06);yan(20);xie(0,0x01);yan(20);}init51(){TMOD = 0x02;TH0
= 0XC9;TL0
= 0XC9;//11.0592,27个周期声波走一厘米,初值256-54ET0
= 1; }void jishi() interrupt 1 //溢出一次一厘米{SJ=SJ++;} main (){SJ = 0;init51();init1602();while(1){FA = 1;yan2(15);
FA = 0;while(SHOU==0);//高电平时间=声波发收时间,一有高电平就计时TR0 = 1;EA = 1; while(SHOU==1);//高电平结束EA = 0;TR0= 0;TL0= 0;H =SJ/1000;//偷懒直接分出各位单独处理SJ=SJ%1000;F =SJ/100; SJ=SJ%100; C =SJ/10;SJ=SJ%10;
D =SJ;SJ=0;
for(a=0;a&6;a++)//依次显6个字符{xie(0,0x85+a);// 写命令第a个地址yan(20);switch(a)//就不想算法了,直接条件分支
case 0:xie(1,'0'+H);
case 1:xie(1,'0'+F);
case 2:xie(1,'.');
case 3:xie(1,'0'+C);
case 4:xie(1,'0'+D);
case 5:xie(1,'m');
}yan(20);}for(x=0;x&40;x++){yan(255);}//延时显一会儿xie(0,0x01);//清屏准备再测}}
超声波模块可以通过计数器计算距离,会更简单易懂
超声波模块上限才三四米吧
为啥我的不显示测出来的距离啊试了3个超声波都不行
这很不错了,这个模块发射距离没那么远的
#include&reg52.h& #include &intrins.h&#define uint unsigned int#define uchar unsigned charsbit rs=P2^0; //1602的数据/指令选择控制线sbit rw=P2^1; //1602的读写控制线sbit en=P2^2; //1602的使能控制线sbit trig=P2^5; //超声波测距模块Trigsbit echo=P3^2; //超声波测距模块Echobit flag1; //触发信号标志位// //中断累加变量 //测量所得距离unsigned char code table[ ]={&&}; //定义字符数组显示数字void delay(uint n) { uint x,y;
for(x=n;x&0;x--) for(y=110;y&0;y--);}void delayt(uint x){ while(x-- & 0) { for(j = 0;j & 125;j++) { ; } }}void lcd_wcom(uchar com) { rs=0; //选择指令寄存器 rw=0; //选择写 P0= //把命令字送入P0 delay(5); //延时一小会儿,让1602准备接收数据 en=1; //使能线电平变化,命令送入1602的8位数据口,这点非常重要 en=0; }void lcd_wdat(uchar dat) { rs=1; //选择数据寄存器 rw=0; //选择写 P0= //把要显示的数据送入P0 delay(5); //延时一小会儿,让1602准备接收数据,也就是检测忙信号,这点非常重要。 en=1; //使能线电平变化,数据送入1602的8位数据口 en=0; }void lcd_init() { lcd_wcom(0x38); //8位数据,双列,5*7字形 ,用到功能设定指令
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁,用到显示开关控制指令 lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位,用到了写入模式设置指令 lcd_wcom(0x01); //清屏,用到了清屏指令} void lcd_xianshi() { lcd_wcom(0x80+0x40); lcd_wdat('D'); lcd_wdat('i'); lcd_wdat('s'); lcd_wdat('t'); lcd_wdat('a'); lcd_wdat('n'); lcd_wdat('c'); lcd_wdat('e'); lcd_wdat(':'); lcd_wcom(0x80+0x4c); lcd_wdat('.'); lcd_wcom(0x80+0x4e);//单位是厘米// lcd_wdat('c'); lcd_wdat('m');}void init_t0(){ TMOD=0x01;
TL0=0x66; TH0=0 //1ms ET0=1;
EA=1; }void trigger(){ trig=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=1; }void init_measuring(){ trig=1; echo=1; count=0;}void measuring(){ uint h,y; TR0 = 1; while(echo==1) { ; }
TR0 = 0; l = TL0; h = TH0; y = (h && 8) + y = y - 0xfc66;//us部分 distance = y + 1000 *//计算总时间,单位是微秒 TL0 = 0x66; TH0 = 0 delayt(30); distance = 3453* distance / 20000;//原始为:(0.34毫米/us)*时间/2// }void display(uint x){ uchar qian,bai,shi, qian=x/1000; bai=(x/100); shi=(x/10); ge=x; lcd_wcom(0x80+0x49);//单位是厘米// lcd_wdat(table[qian]); lcd_wdat(table[bai]); lcd_wdat(table[shi]); lcd_wcom(0x80+0x4d); lcd_wdat(table[ge]);}void main() { lcd_init(); //液晶初始化
init_t0(); //定时器0初始化
init_measuring(); //超声波相应端口初始化 while(1) { lcd_xianshi(); //液晶显示特定字符 trigger(); //触发超声波启动 while(echo==0) //等待回声 { ; } measuring(); //进行距离测量 display(distance); //对测量结果进行显示 init_measuring(); //超声波相应端口初始化 delayt(600); //每次测量间隔60ms }}//……………………………………………中断服务函数…………………………………………………//void T_0()interrupt 1{ TF0 = 0; TL0 = 0x66; TH0 = 0 count++; if(count==18) { TR0 =0; TL0 = 0x66; TH0 = 0 count = 0; }}
个人认为:这不是程序问题,是你的那个超声波测距仪器精度只能测量4米左右的距离。
不能指望这种超声波模块能精密测距,绝大多数情况下都只是用来做避障。
弱电交流学习群QQ
师兄,请问你是自动化的吗
这么简陋,真是难为你了
看到这个,让我想起了,大学时光
超声波模块有效距离太短了 做着当玩具玩玩
登录百度帐号推荐应用单片机超声波传感器测量距离 - 51单片机 - 电子工程世界网
单片机超声波传感器测量距离
09:25:26来源: eefocus
一、设计要求
设计一个器,可以应用于倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
二、设计思路
及其测距原理
超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(timeofflight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离
的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为331.45米/秒,由负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以达到毫米级。
由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。
超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。
根据设计要求并综合各方面因素,可以采用单片机作为主控制器,用动态扫描法实现数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统如下图所示:
超声波测距器系统设计框图
三、系统组成
主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。采用来实现对红外接收芯片和系列超声波转换模块的控制。单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序等部分。
四、系统硬件
1.单片机系统及显示电路
单片机采用89S51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用驱动,位码用PNP驱动。单片机系统及显示电路如下图所示
&&&&&&&&&&&&&&&&&&&&&&&&& 单片机及显示图
2.超声波发射电路原理图参考期刊如图所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 超声波发射电路原理图
压电超声波转换器的功能:利用压电晶体谐振工作。内部结构上图所示,它有两个压电晶片和一个共振板。当它的两极外加,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器。超声波发射转换器与接受转换器其结构稍有不同。
3.超声波检测接受电路
参考红外转化接收期刊的电路采用集成电路,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHz与测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。实验证明其具有很高的灵敏度和较强的抗干扰能力。适当改变C4的大小,可改变接受电路的灵敏度和抗干扰能力。
超声波接收电路图
五、系统程序设计
超声波测距软件设计主要由主程序,超声波发射子程序,超声波接受中断程序及显示子程序组成。下面对超声波测距器的算法,主程序,超声波发射子程序和超声波接受中断程序逐一介绍。
1.超声波测距器的算法设计
下图示意了超声波测距的原理,即超声波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器R所接受。这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器与反射物体的距离。
距离计算公式:d=s/2=(c*t)/2
*d为被测物与测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间
声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返时间,即可求得距离。在系统加入温度传感器来监测环境温度,可进行温度被偿。这里可以用测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。为了增强系统的可靠性,应在软硬件上采用抗干扰措施。
不同温度下的超声波声速表
声速c(m/s)
主程序首先对系统环境初始化,设置定时器T0工作模式为16位的模式,置位总中断允许位EA并给显示端口P0和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用12MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,设计时取20℃时的声速为344m/s则有:
d=(C*T0)/2=172T0/10000cm(其中T0为计数器T0的计数值)
测出距离后结果将以十进制BCD码方式LED,然后再发超声波脉冲重复测量过程。主程序框图如下
3.超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过P1.0端口发送2个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。
六.软硬件调试及性能
超声波测距仪的制作和调试,其中超声波发射和接收采用&P15的超声波换能器F1(T发射)和S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4~8cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的和抗干扰能力。
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.07~5.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。
后续工作需实验后才能验证
根据参考电路和集成的电路器件测距范围有限10m以内为好。
以下是用汇编语言编写的超声波测距控制源程序:
采用AT89S51& 12MHz晶振
显示缓冲单元在40H~43H,使用内存44H、45H、46H用于计算距离
20H用于标志
VOUT&& EQU&&& P1.0&& ;脉冲输出端口
*中断入口程序*
ORG& 0000H
&&&&& LJMP& START
ORG& 0003H
&&&&& LJMP& PINT0
ORG& 000BH
&&&&& LJMP& INTT0
ORG& 0013H
&&&&& RETI
ORG& 001BH
&&&& &LJMP& INTT1
ORG& 0023H
ORG& 002BH
&&&&& RETI
START: MOV& SP, #4FH
&&&&&& MOV& R0, #40H&& ;40~43H为显示数据存放单元(40为最高位)
&&&&&& MOV& R7,#0BH
CLEARDISP:MOV& @R0, #00H
&&&&&&&&&&& INC&& R0
&&&&&&&&&&& DJNZ& R7, CLEARDISP
&&&&&&&&&&& MOV& 20H, #00H
& &&&&&&&&&&MOV& TMOD, #21H&&& ;T1为8位自动重装模式,T0为16位定时器
&&&&&&&&&&& MOV& TH0, #00H&&&&& ;65ms初值
&&&&&&&&&&& MOV& TL0, #00H&&&&& ;40KHz初值&&&&&&
&&&&&&&&&&& MOV& TH1, #0F2H
&&&&&&&&&&& MOV& TL1, #0F2H
&&&&&&&&&&& MOV& P0, #0FFH
MOV& P1, #0FFH
&&&&&&&&&&& MOV& P2, #0FFH
&&&&&&&&&&& MOV& P3, #0FFH
MOV& R4, #04H&&&&&&& ;超声波脉冲个数控制(为赋值的一半)
SETB& TR0&&&& &&&&&&&&&&& ;开启测距定时器
START1: &&&LCALL& DISPLAY
&&&&&&& &&&&JNB&&&& 00H, START1&&&&&& ;收到反射信号时标志位为1
&&&&&&&&&&& CLR& EA
&&&&&&&&&& &LCALL& WORK&&&&&&&&& ;计算距离子程序
&&&&&&&&&&& SETB&&& EA
&&&&&&&&&&& CLR&&&& 00H
&&&&&&&&&&& SETB&&& TR0&&&&&&&&&&&& ;重新开启测距定时器
&&&&&&&&&&& MOV&&& R2, #64H&&&&&&&& ; 测量间隔控制(约4*100=400ms)
LOOP:&&&&& LCALL& DISPLAY
&&&&&&&&&&& DJNZ&& R2, LOOP
&&&&&&&&&&& SJMP&& START 1
*中断程序*
;T0中断,65ms中断一次
INTT0:&&&&& CLR&&& EA
&&&&&&&&&&& CLR&&& TR0
&&&&&&&&&&& MOV&& TH0, #00H
&&&&&&&&&&& MOV&& TL0, #00H
&&&&&&&&&&& SETB&& ET1
&&&&&&&&&&& SETB&& EA
&&&&&&&&&&& SETB&& TR0&&&&&&&&&&&&&&& ;启动计时器T0,用以计算超声波来回时间
&&&&&&&&&&& SETB &&TR1&&&&&&&&&&&&&&& ;开启发超声波用定时器T1
OUT:&&&&&&& RETI
;T1中断,发超声波用
INTT1:&&&&& CPL&&& VOUT
&&&&&&&&&&& DJNZ&& R4,RETIOUT
&&&&&&&&&&& CLR&&& TR1&&&&&&&&&&&&&& ;超声波发送完毕,关T1
&&&&&&&&&&& CLR&&& ET1
&&&&&&&&&&& MOV&& R4,#04H
&&&&&&&&&&& SETB&& EX0&&&&&&&&&&&&&& ;开启接收回波中断
RETIOUT:&& RETI
;外中断0,收到回波时进入
PINT0:&&&&&& CLR&& TR0&&&&&&&&&&&&&&& ;关计数器
&&&&&&&&&&&& CLR&& TR1
&&&&&&&&&&&& CLR&& ET1
&&&&&&&&&&&& CLR&& EA
&&&&&&&&&&&& CLR&& EX0
&&&&&&&&&&&& MOV& 44H, TL0&&&&&&&&&&& ;将计数值移入处理单元
&&&&&&&&&&&& MOV& 45H, TH0
&& &&&&&&&&&&SETB& 00H&&&&&&&&&&&&&&&& ;接收成功标志
&&&&&&&&&&&& RETI
*延时程序*
DL1MS:&&&&& MOV& R6, #14H
DL1:&&&&&&&& MOV& R7, #19H
DL2:&&&&&&&& DJNZ& R6, DL2
&&&&&&&&&&&& DJNZ& R6, DL1
&&&&&&&&&&&& RET
*显示程序*
;40H为最高位,43H为最低位,先扫描高位
DISPLAY:&&&&&&& MOV&&&& R1, #40H;G
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& R5,#0F7H;G
&&&&&& PLAY:&&&&&&&&&& MOV&&&& A, R5
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& P0, #0FFH&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& P2, A
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& A, @R1
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& DPTR, #TAB
MOVC& A, @A+DPTR
MOV&&&& P0, A
LCALL DLIMS
INC&&&&&&&&&&&&& R1
MOV&&&& A, R5
JNB&&&&&& ACC.0, ENDOUT;G
RR&&&&&&&& A
MOV&&&& R5, A
AJMP&&& PLAY
ENDOUT;&&&&&&&&&& MOV&&&& P2, #0FFH
&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&&& P0, #0FFH
&&&&&&&&&&&&&&&&&&&&&&&&&&& RET
TAB; DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
;共阳数码管& 0 ,1, 2,3,4,5,6,7,8,9,不亮,A, &
*距离计算程序(=计算值&17/1000cm)& 近似
WORK:&&&&&&&&&&&&&& PUSH&&& ACC
&&&&&&&&&&&&&&&&&&&&&&&&&&&& PUSH&&& PSW
&&&&&&&&&&&&& PUSH&&& B
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& PSW, #18H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R3, 45H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R2, 44H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R1, #00D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R0, #17D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& LCALL MUL2BY2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R3, #03H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R2, #0E8H
& &&&&&&&&&&&&&&&&&&&&&&&& LCALL DIV4BY2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& LCALL DIV4BY2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 40H, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, 40H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JNZ&&&&&& JJ0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 40H, #0AH&&&&&&&&&& ;最高位为0,不点亮
JJ0:&&&&&&&&&&&&&&&&&&&&&& MOV&&& A&&& R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A&&& R1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5 A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV & R3, #00D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R2, #100D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& LCALL DIV4BY2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 41H, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, 41H
&&&&&&&&&&&&&&&&&&&&&&&&&&& JNZ&&&&&& JJ1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, 40H&&&&&&&& ;此高位为0,先看最高位是否为不亮
&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBB&&& A, #0AH
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JNZ&&&&&& JJ1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 41H, #0AH&&&&& ; 最高位不亮,次高位也不亮
JJ1:&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R3, #00D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R2, #10D
&&&&&&&&&&&&&&&&&&&&&&&&&&&& LCALL DIV4BY2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 42H, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A&&& 42H&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JNZ&&&&&& JJ2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, 41H&&&&&&&& ;次高位为0,先看次高位是否为不亮
&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBB&&& A, #0AH
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JNZ&&&&&& JJ2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 42H, #0AH&&&& ;次高位不亮,次高位也不亮
JJ2:&&&&&&&&&&&&&&&&&&&&&& MOV&&& 43H, R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& POP&&&&& B
&&&&&&&&&&&&&&&&&&&&&&&&&&&& POP&&&&& PSW
&&&&&&&&&&&&&&&&&&&&&&&&&&&& POP&&&&& ACC
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RET&
*两字节无符号数乘法程序
MUL2BY2:&&&&&&&&& CLR&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R7, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R6, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV& R5, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& 46H, #10H
MULLOOP1:&&&&&& CLR&&&&& C
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A,&& R5
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R6
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R6, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R7
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV& R7, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV& A, R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R0, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R1, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JNC&&&&& MULLOOP2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADD&&&& A, R2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R5
&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADDC&& A, R3
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R6
&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADDC&& A, #00H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R6, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R7
&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADDC&& A, #00H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R7, A
MULLOOP2:&&&&&& DJNZ&&& 46H, MULLOOP1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RET
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*四字节/两字节无符号数除法程序*
DIV4BY2:&&&&&&&&&&& MOV&&& 46H, #20H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R0,& #00H
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R1, #00H
DIVLOOP1:& &&&& MOV&&& A, R4
&&&&&&&& &&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R5
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R6
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R6, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R7
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R7, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R0, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R1, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& CLR&&&&& C
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R0
&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBB&&& A, R2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& B, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV& A, R1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& SUBB&&& A, R3
&&&&&&&&&&&&&&&&&&&&&&&&&&&& JC&&&&&&&& DIVLOOP2
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R0, B
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R1, A
&&&&&&&&&&&&&&&&&&&&&&&&&&
DIVLOOP2:&&&&&&&& CPL&&&&& C
&&&&&&&&&&&&&&&&&&&&&&&&&&&& DJNZ&&& 46H, DIVLOOP1
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R4
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R4,& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A,&& R5
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R5,& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R6
&&&&&&&&&&&& && RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R6, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& A, R7
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RLC&&&&& A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& MOV&&& R7, A
&&&&&&&&&&&&&&&&&&&&&&&&&&&& RET
&&&&&&&&&&&&&&&&&&&&&&&&&&&& END
&&&&&&&&&& 附C51程序
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
extern void cs_t(void);
extern void delay(uint);
extern void display(uchar*);
//data uchar display(uchar*);
void main (void)
data uchar dispram[5];
TMOD=0x11;
&delay(1);
while(! testok) display(dispram);
if (1==testok)
&& time=TH0;
&& time=(time<<8)| TL0;
&& time*=172;&
&& time/=10000;
&& dispram[0]=(uchar) (time%10);
&& time/=10;
&& dispram[1]=(uchar) (time%10);
&& time/=10;
&& dispram[2]=(uchar) (time%10);
&& dispram[3]=(uchar) (time/10);
&& if (0==dispram[3]) dispram[3]=17;
&& dispram [0]=16;
&& dispram [1]=16;
&& dispram [2]=16;
&& dispram [3]=16;
&for (i=0;i<300;i++) display(dispram);
void cs_r(void)
&testok=1;
void overtime(void) interrupt 1
&testok=2;
&&&&&&&&&&&&&&&&&&&& NAME&&&&& CS_T
?PR?CS_T?CS_T&& &&&& SEGMENT&& CODE
&&&&&&&&&&&&&&&&&&&& PUBLIC&& CS_T&&
&&&&&&&&&&&&& &&& &&&&RSEG&&&& ?PR?CS_T?CS_T
CS_T:&&&&&&&&&&&&&&& PUSH&&&&& ACC
&&&&&&&&&&&&&&&&&&&& MOV&&&&&& TH0, #00H
&&&&&& &&&&&&&&&&&&&&MOV&&&&&& TL0, #00H
&&&&&&&&&&&&&&&&&&&& MOV&&&&&& A, #4D
&&&&&&&&&&&&&&&&&&&& SETB&&&&& &TR0
CS_T1:&&&&&&&&&&&&&& CPL&& &&&&&p1.0
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&& && &&&&&&&&&&NOP
&&&&&&&&&&&&& && &&&&&&&&&&NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& NOP
&&&&&&&&&&&&&&&&&&&& DJNZ&&&&&& ACC,CS_T1
&&&&&&&&&&&&&&&&&&&& POP&&&&&&& ACC
&&&&&&&&&&&&&&&&&&&& RET
&&&&&&&&&&&&&&&&&&&& END&
&name&& delay
?pr?_delay?delay&& segment&& code
public&& _delay
&rseg&&& ?pr?_delay?delay
_delay:&&& push&& acc
&&&&&&&&&& mov a,r7
&&&&&&&&&& jz&& dela1
&&&&&&&&&& inc&& r6
dela1:&& mov&& r5,#50d
&&&&&&&& djnz&& r5, $
&&&&&&&& djnz&& r7,dela1
&&&&&& &&djnz&&& r6,dela1
&&&&&&&&&&& pop&& acc
&&&&&&&&&& ret
&&& NAME& DISPLAY
?PR?_DISPLAY?display&& segment& code
?co?_DISPLAY?display&&& segment& data
&&&&&&&&&&&&&&&&&&&&&&& EXTRN&&& CODE&&& (_DELAY)
&&&&&&&&&&&&&&&&&&&&&&& PUBLIC&&& _DISPLAY
&&&&&&&&& &&&&&&&&&&&&&&RSEG&&& ?CO?_DISPLAY?DISPLAY
?_display?byte:
dispbit:&& ds& 1
dispnum:&& ds& 1
&&&&&&&&&& rseg&&& ?pr?_display?display
_display:& push acc
&&&&&&&&&& push& dph
&&&&&&&&&& push& dpl
&&&&&&&&& push& psw
&&&&&&&&&& inc&& dispnum
&&&&&&&&&&& mov a,dispnum
&&&&&&&&&& cjne& a,#4d,disp1
DISP1:&&& JC& DISP2
&&&&&&&&&& MOV& DISPNUM,#00H
&&&&&&&&&& MOV& DISPBIT,#0FEH
DISP2:&&&& MOV& A,R1
&&&&&&&&&& ADD&& A,DISPNUM
&&&&&&&&&& MOV& R0,A
&&&&&&&&&& MOV& A,@R0
&&&&&&&&&& MOV& DPTR,#DISPTABLE
&&&&&&&&&& MOVC&& A,@A+DPTR
&&&&&&&&&& MOV P0,A
&&&&&&&&&& MOV A,DISPNUM
&&&&&&&&&& CJNE& A,#2D,DISP3
&&&&&&&&&& CLR&& P0.7
DISP3:&&&&&& MOV P2,DISPBIT
&&&&&&&&&&&& MOV R5,#00H
&&&&&&&&&&&& MOV& R7,#0AH
&&&&&&&&&&&& LCALL& _DELAY
&&&&&&&&&&&& MOV P0,#0FFH
&&&&&&&&&&&& MOV& P2,#0FFH
&&&&&&&&&&&& MOV A,DISPBIT
&&&&&&&&&&&& RL&& A
&&&&&&&&&&&&& MOV DISPBIT,A
&&&&&&&&&&&& POP& PSW
&&&&&&&&&&&& POP&& DPL
&&&&&&&&&&& POP&& DPH
&&&&&&&&&&&& POP&& ACC
&&&&&&&&&&&&& RET
DISPTABLE:&&&& DB&&&&& 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

我要回帖

更多关于 单片机超声波测距论文 的文章

 

随机推荐