智能车制作

标题: 程序求助(程序中有部分注解) [打印本页]

作者: ybcqujx    时间: 2013-1-18 11:41
标题: 程序求助(程序中有部分注解)
我是要实现一个超声波测距的程序。我的思想是:当回波引脚变为高电平时,输出回响信号,同时定时器开始计时,当检测到回响信号时,此时相当于收到了外部中断,进入中断程序,在中断程序中读取此时TCNT的值,就可以算出定时时间,也就算出了要测的距离。此时程序又加到主程序中,在主程序中,我就是问可不可以里面再设定像while(TCNT<330)类似的式子来关闭定时器,关闭后让程序重新循环后让定时器重新开始计时,这样主要是利于我重新测距,也就是利于我重新在中断程序中读取TCNT值,好不断地测距离。我的这部分程序如下:但是我的程序编译通过不了,老是显示Error:C2801:'}' missing。我也检查不出错误是什么。希望知道的指点我下,谢谢。


#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define uint unsigned int
#define uchar unsigned char
#define TX PTM_PTM0;  //定义TX口,此口用来接收一个10us以上的高电平,在下面我写的是20us,肯定达到要求了
#define RX PTT_PTT7; //定义RX口,此口用来接收外部中断
#define light PTM_PTM2;
uint outcomeH,outcomeL,distance;

void delay_20us();
void delay_20us()  //延时20us,可能不是很精确,但是肯定超过了10us。
{   
   uchar bt ;
    for(bt=0;bt<100;bt++);   
}


void main(void)
{  
  /* put your own codDisableInterrupts;e here */
     
     
     
   
     while(1)   
     
    {
     DisableInterrupts;        //关中断
     TX=1;                      //给PTM_PTM0一个高电平
     delay_20us();           
     TX=0;                      //持续20us后变为低电平,此用来触发内部模块发出激励信号
     while(RX==0);           //发出激励信号后,内部就会发出超声波信号,在这里就是等待是否发出超声波信号,没收到,一直等待,收到了退出循环,进入下面的程序
     TSCR2=0x07;         
     TIOS=0xBF;            //定时器通道6为IC方式
     TCTL3=0x20;
     TFLG1=0x40;
     TIE=0x40;
     TSCR1=0x80;         
     
     TIOS=0x00;
     TCTL1=0x00;
     TFLG1=0x80;
     TIE=0x80;
     TC7=0x0160;                //设定TCNT的最大值是352
     TSCR1=0x90;
     
     EnableInterrupts;           //开中断
     
     while(TCNT<330);       //这里就是我用来关闭定时器的,当计数值超过330时,就跳出这个while循环,从而进入大循环,来重新让TCNT来从0开始计数,这里我也有疑问,TCNT能关闭和通过软件来使它重新从0开始计数吗?
     
    }
     
   

   
}

#pragma CODE_SEG NON_BANKED
interrupt 14 void Timer6_ISR()
{
  outcomeH=TCNTH;           //读取TCNT的高8位   
  outcomeL=TCNTL;           //读取TCNT的低8位
  distance=outcomeH;         
  distance<<=8;
  distance=distance|outcomeL;   //通过这些运算得到dsitance的值
  if(distance<295)                   //这个295的值是我通过计算折算出来的,也就是相当于40CM的距离,当大于这个值时,小车会停止或其他动作。
  light=1;              // 小灯亮来指示我们小车距前方物体小于40CM了
  
  DisableInterrupts;    //关中断   
}




作者: mxj1005071012    时间: 2013-1-18 11:58
看晕了
作者: 青龙00    时间: 2013-1-18 13:08
:lol:lol
作者: skyangel2010    时间: 2013-1-18 14:47
本帖最后由 skyangel2010 于 2013-1-18 14:50 编辑

你可以测试一次,开关一次定时器中断就行了啊,何必那么麻烦
作者: ybcqujx    时间: 2013-1-18 19:35
skyangel2010 发表于 2013-1-18 14:47
你可以测试一次,开关一次定时器中断就行了啊,何必那么麻烦

请问你写过没,写过的话写一个后通过编译后让我参考下行吗?呵呵





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2