搜索
bottom↓
回复: 0

请教pic12f629电压比较器的用法

[复制链接]

出0入0汤圆

发表于 2010-4-28 16:36:15 | 显示全部楼层 |阅读模式
在用pic12f629做一个超声波测距的东西

  用GP5延时产生47.6KHz的方波给超声波探头起振,并延时一段时间避开余振之后,开启电压比较器,比较电压用单片机内部设计。并用GP0口接受超声波的回波,当回波信号高过设定的电压后,判别此信号为回波信号并由GP2产生一个脉冲信号表明已经接受到回波。

   现在问题是我开启了GP5的起振信号后,探头已经起振。在示波器中也可以看到回波信号进入电压比较器GP0口,但GP2并没有产生脉冲信号。

  同样的程序用protues仿真时,在某个时间加入一个脉冲模仿回波信号,GP2同样没有产生脉冲,如果把GP0的发波信号去掉的话,GP2就会有反应。

  很苦恼,希望各位老师能帮个忙。

  

#include <pic.h>
//__CONFIG ( INTIO & PWRTEN & BOREN & MCLRDIS & UNPROTECT);//没有INTIO就会用不了4,5口,没有MCLRDIS所有口都用不了
__CONFIG ( INTIO & PWRTEN & BOREN & MCLRDIS & WDTDIS);
/*端口控制*/
#define GPIO0_0 GPIO&=~0X01
#define GPIO1_0 GPIO&=~0X02
#define GPIO2_0 GPIO&=~0X04
#define GPIO3_0 GPIO&=~0X08
#define GPIO4_0 GPIO&=~0X10
#define GPIO5_0 GPIO&=~0X20

#define GPIO0_1 GPIO|=0X01
#define GPIO1_1 GPIO|=0X02
#define GPIO2_1 GPIO|=0X04
#define GPIO3_1 GPIO|=0X08
#define GPIO4_1 GPIO|=0X10
#define GPIO5_1 GPIO|=0X20

/***************************************************
GP0电压比较输入
GP1
GP2输出数据给上位机
GP3复位
GP4外部驱动
GP5输出40KHz方波
*****************************************************/
void PORTINT( )
{
TRISIO=0X1B;          //0001 1011
GPIO=0X00;           /*先送低电平*/
}
void delay4us()
{
asm("nop");
}

/*delayxus(char x)函数,当X=1时延时30US,每增加1加10US*/
void delayxus(char x)  
{
char i;
for(i=x;i>1;i--);
}


void delay100us()
{
char i;
for(i=140;i>1;i--);
}

void delay500us()
{
char h;
for(h=70;h>1;h--);
}

void delay100ms()
{
int i;
for(i=3000;i>1;i--);
}
/************************************
发波程序,47.6KHz,20个脉冲
每次140ms发一次波
*************************************/
void fabo()
{
  char i;
  for(i=20;i>0;i--)
  {
   GPIO5_1;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   GPIO5_0;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   }

void EnableCompare()  
{
  
   INTCON=0X00;
   // VRCON=0B10001111;      //3.55为低   3.6为高
   //VRCON=0B10001101;      //3.25为低   3.3为高
   //VRCON=0B10001011;      //2.95为低   3.0为高
   VRCON=0B10101101;      //2.7为低    2.75为高
   //VRCON=0B10101011;      //2.25       2.3
   //VRCON=0B10100111;        //1.45       1.5
   //VRCON=0B10100100;      //0.8        0.84
   //VRCON=0B10100001;      //0.2        0.25
   CINV = 1;   //为0输出不反向
   CM2 = 1;
   CM1 = 1;
   CM0 = 0;   
   CIS = 1;    //比较器接在GP0口
//CMCON=0X1E;
   delayxus(100);
}  


void main()
{  
PORTINT();
while (1)
{
  fabo();
  delay100ms();
  delay500us();
  delay500us();
  delay500us();
  EnableCompare();
  if(COUT)
  {
    COUT=0;
    GPIO2_1;
    delay100us();
    GPIO2_0;
    delay100us();
   }
  }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 02:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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