zoukankan      html  css  js  c++  java
  • PIC 外部中断RB0/INT试验

    /*******************************
    PORTB的RB0可以作为一个外部中断信号输入,可以对输入信号的上升沿或下降沿跳变产生一个中断响应。

    要实现RB0/INT中断源,软件初始化设定步骤如下:

    1,RB0/INT引脚为输入模式,TRISB0 = 1;

    2,INTEDG = 1,RB0上输入信号上升沿产生中断;INTEDG = 0,下降沿中断

    3,清除INTF = 0,确识有效中断发生前中断标志为0;

    4,INTE = 1,允许RB0/INT中断响应。

    5,GIE = 1,打开总中断使能

    6,中断发生后,查询INTF位;

    7,若INTF = 1,有中断,处理完毕后,软件必须清除INTF中断标志位。

    ********************************/
    #include <pic.h>
    #include "../head/config.h"

    __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);   
    //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器

    void delay1ms(uint DelayTime);

    void main(void)
    {
        TRISB = 0x01;
        INTEDG = 0;
        INTF = 0;
        INTE = 1;
        GIE = 1;
        PORTD = 0xff;
        TRISD = 0x00;
        while(1){}
    }

    void interrupt ISR(void)
    {
        if(INTF == 1)
        {
            INTF = 0;
            delay1ms(20);
            if(RB0 == 0)
            {
            PORTD = ~PORTD;
            }
        }
    }

    void delay1ms(uint DelayTime)
    {    uint temp;
        for(;DelayTime>0;DelayTime--)
        {    for(temp=0;temp<270;temp++)
            {;}
        }
    }

    /*******************************
    PORTB的RB0可以作为一个外部中断信号输入,可以对输入信号的上升沿或下降沿跳变产生一个中断响应。
    
    要实现RB0/INT中断源,软件初始化设定步骤如下:
    
    1,RB0/INT引脚为输入模式,TRISB0 = 1;
    
    2,INTEDG = 1,RB0上输入信号上升沿产生中断;INTEDG = 0,下降沿中断
    
    3,清除INTF = 0,确识有效中断发生前中断标志为0;
    
    4,INTE = 1,允许RB0/INT中断响应。
    
    5,GIE = 1,打开总中断使能
    
    6,中断发生后,查询INTF位;
    
    7,若INTF = 1,有中断,处理完毕后,软件必须清除INTF中断标志位。
    
    ********************************/
    #include <pic.h>
    #include "../head/config.h"
    
    __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);	
    //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器
    
    void delay1ms(uint DelayTime);
    
    void main(void)
    {
    	TRISB = 0x01;
    	INTEDG = 0;
    	INTF = 0;
    	
    	INTE = 1;
    	GIE = 1;
    	
    	PORTD = 0xff;
    	TRISD = 0x00;
    	
    	while(1){}
    }
    
    void interrupt ISR(void)
    {
    	if(INTF == 1)
    	{
    		INTF = 0;
    		delay1ms(20);
    		if(RB0 == 0)
    		{
    		PORTD = ~PORTD;
    		}
    	}
    }
    
    void delay1ms(uint DelayTime)
    {	uint temp;
        for(;DelayTime>0;DelayTime--)
    	{	for(temp=0;temp<270;temp++)
    		{;}
    	}
    }
  • 相关阅读:
    揆首:以极客的思维做云诺
    [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
    wxWidgets初学者导引(3)——wxWidgets应用程序初体验(PDF版及附件下载)
    Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)
    十问华为战略营销总裁徐文伟
    Debug与Release有时候确实不一致
    COM实践经验
    [置顶] (游戏编程-04)JAVA版雷电(奇迹冬瓜)
    第23章 COM和ActiveX(COM可以实现跨进程跨机器的函数调用)
    用Delphi即时判断当前的网络的连接方式
  • 原文地址:https://www.cnblogs.com/hnrainll/p/1918458.html
Copyright © 2011-2022 走看看