共2条
1/1 1 跳转至页
iar,int0 用iar编程时,用了int0。在编译时警告中断被重复定义
问
用iar编程时,用了int0。在编译时警告中断被重复定义。有一个“?REST"也定义了int0。请问这是程序自己的问题,还是iar的原因?如何解决
答 1:
中断号有错了吧
答 2:
把程序贴出来看看
答 3:
INT0应该是vector=0x04和AVR中断向量表里刚好是2倍关系
答 4:
和AVR中断向量表是2倍关系?怎么没在iaq文档看到?请问是哪里说的?能否能详细讲一下。
这是一个读pc键盘的程序,但是好像不太行。不停按键,等很长时间才进入中断,不过能把正确的键值读出。请大家看看。
#include <iom162.h>
#include <stdio.h>
#define BUFF_SIZE 10
unsigned char edge;
char bitcount;// 0 = neg. 1 = pos.
unsigned char kb_buffer[BUFF_SIZE];
unsigned char *inpt, *outpt;
unsigned char buffcnt;
char data;// Holds the received sCAN code
void main(void)
{
DDRD=0XFF;
PORTD=0XFF;
DDRD=0X00;
inpt = kb_buffer;// Initialize buffer
outpt = kb_buffer;
buffcnt = 0;
MCUCR = 2;// INT0 interrupt on falling edge
SREG=SREG|0X80;
GICR=GICR|0X40 ;
edge = 0; // 0 = falling edge 1 = rising edge
bitcount = 11;
while (1);
}
#pragma vector=0x004 以前是0x002,编译就报警中断被重复定义
__interrupt void INT0_interrupt(void)
{
if (!edge) // Routine entered at falling edge
{
if(bitcount < 11 && bitcount > 2)// Bit 3 to 10 is data. Parity bit,
{ // start and stop bits are ignored.
data = (data >> 1);
if(PIND & 16)
data = data | 0x80;// Store a '1'
}
MCUCR = 3;// Set interrupt on rising edge
edge = 1;
} else { // Routine entered at rising edge
MCUCR = 2;// Set interrupt on falling edge
edge = 0;
if(--bitcount == 0)// All bits received
{kb_buffer[0]=data;/*decode(data);*/
bitcount = 11;
}
}
}
答 5: 谢谢帮助 答 6: 请教两个问题:
1:#pragma vector=0x002
__interrupt void INT0_interrupt(void) 这样编译后,报警有一个“?REST"也定义了0x002。
有人说是和AVR中断向量表里刚好是2倍关系 ?即iaq中,int0的中断向量是vector=0x04。请问是否是这样。
2:上面的程序是一个读pc键盘的程序,有问题。不停按键,要等很长时间才能把正确的键值读出。请看看。(从atmel例子中改来的)
这是一个读pc键盘的程序,但是好像不太行。不停按键,等很长时间才进入中断,不过能把正确的键值读出。请大家看看。
#include <iom162.h>
#include <stdio.h>
#define BUFF_SIZE 10
unsigned char edge;
char bitcount;// 0 = neg. 1 = pos.
unsigned char kb_buffer[BUFF_SIZE];
unsigned char *inpt, *outpt;
unsigned char buffcnt;
char data;// Holds the received sCAN code
void main(void)
{
DDRD=0XFF;
PORTD=0XFF;
DDRD=0X00;
inpt = kb_buffer;// Initialize buffer
outpt = kb_buffer;
buffcnt = 0;
MCUCR = 2;// INT0 interrupt on falling edge
SREG=SREG|0X80;
GICR=GICR|0X40 ;
edge = 0; // 0 = falling edge 1 = rising edge
bitcount = 11;
while (1);
}
#pragma vector=0x004 以前是0x002,编译就报警中断被重复定义
__interrupt void INT0_interrupt(void)
{
if (!edge) // Routine entered at falling edge
{
if(bitcount < 11 && bitcount > 2)// Bit 3 to 10 is data. Parity bit,
{ // start and stop bits are ignored.
data = (data >> 1);
if(PIND & 16)
data = data | 0x80;// Store a '1'
}
MCUCR = 3;// Set interrupt on rising edge
edge = 1;
} else { // Routine entered at rising edge
MCUCR = 2;// Set interrupt on falling edge
edge = 0;
if(--bitcount == 0)// All bits received
{kb_buffer[0]=data;/*decode(data);*/
bitcount = 11;
}
}
}
答 5: 谢谢帮助 答 6: 请教两个问题:
1:#pragma vector=0x002
__interrupt void INT0_interrupt(void) 这样编译后,报警有一个“?REST"也定义了0x002。
有人说是和AVR中断向量表里刚好是2倍关系 ?即iaq中,int0的中断向量是vector=0x04。请问是否是这样。
2:上面的程序是一个读pc键盘的程序,有问题。不停按键,要等很长时间才能把正确的键值读出。请看看。(从atmel例子中改来的)
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |