AVR的INT外部中断和PCINT中断之区别与使用

发布者:mmsg3814最新更新时间:2017-11-07 来源: eefocus关键字:AVR  INT  外部中断  PCINT 手机看文章 扫描二维码
随时随地手机看文章

INT外部中断是几乎所有通用单片机,嵌入机中都会带有的,早期的51系列和arm系列也都有,然而大多数因为设计原因,多只有带两个INT,最近别人提到了一个“所有端口都可以外部中断”这样的说法,因为表示存疑,因此找了些资料,也就找到了avr328p自带的PCINT引脚功能

 

AVR的INT外部中断和PCINT中断之区别与使用

 

INT外部中断和AVR和PCINT具体区别如下:

 

差别1. INT限制在了两个端口上面,而PCINT则是所有接口都具备。

 

差别2. INT具有上沿,下沿,低电平,高电平触发这几种模式,而PCINT只有测量电平的变化这一个模式。

 

差别3. INT可以了解具体是哪个口触发的,而PCINT不行。

 

差别4. PCINT不会直接跳转入指定的程序,用户需要读取寄存器来做判断是哪个PCINT端口产生了变化。

 

差别5. INT0和INT1各自可配置一个中断程序入口,而所有的PCINT都只会触发跳转进入一条指定的程序。

 

 

 

 

 

 

提供一道avr环境下的PCINT相关代码与注释,代码功能是初始化三个PCINT

 

参考地址:https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328

 

#include

#include             // 头文件,内含了uint8的声明

#include     // Needed to use interrupts    

volatile uint8_t portbhistory = 0xFF;     // default is high because the pull-up

int main(void)

{

    DDRB &= ~((1 << DDB0) | (1 << DDB1) | (1 << DDB2)); //拉低PB0,1,2三个口的电平
    // PB0,PB1,PB2 (PCINT0, PCINT1, PCINT2 pin) 现在处于输入态

    PORTB |= ((1 << PORTB0) | (1 << PORTB1) | (1 << PORTB2)); // 开启上拉

    // PB0, PB1 , PB2 现在处于上拉输入状态下

    

    PCICR |= (1 << PCIE0);     // 设置 PCIE0 以启用 PCMSK0 侦测

    PCMSK0 |= (1 << PCINT0);   // 设置 PCINT0 来测量状态变化并产生中断


    sei();                     // turn on interrupts


    while(1)

    {

        

    }

}

ISR (PCINT0_vect)

{

    uint8_t changedbits;//设立一个无符号整数来记录寄存器的变化



    changedbits = PINB ^ portbhistory;

    portbhistory = PINB;


    

    if(changedbits & (1 << PINB0))

    {

        

    }

    

    if(changedbits & (1 << PINB1))

    {

        

    }


    if(changedbits & (1 << PINB2))

    {

        

    }


}


结论:

 

PCINT在当年的设计中堪称创新,但和所谓的全端口外部中断依然有一定差距,但相对于按键扫描等方式来说,依然有一部分中断服务的优势


关键字:AVR  INT  外部中断  PCINT 引用地址:AVR的INT外部中断和PCINT中断之区别与使用

上一篇:给你一个单片机,你能造出一个示波器吗?
下一篇:AVR单片机的24C02通信程序

推荐阅读最新更新时间:2024-03-16 15:43

AVR单片机外部中断实例及下载烧录的方法
存储器锁定位(2)保护类型LB模式LB2LB1111没有使能存储器保护特性210在并行和SPI/JTAG串行编程模式中Flash和EEPROM的进 一步编程被禁止,熔丝位被锁定。(1)300在并行和SPI/JTAG串行编程模式中Flash和EEPROM的进一步编程及验证被禁止,锁定位和熔丝位被锁定(1)BLB0模式BLBO2BLB01111SPM 和LPM 对应用区的访问没有限制210不允许SPM 对应用区进行写操作300不允许SPM指令对应用区进行写操作,也不允许运行于Boot Loader 区的LPM指令从应用区读取数据。 若中断向量位于Boot Loader 区,那么执行应用区代码时中断是禁止的。401不允许运行于Boot
[单片机]
<font color='red'>AVR</font>单片机<font color='red'>外部中断</font>实例及下载烧录的方法
Cortex-M3 (NXP LPC1788)之外部中断操作
要使用LPC1788的外部中断,要进行两部分的操作。由于外部中断的管脚采用I/O复用的形式,显然我们首先要对管脚进行配置,使其工作在外部中断输入的模式。其次,我们需要配置中断相关的寄存器包括中断使能以及中断的触发方式等。 由于我们使用的是外部中断0,查阅数据手册,其GPIO管脚为P2_10,为此我们设置IOCON_P2_10寄存器的FUNC字段,设置成001即为EINT0模式。 配置完引脚后,还需要继续配置具体的中断功能。我们需要打开中断使能,设置ISER相应位;还要配置中断的触发方式如电平触发和边沿触发,相关寄存器为EXTMODE和EXTPOLAR;中断触发以后会将外部中断标志寄存器EXTINT相应位置位,这将会向
[单片机]
Cortex-M3 (NXP LPC1788)之<font color='red'>外部中断</font>操作
基于AVR单片机的AT24C01-512eeprom读写程序
针对AT24Cxx系列eeprom存储器,写的时候有越页功能,不用考虑页边界,I2C用软件模拟实现,完善中 #define SDA1() PORTC|=1 PC1 //数据输出1, #define SDA0() PORTC&=~(1 PC1) //数据输出0 #define SDAout() DDRC|=1 PC1 //数据线改为输出 #define SDAin() DDRC&=~(1 PC1) //数据线改为输入 #define RSDA() PINC&(1 PC1) //读数据 #define SCL1() PORTC|=1 PC0 //时钟线输出1 #define SCL0() PORTC&=~(1 PC0) /
[单片机]
STM32踩坑记录(1):编写代码时遇到STM32无法进入外部中断的原因及解决方法
@STM32踩坑记录(1) 使用的软件及硬件: 硬件平台:RoboMaster C板(STM32F407IGT6)、Jlink仿真调试器 软件平台:keil5 使用的是标准库+freertos。 ##遇到问题时的场景 在编写RoboMaster C板上的IMU(BMI088)温度闭环控制程序时 ,需要配置外部中断引脚 INT1_ACCEL_Pin(PC4),然后在中断服务函数中给温度控制任务发通知(也就是信号量),温度控制任务就会读取BMI088数据寄存器中的陀螺仪、加速度、温度的值,将温度的值传递给PID控制器,进行PID闭环控温程序。 ##:遇到的问题: 因为板载的BMI088上有两个外部中断引脚,分别为INT1
[单片机]
STM32踩坑记录(1):编写代码时遇到STM32无法进入<font color='red'>外部中断</font>的原因及解决方法
基于AVR单片机的温度测量系统
1 引言 传统温度测量系统中,一般选用模拟式温度传感器。常用的模拟式温度传感器,其中一个共同特点是输出为模拟量,因此在测量电路中必须经过A/D转换才能成为计算机所能处理的数字量。数字式温度传感器将非电模拟量转换到数字信号这一处理过程的多个环节集成在单芯片上,实现了在测量点将温度值数字化,有效解决了传统温度传感器外围电路复杂,抗干扰能力差的弊病,降低了对系统的要求。 该系统以Atmel公司的ATmega8L单片机为控制中心,温度测量使用DS18B20单总线数字温度传感器,采用1602字符型液晶显示器作为温度值的显示输出。编程使用CodeVision AVR C Compiler编译器,该编译软件自带了使用器件库函数文件,省去了编
[测试测量]
基于<font color='red'>AVR</font>单片机的温度测量系统
基于AVR单片机的列车临时限速手持巡检设备
简介:近年来为提高列车安全运行,列车临时限速技术被应用到铁路系统,手持巡检设备是临时限速系统的重要组成部分。列车临时限速是指铁道线路固定限速之外的、具有时效性的限速。本文介绍了一种基于AVR单片机ATmega1280处理器的列车临时限速手持巡检设备的工作原理及主要功能。该设备通过ZigBee无线通信技术,准确及时获取布置在铁路上的RFID(射频识别)标签信息,并结合GSM网络及时将标签数据传输给后台系统 摘要:近年来为提高列车安全运行,列车临时限速技术被应用到铁路系统,手持巡检设备是临时限速系统的重要组成部分。列车临时限速是指铁道线路固定限速之外的、具有时效性的限速。本文介绍了一种基于AVR单片机ATmega1280处理器的列
[单片机]
基于<font color='red'>AVR</font>单片机的列车临时限速手持巡检设备
AVR 延时程序
1.毫秒级的延时 延时1ms; void delay_1ms(void) { unsigned int i; for(i=1;i (unsigned int)(xtal*143-2);i++) ; } 在上式中,xtal为晶振频率,单位为MHz. 当晶振频率为8M时,延时函数软件仿真的结果为1000.25 s.当晶振频率为4M时,延时函数软件仿真结果为999.5 s. 如果需要准确的1ms延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。 下面的函数可以获得1ms的整数倍的延时时间: void delay(u
[单片机]
Power Int推出单片电源转换IC,具备峰值模式操作
Power Integrations公司日前推出一款全新的电源IC产品系列——PeakSwitch,其峰值与连续功率之比达3:1,是一款具有峰值模式操作的单片电源转换IC,可用于制造高集成及高效率的电源,例如打印机、音频放大器、宽频调制解调器以及直流马达驱动等使用的电源。 当打印机生成一个打印任务时,通常需要短时间内提供很大功率,因此其是PeakSwitch的理想应用。例如,在打印期间连续功率为30W的喷墨打印机,可能需要输出功率瞬时高达80W才可启动送纸马达。PeakSwitch可自动在几毫秒内提高集成于IC内MOSFET的开关频率,来瞬时提供高功率,然后再恢复到连续输出功率的工作方式。此种方法可使变压器、电容以及其他元件的规
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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