打印
[Atmel]

ATmega328p Xplained Mini (3) 按键中断

[复制链接]
1631|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega328p Xplained Mini上有一个按键和一个LED,具体在哪个管脚如下图所示:




而要用中断来控制LED,必须了解以下寄存器:

EICRA - 外部中断控制寄存器A
比特3,2 - 外部中断1控制
ISC11 ISC10 Description
0 0 The low level of INT1 generates an interrupt request.
0 1 Any logical change on INT1 generates an interrupt request.
1 0 The falling edge of INT1 generates an interrupt request.
1 1 The rising edge of INT1 generates an interrupt request.
比特1,2 - 外部中断0控制
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.
0 1 Any logical change on INT0 generates an interrupt request.
1 0 The falling edge of INT0 generates an interrupt request.
1 1 The rising edge of INT0 generates an interrupt request.
由于开发板是按键接高电平的,所以我选下降沿触发。

EIMSK - 外部中断屏蔽寄存器
比特1:外部中断请求1允许
比特2:外部中断请求2允许

PCICR - 管脚改变中断控制寄存器
比特2:管脚改变中断允许寄存器2  23-16脚
比特1: 管脚改变中断允许寄存器1  14-8脚
比特0:管脚改变中断允许寄存器0  7-0脚


PCMSK0 - 管脚改变屏蔽寄存器0
PCINT7 到 PCINT0哪个管脚中断就设为1


具体程序如下:


/*
* GccApplication3.c
*
* Created: 2015/1/12 星期一 19:51:48
*  Author: Administrator
*/

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>

void PCINT0_vect(void)
{
    PORTB |= 0x20;
        _delay_ms(1000);
}

int main(void)
{
    PCICR = 0x01;
    PCMSK0 = 0x80;
    EICRA = 0x0A;
    EIMSK = 0x03;
    PCICR = 0x01;
    PCMSK0 = 0x80;
       
        DDRB = 0x20;
       
        SREG |= 0x80;
       
       
        while(1)
    {
        //TODO:: Please write your application code
    }
}





当我按下按键时,LED亮了,正明运行正常。


相关帖子

沙发
JY-DX-JY| | 2015-1-13 08:47 | 只看该作者
版主肯定ATMEL的片子用的不错。

使用特权

评论回复
板凳
huangxz| | 2015-1-13 09:34 | 只看该作者
这个是AVR8的,还是AVR32的?

使用特权

评论回复
地板
ddllxxrr|  楼主 | 2015-1-13 11:17 | 只看该作者
huangxz 发表于 2015-1-13 09:34
这个是AVR8的,还是AVR32的?

AVR8的, 现在叫新AVR8好像

使用特权

评论回复
5
123654789| | 2015-1-13 11:28 | 只看该作者
AVR系列
频率不够STM32F103高
RAM不够STM32F103大
ROM不够STM32F103大
价格不够STM32F103便宜
就限制了他的发展了

使用特权

评论回复
6
ddllxxrr|  楼主 | 2015-1-13 14:05 | 只看该作者
123654789 发表于 2015-1-13 11:28
AVR系列
频率不够STM32F103高
RAM不够STM32F103大

呵呵,有些东东是看别的参数,我司用的无线发射模块就是AVR的MEGA8的,根据各种实际需要吧。

使用特权

评论回复
7
123654789| | 2015-1-13 14:12 | 只看该作者
ddllxxrr 发表于 2015-1-13 14:05
呵呵,有些东东是看别的参数,我司用的无线发射模块就是AVR的MEGA8的,根据各种实际需要吧。
...

使用MEGA8能做的事情,还不如使用STC12C5A08单片机

使用特权

评论回复
8
123654789| | 2015-1-13 14:15 | 只看该作者
本来就是想找高速大容量的片子

使用特权

评论回复
9
bowei181| | 2015-1-13 14:22 | 只看该作者
成本合适吗

使用特权

评论回复
10
huangxz| | 2015-1-13 15:33 | 只看该作者
123654789 发表于 2015-1-13 14:12
使用MEGA8能做的事情,还不如使用STC12C5A08单片机

stc可靠性不敢恭维,avr的强壮是见识过的。

使用特权

评论回复
11
dgjydq| | 2015-1-13 20:23 | 只看该作者
版主大人,你给ATMEL公司提些建议吧,将芯片的文档汉化,这样就不用你解说了

使用特权

评论回复
12
ddllxxrr|  楼主 | 2015-1-13 20:37 | 只看该作者
本帖最后由 ddllxxrr 于 2015-1-13 20:43 编辑
dgjydq 发表于 2015-1-13 20:23
版主大人,你给ATMEL公司提些建议吧,将芯片的文档汉化,这样就不用你解说了 ...

呵呵,是啊。不用我说,Atmel清楚的很。我想会解决的!但楼上提出来了,我有机会就反应一下哈!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6949

帖子

66

粉丝