共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
