关于ICC AVR中断的问题,程序如下 10
#include<iom16v.h>#include<macros.h>#defineuintunsignedint#defineucharunsignedchar#pr...
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler interp:2
uchar count;
//*********延时函数***********
void delay()
{
unsigned int i,j;
for(i=70;i>0;i--)
{
for(j=1000;j>0;j--);
}
}
//*********外部中断0子程序***********
void interp()
{
uchar i;
delay();
i=PINC;
i=i&0x80; //read PD7
if(i==0) //there is keypress
{
count++;
if(count>=10)
count=0;
}
}
//***********初始化***************
void init0()
{
GICR==0X40; //enable
MCUCR=0x02; //INT0 down
GIFR=0X40; //remove date
}
//***********show*************
uchar decode(uchar k)
{
uchar showcode;
switch(k)
{
case 0:showcode=0x3f;
break;
case 1:showcode=0x06;
break;
case 2:showcode=0x5b;
break;
case 3:showcode=0x4f;
break;
case 4:showcode=0x66;
break;
case 5:showcode=0x6d;
break;
case 6:showcode=0x7d;
break;
case 7:showcode=0x07;
break;
case 8:showcode=0x7f;
break;
case 9:showcode=0x6f;
break;
}
return (showcode);
}
//***********main*************
void main()
{
SREG=0X80;
DDRA=0XFF;
DDRC=0X00;
PORTC=0XFF;
init0();
count=0;
while(1)
{
PORTA=decode(count);
}
} 展开
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler interp:2
uchar count;
//*********延时函数***********
void delay()
{
unsigned int i,j;
for(i=70;i>0;i--)
{
for(j=1000;j>0;j--);
}
}
//*********外部中断0子程序***********
void interp()
{
uchar i;
delay();
i=PINC;
i=i&0x80; //read PD7
if(i==0) //there is keypress
{
count++;
if(count>=10)
count=0;
}
}
//***********初始化***************
void init0()
{
GICR==0X40; //enable
MCUCR=0x02; //INT0 down
GIFR=0X40; //remove date
}
//***********show*************
uchar decode(uchar k)
{
uchar showcode;
switch(k)
{
case 0:showcode=0x3f;
break;
case 1:showcode=0x06;
break;
case 2:showcode=0x5b;
break;
case 3:showcode=0x4f;
break;
case 4:showcode=0x66;
break;
case 5:showcode=0x6d;
break;
case 6:showcode=0x7d;
break;
case 7:showcode=0x07;
break;
case 8:showcode=0x7f;
break;
case 9:showcode=0x6f;
break;
}
return (showcode);
}
//***********main*************
void main()
{
SREG=0X80;
DDRA=0XFF;
DDRC=0X00;
PORTC=0XFF;
init0();
count=0;
while(1)
{
PORTA=decode(count);
}
} 展开
展开全部
i=PINC;
i=i&0x80; //read PD7
看你的开关是接在那里的,PINC读的是PC不是PD;
i=i&0x80; //read PD7
看你的开关是接在那里的,PINC读的是PC不是PD;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中断中每次进去后只会加一,然后回到主程序就显示了,所以你要的结果不会出现,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
然后呢?你的问题是什么?
追问
用protues仿真没动静呀,只是显示我的count初值0,按键根本就没反应
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询