PIC16F887 RB0外部中断(2)

发布者:柳絮轻风最新更新时间:2020-08-24 来源: eefocus关键字:PIC16F887  RB0  外部中断 手机看文章 扫描二维码
随时随地手机看文章

#include   

#include   

 

__CONFIG (CP_OFF&WDTE_OFF&BOREN_ON&PWRTE_OFF&FOSC_HS&WRT_OFF&LVP_OFF&CPD_OFF);  

   

/*配置位 

CP_OFF,代码保护位,程序存储器代码保护关闭; 

WDTE_OFF,看门狗定时器使能位,看门狗定时器关闭,可以通过WDTCON寄存器的SWDTEN位使能; 

BOREN_OFF,掉电复位选择位,掉电复位关闭; 

PWRTE_OFF,上电定时器使能位,上电定时器关闭; 

FOSC_HS,振荡器选择位,高速晶振或谐振器在RA6/OSC2/CLKOUT和RA7/OSC1/CLKIN; 

WRT_OFF,闪存程序存储器自写使能位,写保护关闭; 

LVP_OFF,低电压编程使能位,RB3引脚有数字I/O,使用MCLK上的HV(高电压)来编程; 

CPD_OFF,数据代码保护位,数据存储器代码保护关闭; 

*/  

     

#define uchar unsigned char  

#define uint unsigned int  

#define LEDA RB3//定义灯1  

#define RET RB0//定义灯1  

  

  

void delay(unsigned int n);  

void interrupt ISR(void);   

uchar count;  

  

main()  

{  

TRISB=0X01; //RB0为输入,其余为输出   

PORTB=0x09; //RB3置1  

 

//ANSEL=0x00;  

 

 

ANSELH=0x00;  //将RB0(AN12)引脚被分配给端口或特殊功能。

//必须初始化ANSELH 寄存器以将模拟通道配置为数字输入。配置为模拟输入的引脚将读为0。 

 

 

/*

GIE = 1;  //GIE:  全局中断允许位   1 = 允许所有未被屏蔽的中断

PEIE = 1; //PEIE: 外设中断允许位  1 = 允许所有未被屏蔽的外设中断

INTE = 1; //INTE:INT 外部中断允许位 1 = 允许INT 外部中断

RBIE = 1; //RBIE:PORTB 电平变化中断允许位 1 = 允许PORTB 电平变化中断

INTF=0;   //INTF:INT 外部中断标志位 0 = 未发生INT 外部中断 

*/

INTCON=0XD8;

   

WPUB = 0X01;//使能上拉 

 

/*

INTEDG=0; //触发中断的边沿选择位   0 = INT 引脚下降沿触发中断

*/ 

OPTION_REG=0x00;   

  

TRISD=0X00;  //定义PORTD为输出   

PORTD=0X00;  //输出低电平  

 

while(1)  

{  

}  

  

}  

  

  

//延时(n)ms  

void delay(unsigned int n)  

{  

    unsigned int j;  

    unsigned int k;  

    for(j=0;j        for(k=264;k>0;k--)  

        NOP();  

}  

  

void interrupt ISR(void)  

{  

  if(INTF==1)   //电平变化中断  

{  

delay(20); 

if(RB0 == 0)

{

INTF=0; 

PORTD = ~PORTD;

LEDA = ~LEDA;

}

}        



代码经过测试


关键字:PIC16F887  RB0  外部中断 引用地址:PIC16F887 RB0外部中断(2)

上一篇:PICC 编译器的安装与使用方法
下一篇:PIC18F45k22单片机程序文件目录存放架构

推荐阅读最新更新时间:2024-11-13 06:14

2440外部中断实验遇到问题与总结
外部中断实验遇到问题: 1、程序下载到内存(SDROM)中不可运行,下载到nand flash中就可以。 其他程序下载到内存中可以直接运行,不会出现上面问题。 2、外部中断 Eint8_23(共用一个中断向量表),程序中同时设置好几个中断,每个中断服务函数执行不同内容,但是每个外部中断的相应却只有一个。 void __irq Eint8_Isr(void) { Led1_On();//Delay_Ms(1000);Led1_Off(); rSRCPND |= (1 5); //先清除rSRCPND rINTPND |= (1 5); //清除EINT8_23中断标志位 rEINTPEND |= (
[单片机]
C51/C52单片机的中断(EXTI)介绍及实现(二)
一、什么是中断 重复说明,CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 简单来说就是:打断当前正在做的事,去执行另外的事,执行完后再回来接着做前面被打断的事,如图所示: 程序中的表现方式: 引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。 二、51单片机
[单片机]
C51/C52单片机的中断(<font color='red'>EXTI</font>)介绍及实现(二)
STM8的中断系统以及外部中断详解
STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有可编程的优先级,共有两位优先级,两个BIT的优先级可以催化出4个优先级,具体如下 中断控制器内部有一些寄存器专门用来存放相应的中断的中断优先级,同同时,在系统内部也有一个系统寄存器CC他的第三位和第五位分别表示当前正在处理的中断的优先级 可以这样认为,中断发生的时候,系统寄存器在执行中断向量跳转的时候自动载入了相应的中断优先级到系统寄存器CC中. 中断的处理遵循先判断软件优先级后判断硬件优先级的模式,当几个中断同时发生
[单片机]
CC2530外部中断控制LED灯开关
实验要求 代码实现 #include ioCC2530.h #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口 //配置端口的方向 P1DIR |=0x1B; //关闭LED灯 P1 &=~0x1B; } //外部中断端口1的初始化 void Init_INTP1() {
[单片机]
CC2530<font color='red'>外部中断</font>控制LED灯开关
STM8S外部中断注意
因为没有中断的清除标志位,这一点与其它单片机是不同的。 EXTI_CR1 触发边沿的设置 要在总中断没开时才能写入! PD7 是 不可屏蔽的最高优先级的硬件中断 (TLI) 设置顺序:最好先关中断 设置边沿 开启引脚 最后开总中断 DisableAllIntp(); EXTI_CR1 = ****(PD口双沿中断); Init_Exti_PD_Intp(); EnableAllIntp(); 另外定时器读取与51有异,顺序要先读TIM1- CNTRH 再读TIM1- CNTRL 要是反过来读 就会得不到正确的值 写CNTR寄存器时,要先关闭(disable)定时器,否则有可能无法正常写入的值
[单片机]
atmega8 例程:INT1外部中断
/*********************************************************** * 函数库说明:ATMEGE8 INT1中断程序 * 版本: v1.0 * ************************************************************ *注意: button PD3 * LED PD5
[单片机]
重构外部中断回调函数来区分外部中断具体引脚做具体对应的任务
1.STM32CubeMX配置如下: 这里GPIO mode一共有六种分别是: (1)上升沿触发外部中断 (2)下降沿触发外部中断 (3)边沿触发外部中断 (4)上升沿触发外部事件 (5)下降沿触发外部事件 (6)边沿触发外部事件 2.CubeMX生成的代码: /** Configure pins as * EXTI */ void MX_GPIO_Init(void) { __HAL_RCC_GPIOD_CLK_ENABLE(); //使能GPIO时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = DATA_4
[单片机]
重构<font color='red'>外部中断</font>回调函数来区分<font color='red'>外部中断</font>具体引脚做具体对应的任务
STM32——如何配置外部中断
中断服务函数列表 IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数 EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler 外部中断一般步骤 1、开启IO口时钟,初始化IO口为输入。调用函数:GPIO_Init(); 2、开启IO口复用时钟。调用函数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,EN
[单片机]
STM32——如何配置<font color='red'>外部中断</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved