#include
#include
#define uint unsigned int
#define uchar unsigned char
uint num;
void Inti_time0()
{
TIMSK |= BIT(0);//允许定时0使能溢出
TCCR0 = 0x06;//采用256分频工作方式
TCNT0 = 0x82;//每8ms溢出
SREG|= BIT(7);//开启总中断
}
#pragma interrupt_handler time0:17
void time0()
{
static uchar cnt=0;
cnt++;
TCNT0=0x82;//每8ms溢出
if(cnt>=125)
{
num++;
cnt=0;
}
}
void main()
{
DDRA=0xff;//a管口输出
PORTA=0xff;
Inti_time0();
while(1){
PORTA=~num;}
}
a管口接有二极管 所以想让它进入中断显示num的值 但是烧录进去发现一直进不去中断是什么原因呢
检查中断使能是否已开启,如果软件没问题,给出具体的硬件电路。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
回复 沙发chunyang 的帖子
中断已经开启了 软件部应该存在问题才对 上次写其他的程序也是用的AVR icc 硬件电路也没出现问题 其他的定时器能够正常工作.... 就是想不明白为什么进不去定时器0
回复 沙发chunyang 的帖子
在avr gcc 下面运行 软仿发现TIMSK不能赋值进去 这是为什么呢?
PORTA=~num;这句话是什么意思
TCCR0 = 0x06;是设置为时钟由T0引脚输入,下降沿触发,这样定时器根本没工作,肯定不会产生中断
如果设置成256分频的话应该是0x04
我是看的ATmega16的寄存器,ATmega128应该一样吧
[
本帖最后由 wudayongnb 于 2013-11-8 09:18 编辑 ]
回复 5楼wudayongnb 的帖子
不是的 TCCR0=0x06; 是采用256分频的普通工作方式
POTRA=~num; 这是个将num取反输出 这样点亮的led可以对应的bcd编码(即哪个为1就哪盏灯点亮)
回复 6楼le455622864 的帖子
你这么写试试
TCCR0 = 0x00;
TCNT0 = 0x82;//每8ms溢出
TCCR0 = 0x06;//采用256分频工作方式
TIMSK |= BIT(0);//允许定时0使能溢出
SREG|= BIT(7);//开启总中断
将cnt改为全局变量试试,然后去百度文库搜“ATMAGE64定时器中断例程”的文章参考一下吧!
[ 本帖最后由 abu315 于 2013-11-8 17:08 编辑 ]
回复 9楼abu315 的帖子
num用静态变量和全局变量在这里没什么区别 不过换了还是没用
回复 7楼wudayongnb 的帖子
改换顺序也没用。。。。
void Inti_time0()
{
CLI();
TCCR0 = 0x06;//采用256分频工作方式
TCNT0 = 0x82;//每8ms溢出
TIMSK =0x01;//允许定时0使能溢出
SEI();;//开启总中断
}
这样试试看