应广单片机-外部中断demo

       对于一般的应用,比如键盘,充电检测灯,甚至一些通信,定时查询端口状态就OK了,但是一些特殊应用,特别是通信类的。最好还是用中断,那不多说,上代码。欢迎探讨和交流!


#include    "extern.h"

#define DISABLE 0
#define ENABLE 1

#define     HIGH    1
#define  LOW    0
    
#define DISABLE 0
#define ENABLE 1
    
#define EMPTY 0
#define FULL 1
    
#define ON 1
#define OFF 0

 
 BIT     RX                :PA.0;


BYTE  BitVal1;

BIT bMsFlag         :BitVal1.2;          /*历史状态*/


/*系统变量*/
Word usTmrCnt;

byte usPwmCnt;
//word ucCmd;


    
void Tmr16InterInit ( void )
{
    
    usTmrCnt=0;
    $ T16M    IHRC, /1,BIT10
        
    INTEN.T16 =1;/*开启定时中断*/
    Intrq.T16 =0;/*清除中断请求*/
    ENGINT //全局中断开启
}

void ExtIntInit(void)

    /*PA0 中断,使能*/
    INTEN.0=1;
    /*下降缘中断
    b7:5@00=保留
    b4@1=T16下降沿请求中断?;0=T16上升沿请求中断
    b3:2@00=PB0/PA4上升沿,下降远均请求中断,01=上升沿,10=下降沿;11=保留
    b1:0@00=PA0/PB5上升沿,下降远均请求中断,01=上升沿,10=下降沿;11=保留
    */
    integs=0x00;
    
    /*清除PA0/PB5中断标记*/
    Intrq.0=0;

}

void    GpioInit (void)
{    

    $ RX   In,pull;

}

void    FPPA0 (void)
{
    .ADJUST_IC    SYSCLK=IHRC/8, IHRC=16MHz, VDD=3V;
    $ CLKMD IHRC/8,En_IHRC,En_ILRC,En_WatchDog;
    byte temp;
    .delay  25*2000;
 
    GpioInit();

 
    ExtIntInit();
    
        
    Tmr16InterInit();

    
    while (1)
    {
        wdreset;
        
      
        if(bMsFlag)
        {

           
            bMsFlag=0;
        }
    
        
    }
}


void    Interrupt (void)
{
    pushaf;

    if (Intrq.T16)
    {    
         stt16 usTmrCnt;
        
        Intrq.T16    =    0;

    
        /*1ms 计数*/
       usPwmCnt++;
       if(usPwmCnt>16)
       {
              usPwmCnt=0;
           bMsFlag=1;
       }

    }

    /*下降沿中断*/
    if ( Intrq.0 )  
    {
        /*清除中断标记,这里设置断点,切换RX状态就行*/
        Intrq.0=0;

    }


    popaf;
}
/*edit by zhongvv,QQ:85547259*/

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值