导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:关于中断的一个奇怪的问题。请指教[horner]

 *第1324篇: C51编程:关于中断的一个奇怪的问题。请指教

  
楼 主:horner 2001年12月2日22:46
 C51编程:关于中断的一个奇怪的问题。请指教
我使用AT89C52单片机,晶振为12M,小弟程序实现以下功能:
外部中断0为50HZ的下降沿脉冲,宽度足够
功能:在每一个下降沿脉冲,对定时器开始计时,当定时时间小于20MS时,在定时器中断中,送
出一个SYNC脉冲。当定时时间大于等于20MS时,即因为外部中断而导致定时器重新计时,因此没
有能够产生中断,则在外部中断函数中,送出一个SYNC脉冲。
#include "REG52.H"
#include "intrins.h"
bit    flag; //SYNC脉冲未恢复标志
sbit    SYNC    =P1^7;

void Init0() interrupt 0 using 1
{

       TR1    =0;

        if(flag)        //表示SYNC脉冲因故没有恢复出来。
        {        //在此恢复一个SYNC脉冲
           SYNC=0;
           _nop_();
                _nop_();
           SYNC=1;

            }

        TH1    =0xb1;
    TL1    =0x0F4;//定时略小于20MS
        flag    =1;
    TR1    =1;
}

void Time1() interrupt 3 using 2
{
        TR1=0;
        flag=0;
        SYNC=0;
        _nop_();
        _nop_();
        SYNC=1;

}

void main()
{
    TCON     =0x01;    /* TCON */
    TMOD    =0X11;
    
    TH1    =0x0;
    TL1    =0x0;

    ET2    =0;
    EX1    =0;
    ET0    =0;
    ES      =0;

    TR1    =0;

    PT1     =1;    //timer1的优先级
         PX0     =1;    //中断0的优先级

    flag=0;

        EA    =1;
        EX0     =1;
        ET1    =1;
        SYNC    =1;
        while(1)
    {

    }
}
问题:
当定时时间远小于20ms或者大于20ms时,结果正确
当定时时间略小于20ms时(如上参数),SYNC脉冲的恢复不对,有丢失现象,即可能每两个周期
才有一个。兄弟百思不得其解,最后将中断地优先级修改为PX0=0,PT1=1.则运行的结果正确。请
指点迷津。先行谢过!


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:硬件:求助 icm7211

[下一篇主题]:C51编程:uC/OS-II 在Keil C移植的源代码已经上载在C51BBS