智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

程序求助

[复制链接]

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
319
威望
192
贡献
51
兑换币
58
注册时间
2012-10-24
在线时间
38 小时
跳转到指定楼层
1#
发表于 2013-1-18 11:17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我是要实现一个超声波测距的程序。我的思想是:当回波引脚变为高电平时,输出回响信号,同时定时器开始计时,当检测到回响信号时,此时相当于收到了外部中断,进入中断程序,在中断程序中读取此时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;
#define RX PTT_PTT7;
#define light PTM_PTM2;
uint outcomeH,outcomeL,distance;

void delay_20us();
void delay_20us()
{   
   uchar bt ;
    for(bt=0;bt<100;bt++);   
}


void main(void)
{  
  /* put your own codDisableInterrupts;e here */
     
     
     
   
     while(1)   
     
    {
     DisableInterrupts;
     TX=1;
     delay_20us();
     TX=0;   
     while(RX==0);
     TSCR2=0x07;   
     TIOS=0xBF;
     TCTL3=0x20;
     TFLG1=0x40;
     TIE=0x40;
     TSCR1=0x80;
     
     TIOS=0x00;
     TCTL1=0x00;
     TFLG1=0x80;
     TIE=0x80;
     TC7=0x0150;
     TSCR1=0x90;
     
     EnableInterrupts;
     
     while(TCNT<330);  
     
    }
     
   

   
}

#pragma CODE_SEG NON_BANKED
interrupt 14 void Timer6_ISR()
{
  outcomeH=TCNTH;     
  outcomeL=TCNTL;
  distance=outcomeH;
  distance<<=8;
  distance=distance|outcomeL;
  if(distance>295)
  light=1;
  
  DisableInterrupts;
}



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

本版积分规则

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

GMT+8, 2024-12-28 14:36 , Processed in 0.119489 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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