智能车制作
标题:
大神帮忙看看这个HC-SR04测距的问题,在线等!!!
[打印本页]
作者:
孤旅人
时间:
2015-3-20 17:50
标题:
大神帮忙看看这个HC-SR04测距的问题,在线等!!!
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
//trig->A0
//echo->A1
unsigned int a,s;
void setbus(void) //设置总线频率为40MHz
{
CLKSEL_PLLSEL = 0;
PLLCTL_PLLON = 1;
SYNR = 0xc0 | 0x04;
REFDV = 0x80 | 0x01;
POSTDIV = 0x00;
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1))
{
;
}
CLKSEL_PLLSEL = 1;
}
void PIT(void) //PIT初始化子程序
{
PITCFLMT = 0x00; //禁止PIT模块
PITCE_PCE0 = 1; //使能定时器通道0
PITMUX = 0x00; //定时器通道使用Base Timer0(微定时基准0)
PITMTLD0 = 0x04; //设置8位微定时装载寄存器0初值(8位计数器初值)
PITLD0 = 0x000a; //设置16位微定时装载寄存器0初值(16位计数器初值)
PITCFLMT =0x80; //使能PIT模块
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //中断服务子程序
interrupt VectorNumber_Vpit0 void PIT_ISR(void)
{
PITTF_PTF0 = 1;
a++;
}
#pragma CODE_SEG DEFAULT
void signal() //触发信号
{
DDRA = 0x01;
PORTA = 0x01;
PITINTE = 0x01;
while(a<=20)
{
; //等待20us
}
PITINTE = 0x00;
a = 0;
PORTA = 0x00;
}
void distance() //测试距离
{
while(!(PORTA == 0x02));
PITINTE = 0x01;
while(!(PORTA == 0x00));
PITINTE = 0x00;
s =(char) (a * 17/100);
}
void SCI() //SCI0初始化程序
{
SCI0BD = 206;
SCI0CR1 = 0x00;
SCI0CR2 = 0x2;
}
void SCI_sendbyte(unsigned int data)
{
while(!(SCI0SR1&0x80));
SCI0DRH = 0;
SCI0DRL = data;
}
void main(void) {
EnableInterrupts;
setbus();
PIT();
SCI();
for(;;) {
_FEED_COP();
signal();
distance();
SCI_sendbyte(s);
}
}
这个程序是测距的,但是编译器编译时在
void SCI_sendbyte(unsigned int data)
{
while(!(SCI0SR1&0x80));
SCI0DRH = 0;
SCI0DRL = data;
}
老是说SCI0DRL = data可能会丢失数据,是什么情况啊?
作者:
孤旅人
时间:
2015-3-20 20:22
有没有大神啊 帮帮忙 我看了一天了 都没看出是哪出错了
作者:
孤旅人
时间:
2015-3-21 19:31
就没有一个人能帮下忙吗
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2