这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » iar,int0 用iar编程时,用了int0。在编译时警告中断被重复定义

共2条 1/1 1 跳转至

iar,int0 用iar编程时,用了int0。在编译时警告中断被重复定义

院士
2006-09-17 18:14:16     打赏
iar,int0 用iar编程时,用了int0。在编译时警告中断被重复定义



关键词: 编程     用了     编译     警告     中断     重复     定义    

院士
2006-12-22 22:43:00     打赏
2楼
问 用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例子中改来的)


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]