好文档 - 专业文书写作范文服务资料分享网站

超声波程序

天下 分享 时间: 加入收藏 我要投稿 点赞

.

tt=0;//清零重新计数 TF1=0;//计数溢出标志 TH1=0;//定时器1清零 TL1=0;// 定时器1清零 ET1=1;//开定时器1 TR1=1;//启动定时器1 EX1=1;//打开外部中断1 succeed_flag=0;

while(EX1==1);//等待回波标志 if(succeed_flag==1)//测试成功 {time=TH1*256+TL1;//回波响应时间 distance=time*1.72/100;//换算成路程

Led(distance);//显示测到的距离 EX1=1;//开中断1

}

if(succeed_flag==0)//测试不成功或超出时间 {

Led(3333);//表示测不到回波 } }

/****************************红外解码******************************/ /******************** 中断0解码服务子程序 ********************/

精选文档

.

void int0(void) interrupt 0 using 2 {

EA = 0;//??? 可以这样,跳入中断,但仍可对P3.2(INT0)进行电平变化的读取

for(k=0;k<10;k++) {

Delay0_9ms();

if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码 { k=10; break; }

else if(k==9) //如果 持续了10×0.9ms=9ms的低电平,说明是引导码 {

while(IRsignal==0);

Delay4_5ms(); //跳过持续4.5ms的高电平 for(i=0;i<4;i++) //分别读取4个字节 {

for(j=1;j<=8;j++) //每个字节8个bit的判断 {

while(IRsignal==0); //等待上升沿 此处用得很好:因为0.56ms

精选文档

.

的低电平(接收时)是代码0与1的相同部分

Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms(因为0.9介于0.56(=1.125-0.56)与1.69(=2.25-0.56)之间),再判断IRsignal if(IRsignal==1) //如果IRsignal是\高位置\,并向右移一位

{

Delay1ms(); //为什么要延时1ms呢?因为要使IRsignal跳至

低电平(即0.56ms的0与1相同部分上)

CodeTemp=CodeTemp|0x80; //此处的算法很好 if(j<8) CodeTemp=CodeTemp>>1; } else if(j<8)

{CodeTemp=CodeTemp>>1;}//如果IRsignal是\则直接向右移一位,自动补\ }

IRcode[i]=CodeTemp; CodeTemp=0; }

for(i=0;i<4;i++) //通过串口将代码发出 {

SBUF=IRcode[i]; //引导码 地址码 数据码 数据反码 while(!TI); //等待一个字节发送完毕

精选文档

.

TI=0; } Delay(); } }

switch(IRcode[2]) //数据位 {

case 69:m=0xfe;break;//电机上升 case 70:m=0xff;break;//电机停止 case 71:m=0xfc;break;//电机下降 case 22:a=0;break; case 25:key=1;break;//功能键 case 12:a=1;;break; case 24:a=2;;break; case 94:a=3;;break; case 8: a=4;;break; case 28:a=5;;break; case 90:a=6;;break; case 66:a=7;;break; case 82:a=8;;break; case 74:a=9;;break; }

精选文档

.

EA = 1;//开总中断 }

/*******************************************************************/ /***********************初始化程序*********************/ void initUart(void) {

TMOD |= 0x11; //定时器T1,T0都用方式1,16位 PCON |= 0x80;

TH1=0;//定时器T1 高位初始化

TL1=0;//定时器T1 低位初始化 ET1=1;//开定时器1

TR1 =1; //用时才启动 //TMOD=0x01; }

/*******************************************************************/ /*******************************************************************/ //设置电机到达的高度

TH0=(65536-count)/256;// 定时器T0 初值 TL0=(65536-count)%6; // EA=1;//开总中断

ET0=0;//先关上38KHz,用到的时候再开 TR0=0; //先关上38KHz,用到的时候再开

精选文档

超声波程序

.tt=0;//清零重新计数TF1=0;//计数溢出标志TH1=0;//定时器1清零TL1=0;//定时器1清零ET1=1;//开定时器1TR1=1;//启动定时器1EX1=1;//打开外部中断1succeed_flag=0;while(EX1==1);//等待回波标志if(succeed_
推荐度:
点击下载文档文档为doc格式
8lbvb2pfke4vbt01gdv99bpag891bi003zd
领取福利

微信扫码领取福利

微信扫码分享