PORTB的功能基本就是普通IO,但它在其他方面有其他引脚不具备的特点,PORTB的每一个引脚在作为输入时,内部都有一个弱上拉可用。
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
#define uchar unsigned char
#define uint unsigned int
// CONFIG
#pragma config FOSC = HS //
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#define DELAY 500
uchar count;
void delay(uint x) //1ms
{
uint y,z;
for(y=x;y>0;y--)
for(z=25;z>0;z--);
}
void init(void)
{
TRISB0=0;
RB0=1; //为下降沿创造高电平的初始条件
TRISB0=1; //输入模式
INTEDG=0; //0下降沿触发,1为上升沿触发
INTF=0; //清零标志位
INTE=1; //开中断允许
GIE=1; //开全局中断
}
void interrupt INT() //查询式中断
{
if(INTE&&INTF)
{
INTF=0;
count++;
TRISB0=0; //RB0设为输出
RB0=1; //输出高电平,以便检测中断条件(下降沿)
TRISB0=1; //设为输入,等待中断
}
}
void main(void)
{
uchar i,temp;
TRISA=0x00;
PORTA=0xff;
temp=0x01;
init();
while(1)
{
if((count%2)==1)
{
PORTA=temp;
delay(DELAY);
temp^=1;
}
}
}
关键字:PIC16F877A 外部中断 RB0 RA0 点亮LED
引用地址:
PIC16F877A 外部中断RB0 ,RA0点亮LED
推荐阅读最新更新时间:2024-03-16 15:19
OK6410按键中断点亮lED
首先理清楚要准备的几个方面 1.LED初始化 2.按键初始化 3.中断初始化 4.中断处理程序 首先初始化LED,以前说过了,不说 按键初始化,这里既然要用到中断,就不用传统的延时消抖的办法了,直接用中断。 只要把对应的位设置成10,就是外部中断了 这里用XEINT0和XEINT5,有理由的,为什么选这两个后面会说 void button_init() { *(GPNCON)=0x802; //配置按键位外部中断 } 接下来中断初始化,一下说的比较清楚了,寄存器的名字直接在s3c6410里面查找就可以了,为什么选XEINT0和XEINT5的原因在注释最长的那一行里面
[单片机]
外部中断实现LED灯的控制亮灭
#include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit led=P2^0; sbit k4=P3^3;//外部中断1 void delay(u16 i) { while(i--); } void zhongduan() { EA=1;//总中断打开 EX1=1;//外部中断1打开 IT1=1;//外部中断1选择低电平触发 } void main() { zhongduan();//调用中断函数 while(1); } void zhong() interrupt 2//外部中断服务函数 { delay(1000);//消除按键抖动
[单片机]
STM32笔记——外部中断
基本概念 一、中断和异常 1、中断——当需要出现时,CPU暂时停止当前程序的执行,转而执行处理新情况的程序和执行过程。 2、异常——处理器要复位,不可屏蔽中断,存储故障,这些由内核产生的就叫做异常,也就是硬件异常。 二、EXIT和NVIC EXIT外部中断/事件控制器 外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。 外部中断框图: 触发机制 上升沿:数字电路中,数字电平从低电平(数字“0”)变为高电平(数字“1”)的那
[单片机]
STM8S_009_ EXTI外部中断
有人问 我使用EXIT唤醒芯片,没什么没有触发中断,芯片却唤醒了? Ⅰ写在前面 使用STM8S开发过上面类似功能的朋友应该会知道,STM8S的稳定性不如STM32,特别是在低功耗时,使用EXTI外部中断唤醒,很容易受到干扰信号而唤醒。因此,这种情况需在硬件电路上多加考虑抗干扰的电路。 其次,就是注意软件的上下拉配置,如果外部加了上拉或下拉电阻,不建议再配置成上拉或下拉;如果没有,建议加上。要使其软件稳定,还得深入EXTI的功能。 ⅡEXTI基础知识 STM8S的EXTI外部中断归属于GPIO一类,只需要将其IO配置成外部中断、使能全局中断、在中断入口函数添加相关的代码即可。 开启中断功能 在EXTI_CR 寄存
[单片机]
STM32中断过程详解
对于 STM32 讲(还是以Timer2例),外部中断通道位置 28(35 号优先级)是给外部设备 TIME2 的,但 TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢) 、输入捕获、输出匹配、DMA 申请等。所有TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢? 1.因为cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总的控制该中断通道。它们包括有: 中断优先级控制字:PRI_n(前面有提到过) 中断允许设置位:在 ISER 寄存器中 中断允许
[单片机]
单片机的外部中断(二)
前言:单片机的中断系统(一) 80C51单片机提供两个外部中断口: INT0(P3.2)和INT1(P3.3)引脚输入。这两个引脚是功能复用引脚,既可以作为普通V0口,也可作为外部中断输入引脚。下面以部中断0来讲述。80C51单片机在每个机器周期的S5P2期间扫描外部中断输入引脚的电平状态。当外部中断设置为下降沿触发时,若处理器在连续两个机器周期扫描到INT0引脚的电平先后为高电平和低电平时,就会设置中断标志位IE0为1,表示外部有中断申请,该中断申请信号会一直保持,直到该中断被响应,该标志由内部硬件自动清除。当外部中断设置为电平触发方式时,在外部中断引脚INTo变为低电平时,IE0变为1,并一直保持为1,直到引脚INTo的输
[单片机]
51单片机+ESP8266点亮LED小灯
ESP8266模块采用STA工作模式,先在电脑上用串口调试助手,将ESP8266模块设置为STA模式,波特率9600,具体指令如下: 1.设置AP模式 AT+CWMODE=2 2.复位生效 AT+RST 3.配置热点 AT+CWSAP= test , 12345678 ,1,3 这样即使ESP8266复位也不会将这些信息擦除,直接上后面的指令就可以 单片机接ESP8266一定注意两者一定要共地,否则ESP8266不能正常工作,ESP8266电源要3.3V供电,5V的貌似不行,ESP8266的EN脚外接一个1K欧的电阻再接3.3V电源 #include reg52.h typedef unsigned char u8; typed
[单片机]
嵌入式STM32学习笔记(2)——点亮LED灯及用中断让其闪烁
这里直接开始码代码了,至于前期的准备工作比如配置MDK-keil,或配置IAR等,大家可以在网上找对应的教程,这里不赘述了;直接讲代码如何撸吧,代码里我做了详细注释: 1)编译器IAR8,系统win10; 2)板子:STM32F103C8T6核心板,如下: 3)下载器:ST-LINK/V2仿真下载器; 4)板子上LED对应的引脚是GPIOC, GPIO_Pin_13;在IAR对应的stm32F103X模板DRIVER目录下添加:led.c,led.h,timer.c,timer.h文件,如下: 5)led.c 代码如下: #include led.h /*LED_G 驱动 GPIO 初始化函数*/ vo
[单片机]