智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1520|回复: 0
打印 上一主题 下一主题

[咨询] 郁闷!求助

[复制链接]

15

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
威望
590
贡献
349
兑换币
291
注册时间
2013-1-26
在线时间
158 小时
毕业学校
毕桥小学
跳转到指定楼层
1#
发表于 2013-5-20 14:14:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近打算写个超声波测距,不知道为什么发数据的时候不是一直发,每次只发一次,有的时候会发2次,还有一个问题有时候会出现字符,如我测得距离是678.4cm,他有时候会显示 t78,‘cm 。这样乱七八招的只是偶尔会显示,我知道原因是这几句话的原因,我把这几句话屏蔽了,随便发个字符都可以一直发。:
while(!PORTA_PA0);                //当RX为零时等待                                      //开启定时器 PITCE_PCE0=1;         while(PORTA_PA0);                        //当RX为1。。  PITCE_PCE0=0;  
我觉得没有问题,跟居超声波的时序就是这样啊??



下面是代码,希望大家帮帮忙!!!谢谢
#include <hidef.h>    /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */



float j,i,s;
unsigned char m,n;
unsigned char buffer[8];




void sc_init()
   {
   PORTA_PA1=1;                        
           _asm(nop);                     //时序
      _asm(nop);
      _asm(nop);
      _asm(nop);
      _asm(nop);
PORTA_PA1=0;
   }




void pll_init()    //24m超p
  {
  REFDV=1;           //总线时钟=48/2=24MHz        
  SYNR=2;                    //2
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
  }


void PIT_init()
{

   PITCFLMT_PITE=0; //定时中断通道0关
    //PITCE_PCE0=1;//定时器通道0开启
    PITMTLD0=7;//位定时器初值设定。240分频,在24MHzBusClock下,100ms
    PITLD0=59;//16位定时器初值设定。PITTIME*0.1MS
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}




void SciInit()
{
    SCI0BD=156;         //9600bps  Baud Rate=BusClock/(16*SCIBD)       156
    SCI0CR1=0;            //正常8位模式,无奇偶校验
    SCI0CR2=0X2C;         //发送允许   接受中断允许  
}
//----------------------读 接受SCI数据-----------------------------//
unsigned char SciRead()
{
    uchar result;
    while(!(SCI0SR1&0x20));     //表明数据从位移寄存器传输到SCI数据寄存器
    result=SCI0DRL;        //返回数据寄存器的数据
    return result;
}
//-----------------写 发送SCI数据---------------------------------//
void SciWrite(uchar sendchar)
{
    //uchar temp;
    //temp=SCI0SR1;
    while (!(SCI0SR1&0x80));    //TDRE,  0:SC0DR 处于忙状态  1:可以向发送保持器写入新的数据     
    SCI0DRL=sendchar;
}

///------------------------main----------------------------------//
void main(void)
{

DDRA|=0X02;  
DDRA=0Xfe;//配置输入输出
SciInit();
EnableInterrupts;
pll_init();
PIT_init();
for(;;)
   {
   sc_init();

  while(!PORTA_PA0);                //当RX为零时等待

                                     //开启定时器
PITCE_PCE0=1;
         while(PORTA_PA0);
                        //当RX为1。。
  PITCE_PCE0=0;  

   s=0.34*i;  //cm
    buffer[0]=(int)(s)/100+0x30;
    buffer[1]=(int)(s)%100/10+0x30;
    buffer[2]=(int)(s)%100%10+0x30;
    buffer[3]=46;
    buffer[4]=(int)(s*10)%1000%100%10+0x30;
    buffer[5]='C';
    buffer[6]='M';
    buffer[7]=' ';
          
          for(m=0;m<8;m++)
           {  
          SciWrite(buffer[m]);
          }
          _asm(nop);                     //时序
      _asm(nop);
      _asm(nop);
      _asm(nop);
           i=0;
    _FEED_COP();


          
    /* feeds the dog */
   }
   /* loop forever*/  

  /* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0Interrupt(void)
{  
    PITTF_PTF0=1;
    i++;  
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-2 08:57 , Processed in 0.065795 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表