avr 单片机 atmega16 编写程序 用中断来控制 按下一个按钮 一个数码管加1

#include<mega16.h>intshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};inttim... #include <mega16.h>
int shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int time=0;

interrupt [EXT_INT0] void ext_int0_isr(void)
{ time++;

}

void main(void)
{ DDRB=0XFF;

GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
#asm("sei")

while (1)
{
PORTB=shu[time];

};
}
这程序 无法计数 不知道怎么搞的 求大侠指点
展开
 我来答
valkyrie1107
2011-11-25 · TA获得超过479个赞
知道答主
回答量:181
采纳率:100%
帮助的人:174万
展开全部
你用的是icc还是gcc软件编的程序,icc中断这样写#pragma interrupt ****:数字
******代表子程序名 这是声明中断子程序,下边还要在按一般子程序写法写子程序功能如void *****(){} 数字是中断号,每种中断号的数字不一样(如外部中断和定时中断),要看你是用的单片机手册,中断向量一节
追问
我用的是 CodeVisionAVR C Compiler 编写的
追答
没用过 按这个写试试,不同的软件写c程序都会有点差别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Small_tiny
2011-11-27 · 超过28用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:76万
展开全部
要么看门狗开了,不断复位,要么是中断没设置好(下降沿中断)
更多追问追答
追问
我是用的 下降沿中断的 是向导来做的
追答
我仔细看了一下,初始化是对的,我没用过AVR,但我知道很多单片机的C编译对这个程序是不能正常工作的,原因是你定义的数据类型是16位的,而很多编译器是用高位存储低位数据,用低位存储高位数据,如你的整型time申请了两个空间分别为a和a+1,当time=1时,低位地址a为0,高位地址a+1为1。当你申请数组int shu[]时,长度没指定,但已经初始化为10,所以编译器会编译为最小的类型char ,那么把shu[time]就会把time的低位地址放到偏移量,即变成shu[0].
楼主请把你的现象说一下,以便容易分析,比如说上电是什么现象,按了按键是什么现象,如果按了按键无响应,请继续按,超过255次,看有没有变化,或者把数据类型改为unsigned char 再试,如果还不行,那么请检查你的电路
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昭姑F
2012-05-24
知道答主
回答量:51
采纳率:0%
帮助的人:2.5万
展开全部
全局中断没有设置:在GIFR=0X40;后面写:SREG|=0X80;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-11-25
展开全部
中断的寄存器设置有问题,仔细看看资料
追问
我是用向导来写的中断 因该不会错吧,那你觉得怎么写 求大虾指点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友44eae41d9d7
2011-11-25
知道答主
回答量:6
采纳率:0%
帮助的人:3.6万
展开全部
中断函数不是这么写的
追问
我用的向导写的中断 因该不会错吧
追答
你用的什么编译的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式