搜索
bottom↓
回复: 5

为什么边沿触发的外部中断一打开就触发了?

[复制链接]

出0入0汤圆

发表于 2012-5-23 08:15:05 | 显示全部楼层 |阅读模式
本帖最后由 haohouse 于 2012-5-23 08:16 编辑

传统的非门+CX20106A做超声测距,CX20106A第7脚接STC89C52外部中断0,边沿触发方式,为什么每次一打开外部中断就会触发呢?
网上有人说IE0要清零我也做了啊。

电路图按照经典方法接的,就不贴了。

主要程序如下,22.1184M的晶振,T0用于测距计时,T1用于发射40KHZ方波,外部中断用于检测CX20106A的下降沿输出
void main()
{
        TL1=234        TH1=234;
        TMOD = 0x21;      /*  设CTC1工作于模式2 */
        ET0 = 0;          /* 不允许CTC0中断  */
        EX0 = 0;
        IP=0x01;        /*  置外部中断INT0优先级为高   */
        TCON=0;                /*  设置外部中断0的中断方式为电平触发  */
        IT0 = 1;        //         设置为边沿触发
        CLflag=1;                         /*    测量标志    */
        cshu=0;                          /*  传数 */
        delay(200);             /*延时*/
        IE=0x80;                           /* 开中断  */
        ET1=1;       ET0=1;
        TR1=0;       TR0=0;

        while(1)
        {
                CLflag=0;
                cshu=0;
                EX0=0;
                TL1=234;
                TH1=234;
                TL0 = 0;
                TH0 = 0;                                        /*  定时器0的初始时间 */
                VOLCK=0;  // 发射端置低电平
                TR1=1;                                        /*  启动定时器1,发送信号  */
                while(cshu<8);                        // 发射4个周期,占空比50%                        
                TR1=0;
                TR0=1;                                   /*  启动定时器0,开始记时  */
                delay(100);  // 等待一段时间再开外部中断0,结果EX0一开就触发了,测到的时间就是这个等待时间,求解啊                               
                IE0 = 0;  //标志清零了再开中断,也没用
                EX0 = 1;
        }
}

void serve_INT0( ) interrupt 0
{
        /*  外部中断0,用于检测接收信号  */
        TR0=0;       /*  关闭定时器0 */
        EX0=0;       /* 关中断  */
       
        time=(long)TL0;
        time+=(long)TH0*256;
        CLflag=1;
        TH0=0;
        TL0=0;
}

void CTC0_INT (  )   interrupt  1
{
        TR0=0;
        ET0=0;
}

/*  CTC1中断服务程序,12.5us 中断一次,用于发射  */
void CTC1_INT (  )   interrupt  3
{
        VOLCK=~VOLCK;
        cshu++;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-23 09:04:02 | 显示全部楼层
初始化开始前  关中断

出0入0汤圆

 楼主| 发表于 2012-5-23 09:08:40 | 显示全部楼层
  void main()
{
      TL1=234        TH1=234;
        TMOD = 0x21;      /*  设CTC1工作于模式2 */
        ET0 = 0;          /* 不允许CTC0中断  */
        EX0 = 0;

谢谢楼上,可是这已经很靠前了吧

出0入0汤圆

发表于 2012-5-23 11:06:40 | 显示全部楼层
看看脚上的波形啊

出0入0汤圆

 楼主| 发表于 2012-5-23 11:25:48 | 显示全部楼层
没示波器啊悲剧,虚拟示波器行不?接声卡的那种。

出0入0汤圆

 楼主| 发表于 2012-5-23 12:41:20 | 显示全部楼层
最新进展,问题基本解决了,现在可以做一些近距离探测(40CM以内),中间各种改程序和改电路,个人认为主要起作用的2个地方:
1. delay(100)放在开外部中断之后
2. 接收探头正极接的C104不要接地,直接串在正极和CX20106的1脚

但是现在干扰还是很大,而且要T, R 2个探头面对面才比较准,障碍物反射方式干扰很多,测出来的结果很乱,打算调一下CX20106增益看看效果如何。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-3 00:19

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

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