历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | 简述AVR单片机中断

2020-02-07 来源:eefocus

关于AVR中断:


系统在正常运行主程序时,如果突然有一个重要的任务要马上处理,那么系统就要保存现在的工作,然后再去处理这个任务,执行这个重要任务完毕以后再返回原来的主程序继续运行,这就是中断。


主程序一旦进入中断服务程序,那么AVR芯片将自动的关闭全局中断,在这个期间不再执行其它的中断请求,直到中断程序结束以后芯片才自动的重新开放全局中断。(注意,在这个期间某些中断请求可能会被丢弃,某些请求会留下中断请求标致,一旦当前的中断执行完毕,这个有中断标致的请求就有可能马上得到响应,如INT0的下降沿触发就会留下中断请求标致,而低电平触发就不会流下中断请求标致)。如果你想在执行中断服务程序时响应另外一个更重要的中断,那么就要在中断服务程序中加入一条打开全局中断的语句。


使用ICC快速建立中断服务程序 程序文件


使用ICCAVR Application Builder进行如下图所示的设置。 可以设置是否使用中断,上升延,下降延,低电平,任意的逻辑电平变化。



将生成的程序进行修改,DDRA = 0x01;PORTD = 0x0C; ,添加MAIN函数,如下


//ICC-AVR application builder : 2006-12-8 17:04:44


// Target : M16


// Crystal: 7.3728Mhz


#include


#include


unsigned int i=0;


void port_init(void)


{


PORTA = 0x00;


DDRA = 0x01;


PORTB = 0x00;


DDRB = 0x00;


PORTC = 0x00; //m103 output only


DDRC = 0x00;


PORTD = 0x0C; //使INT0,INT1对应口上拉电阻有效


DDRD = 0x00; //必须设置INT0,INT1对应口为输入


}


#pragma interrupt_handler int0_isr:2


void int0_isr(void)


{


//external interupt on INT0


i++; //在中断里进行操作


}


#pragma interrupt_handler int1_isr:3


void int1_isr(void)


{


//external interupt on INT1


PORTA = 0x01; //在中断里进行操作


}


//call this routine to initialize all peripherals


void init_devices(void)


{


//stop errant interrupts until set up


CLI(); //disable all interrupts


port_init();


MCUCR = 0x08; //INT1 的下降沿产生异步中断请求,INT0上升延


GICR = 0xC0; //INT0和INT1使能


TIMSK = 0x00; //timer interrupt sources


SEI(); //re-enable interrupts


//all peripherals are now initialized


}


void main(void)


{


init_devices();


while(1) //死循环等待中断


;


}


相关解释


#pragma interrupt_handler int0_isr:2


中断的约定表示方法:int0_isr有一个与之对应的应用程序void int0_isr(void),2为中断向量,值越小,优先级越高,INT0的优先级仅次于复位。


MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用MCU 功能


通用中断控制寄存器- GICR 使能或禁用外部中断请求


使用过程中:为了降低干扰,中断引脚请加上一个4.7K的上拉电阻,还可以根据实际需要,加上电容滤波,防抖动。

推荐阅读

史海拾趣

AMD(超微)公司的发展小趣事
  1. 公司成立与早期发展:AMD(Advanced Micro Devices)公司成立于1969年,由Jerry Sanders在美国加利福尼亚州圣克拉拉创立。最初,AMD致力于生产挑战Intel在x86处理器市场的产品,但起初面临着市场份额不足和技术挑战等问题。然而,随着时间的推移,AMD逐渐在市场上获得了一席之地,并推出了一系列创新产品。

  2. x86处理器市场竞争:AMD在x86处理器市场与Intel展开了激烈的竞争。1991年,AMD推出了第一款x86兼容处理器386DX-40,开始了与Intel的竞争。此后,AMD不断推出更快、更强大的处理器,如K6系列、Athlon系列等,一度取得了一定的市场份额。

  3. ATI收购与图形处理器发展:为了拓展业务,AMD于2006年收购了图形处理器制造商ATI Technologies。这一收购使AMD进入了图形处理器市场,并推出了一系列创新的图形处理器产品,如Radeon系列。AMD通过不断推出高性能、高度集成的图形处理器,赢得了广大用户的青睐。

  4. 全球Foundry战略:为了降低制造成本并提高生产效率,AMD实施了全球Foundry战略。2008年,AMD成立了GlobalFoundries,将自己的制造业务转移给这家独立的半导体制造公司。这一举措使AMD得以专注于设计和研发,提升了公司的竞争力。

  5. 技术创新与新市场拓展:除了在x86处理器和图形处理器市场取得成功外,AMD还不断进行技术创新,拓展新的市场。例如,AMD在数据中心领域推出了EPYC系列服务器处理器,致力于满足云计算和大数据处理的需求。此外,AMD还在游戏主机市场与Sony和Microsoft等公司合作,提供高性能的处理器和图形处理器。

这些故事展示了AMD在其创立以来的发展历程,包括在x86处理器市场的竞争、图形处理器领域的扩展、全球Foundry战略的实施以及在新兴市场的技术创新和市场拓展等方面取得的成就。

Axiohm公司的发展小趣事

随着国内市场的饱和,Axiohm公司开始寻求国际化发展。公司制定了详细的国际化战略,先后在亚洲、欧洲和北美设立了分支机构和研发中心。通过与当地企业的合作,Axiohm成功打入多个国际市场,并根据不同地区的需求进行产品定制。这一战略不仅拓宽了公司的销售渠道,还提升了品牌知名度。

ETAL公司的发展小趣事

在产品质量和技术水平得到认可后,ETAL开始积极拓展市场。公司制定了详细的市场营销策略,通过参加国际电子展会、与知名企业合作等方式提高品牌知名度。同时,ETAL还注重客户服务,建立了完善的售后服务体系,确保客户在使用产品过程中得到及时、专业的支持。这些举措使得ETAL的市场份额不断扩大,品牌影响力逐渐增强。

Andigilog公司的发展小趣事

作为一家有社会责任感的企业,ETAL始终关注社会公益事业。公司积极参与各种慈善活动和社会捐赠项目,为贫困地区的教育事业、环保事业等提供了力所能及的帮助。此外,ETAL还定期组织员工参与志愿服务活动,通过实际行动传递正能量和爱心。这些公益事业不仅提升了公司的社会形象,也增强了员工的凝聚力和向心力。

ASC Capacitors公司的发展小趣事

ASC Capacitors一直注重技术研发和创新。在XXXX年,公司成功研发出了一种新型薄膜电容器,该电容器不仅具有优异的性能,而且寿命长达100,000小时以上。这一技术突破使得ASC Capacitors在电容器市场上取得了重大突破,也奠定了公司在行业内的领先地位。

DAQ Electronics LLC公司的发展小趣事

随着技术的不断成熟和产品线的丰富,DAQ Electronics LLC公司开始积极拓展市场。公司通过与科研机构、高校以及企业建立合作关系,将数据采集技术应用于更多领域。在科学研究领域,DAQ Electronics LLC公司的数据采集设备为实验数据的准确获取提供了有力保障;在工业生产领域,其设备则帮助企业实现了对生产过程的实时监控和数据分析。

问答坊 | AI 解惑

有效应对多频手机中的天线设计问题

现在手机中的射频信号通道越来越拥挤。蜂窝电话已经从双频向三频甚至四频快速发展。这些复杂手机还需要处理来自外围无线设备的各种信号,如蓝牙、Wi-Fi和GPS。而随着WiMAX和LTE(4G)的加入,这种复杂度将越来越高。在移动电话中,天线开关控制着天线 ...…

查看全部问答>

DDraw怎样获取显存大小?

我用这个方法,但是好像获取的大小有问题,不知道这个方法是不是正确的方法,还没有更好的办法? DDCAPS   ddcaps;      ddcaps.dwSize   =   sizeof   DDCAPS;    lpdd ...…

查看全部问答>

大型ARM+linux+android嵌入式技术专题公益讲座

华清远见武汉华嵌中心将于2010年4月24日下午1:00-5:00在武汉大学联手ARM中国公司,开展“基于ARM平台的嵌入式系统设计专题讲座”。 详情请点击: http://www.embedhq.org/html/mianfei/2010/0408/382.html…

查看全部问答>

是不是哪里错了?总提示设备没有连接

                 LPCWSTR strDrvName=L\"\";         strDrvName=TEXT(\"NDS0:\");         HANDLE hHandle;         hHandle ...…

查看全部问答>

请教误码仪的问题~~

请问有人做过误码仪吗?最近在做一个误码仪,有个问题卡在那边,问题是要我产生误码,之后就是让我检测误码,码型为NRZ,RZ,AMI,HDB3码,关于NRZ,RZ码我就不知道了,这种码还能判断误码?…

查看全部问答>

内存扩容问题,急???

128M扩到512M,我用的是uboot+NK.nb0,uboot已经改好ram初始化部分,没有开mmu,在uboot下测试512内存读写正常,wince改了config.bib中ram大小,oemtable也改了内存映射,但是现在内核跑到oeminit跑完就死了,不好调试。试着用oemgetextensiondram( ...…

查看全部问答>

渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临!

渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 详情请参见 www.neworigin.net 同时欢迎大家与我们的609期学员交流!这期学员已与2月11日毕业 ...…

查看全部问答>

【连载】【ALIENTEK MiniSTM32 开发板】STM32不完全手册-内部温度传感器实验(14)

  开发板购买地址:http://shop62103354.taobao.com [ 本帖最后由 正点原子 于 2010-9-7 09:45 编辑 ]…

查看全部问答>

wire型和reg型的一点小疑惑

今天在看书时发现一点疑惑,问题大致是这样的: 一个电路网络,要对其中一个2输入与门的输出(定义为tmp吧,其实此处并不存在端口或变量)进行一些赋值操作,。在Verilog编程中按说是应该把其定义为wire型变量,可是今天看的一个例子却定义成了reg ...…

查看全部问答>