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++)
    		{;}
    	}
    }
  • 相关阅读:
    perl 解json数组
    华为云3大体系化防护实践,保障金融业云上数据安全
    弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
    【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程
    云+AI+5G时代,华为云已准备好多元化云服务架构
    高能街访 | 为什么他们都纷纷为深圳打Call?
    Angularjs进阶笔记(2)—自定义指令中的数据绑定
    Angularjs进阶笔记(1)—不同类型的双向数据绑定
    ServiceComb java-chassis和CSE java-chassis的区别
    使用inspector功能查看和管理契约
  • 原文地址:https://www.cnblogs.com/hnrainll/p/1918458.html
Copyright © 2011-2022 走看看