|
楼主 |
发表于 2013-4-19 20:30:57
|
显示全部楼层
#include "STC_NEW_8051.H"
#include "serialport.h"
#include <stdio.h>
#include "type.h"
#include "timer.h"
#include "steer.h"
#include "intrins.h"
#include "STDIO.H"
extern void Timer0Init();
extern void UART_send_byte(uint8 byte);
void Send_wave(void)
{
TX=1; // 启动模块 10us以上的高电平
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
uchar Get_Distance(unsigned long S)
{
unsigned int time=0;
S=0;
Send_wave();
TH1=0;
TL1=0;
while(!RX); //当RX为零时等待
TR1=1; //开启计数
while(RX); //当RX为1计数并等待
TR1=0; //关闭计数
time=TH1*256+TL1;
TH1=0;
TL1=0;
S=(time*1.7)/100; //算出来是CM
if(S>=250)
{
return (uchar)(0xff);
}
else
return S;
}
void Send_Distance(void)
{
UART_send_byte(0xFF);
UART_send_byte(0x03);
UART_send_byte(Steering_gear());
UART_send_byte(Get_Distance());
UART_send_byte(0xFF);
Delay_Ms(50);
}
void main(void)
{
UART_init();
/* 定时器0作为舵机专用,不建议更改配置 */
Timer0Init();//舵机初始化
/* 定时器1为自由状态,用户可灵活使用 */
Timer1_Init();
Motor_Init();
while(1)
{
Send_Distance(); //向上位机发送超声波距离(单位 CM) ;
|
|