Atmega48电平变化中断总结.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Atmega48电平变化中断总结

Atmega48电平变化中断 寄存器说明 外部电平变化中断通过引脚PCINT23..0 触发。只要使能了中断,即使引脚PCINT23..0 配置为输出,只要电平发生了合适的变化,中断也会触发。这个特点可以用来产生软件中断。 只要使能, PCINT23..16 引脚上的电平变化将触发外部中断PCI2(中断服务程序中,中断向量名用PCINT2), PCINT14..8 引脚上的电平变化将触发外部中断PCI1(中断服务程序中,中断向量名用PCINT1), PCINT7..0 将触发外部中断PCI0(中断服务程序中,中断向量名用PCINT0)。PCMSK2、PCMSK1 与PCMSK0 寄存器则用来检测是哪个引脚上的电平发 生了变化。 Atmega48引脚电平变化中断控制寄存器——PCICR,例程中PCICR|=2,即PCIE1=1,段使能:PCIE1=1,使能PCINT8-PCINT16外部电平变化中断。 B7 B6 B5 B4 B3 B2 B1 B0 — — — — — PCIE2 PCIE1 PCIE0 位PCIE2、PCIE1和PCIE0分别为引脚电平变化中断使能2、引脚电平变化中断使能1和引脚电平变化中断使能0。当SREG的位I置1,且PCIE2、PCIE1、PCIE0置1,使能的PCINT23~PCINT16、PCINT14~PCINT8、PCINT7~0引脚上的任何电平变化都会引起中断。相应的引脚电平变化中断请求分别由PCI2、PCI1 、PCI0中断向量执行(中断服务程序中,中断向量名用PCINT2、PCINT1、PCINT0)。PCINT23~PCINT16、PCINT14~PCINT8、PCINT7~0引脚可以通过PCMSK2、PCMSK1、PCMSK0寄存器单独使能。 Atmega48引脚电平变化中断标志寄存器——PCIFR B7 B6 B5 B4 B3 B2 B1 B0 — — — — — PCIF2 PCIF1 PCIF0 位PCIF2、PCIF1和PCIF0分别为引脚电平变化中断标志2、标志1和标志0。当引脚PCINT23~PCINT16、PCINT14~PCINT8、PCINT7~0上电平变化触发中断请求时,PCIF2、PCIF1、PCIF0置1。如果SREG寄存器中的I位与PCICR寄存器中的位PCIE2、PCIE1、PCIE0置1,MCU将会跳转到相应的中断向量。当中断程序执行时,该标志被清除。该位也可通过写逻辑1来清除。 Atmega48引脚电平变化屏蔽寄存器——PCMSK2、PCMSK1、PCMSK0,例程中PCMSK1|=1,位使能: PCMSK1|=1,使能PCINT8,或写为PCMSK1=(1PCINT8); 位 B7 B6 B5 B4 B3 B2 B1 B0 PCMSK2 PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16 PCMSK1 — PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8 PCMSK0 PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK2中的每一位决定PCINT23~16中相应的I/O引脚电平变化中断是否使能,如果PCINT23~16与PCICR上的PCIE2位置位,则相应的引脚电平变化中断使能;如果PCINT23~16清0,则相应的引脚电平变化中断禁用。同理PCMSK1中的每一位决定PCINT14~8中相应的I/O引脚电平变化中断是否使能,PCMSK0中的每一位决定PCINT7~0中相应的I/O引脚电平变化中断是否使能。 实现功能说明 实现电平变化中断,需以下几个环节(以PC0/PCINT8引脚为例): 开相应中断 先使能相应段:PCICR的第1位,即PCIE1置1,使能PCINT14~PCINT8 再使能相应位:PCMSK1的第1位,即PCINT8置1,使能PCINT8 再开全局中断:SREG的第I位置1,使能全局中断 设置相应引脚为输入,上拉电阻有效 在主程序中进行如下设置: DDRC=0xfc;//PC0设置为输入 PORTC=0x03;PC0内部上拉有效 编写中断服务程序 中断不是C语言的一部分,中断的实现是由编译器实现的。所以,不同版本的编译器的中断的写法有很大的不同;即便同样是WinAVR,不同版本中的中断向量都是略有区别的! 如果使用GCC-AVR的中断操作,必须包括头文件interrupt.h,即: #include avr/interrupt.h进一步说明:WinAVR

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档