2019-03-24 20:17发布
ff123 发表于 2015-7-7 15:52 对的,改过来了还是不能进入中断。我用软件模拟的办法,初始化里面先给PB2口一个高电平,然后给一个低电 ...
dcexpert 发表于 2015-7-7 09:37 PCMSK0=0X40; 对应的是PCINT6,你要设置 PCMSK0=0X04;才是对应PB2/PCINT2吧。
最多设置5个标签!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #define myPIN PB2
- #define LED PC0
- void init()
- {
- // set PB2 pullup
- PORTB |= (1<<myPIN);
- DDRB &= ~(1<<myPIN);
- DDRC |= (1<<LED);
- PCMSK0 |= (1<<myPIN);
- PCICR |= (1<<PCIE0);
- sei();
- }
- int main()
- {
- init();
- while(1)
- {
- }
- return 0;
- }
- ISR(PCINT0_vect)
- {
- if((PINB & (1<<myPIN)) == 0)
- {
- PORTC ^= (1<<LED);
- }
- }
复制代码proteus效果如下:
晚上我用proteus给你写一个例程参考一下。
对应的是PCINT6,你要设置 PCMSK0=0X04;才是对应PB2/PCINT2吧。
#define mPIN1 PB2
PORTB |= (1<<mPIN1);
DDRB &= ~(1<<mPIN1);
PCMSK0 |= (1<<mPIN1);
这样需要换成PORTB的其他IO时,只要改前面的define就可以了,不用后面程序中的数字,也就不容易出错了。
对的,改过来了还是不能进入中断。我用软件模拟的办法,初始化里面先给PB2口一个高电平,然后给一个低电平。在中断里面写入EEPROM,但是进步了不知道为什么
一周热门 更多>