共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取磁力计iis2mdc被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取LPS22HH气压、温度被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取STTS751温度被打赏¥17元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
我要赚赏金
