avr mage128定时器0遇上很蛋疼的事情 希望大虾能指点一二 感激不尽

2019-03-24 20:36发布

#include<iom128v.h>
#include<macros.h>
#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的值   但是烧录进去发现一直进不去中断是什么原因呢 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
abu315
1楼-- · 2019-03-25 16:33
将cnt定义为全局变量,
然后参考http://wenku.baidu.com/link?url= ... uTi5CQ-1YOcdoNzZZS3
abu315
2楼-- · 2019-03-25 16:47
将cnt改为全局变量试试,然后去百度文库搜“ATMAGE64定时器中断例程”的文章参考一下吧!

[ 本帖最后由 abu315 于 2013-11-8 17:08 编辑 ]
le455622864
3楼-- · 2019-03-25 20:56
 精彩回答 2  元偷偷看……
le455622864
4楼-- · 2019-03-26 00:24
改换顺序也没用。。。。
abu315
5楼-- · 2019-03-26 02:55
void Inti_time0()
{
CLI();
TCCR0 = 0x06;//采用256分频工作方式
TCNT0 = 0x82;//每8ms溢出
TIMSK =0x01;//允许定时0使能溢出
SEI();;//开启总中断
}
这样试试看
le455622864
6楼-- · 2019-03-26 07:07
采用gcc编译
#include<avr/io.h>
#include<avr/interrupt.h>
unsigned char cnt;
void INTI_time0(void)
{
        TIMSK|=0x01;//允许定时器0溢出中断
        TCCR0=0x06;//设置256分频
        TCNT0=0x82;//8ms溢出时长
       
}

ISR(TIMER0_OVF_vect)
{
        static unsigned char num=0;
        TCNT0=0x82;//8ms溢出时长
        num++;
        if(num>=125)//一秒时长
        {
                num=0;
                cnt++;
        }
        PORTA=~cnt;//此处放在外部死循环是  a管口仍然不能输出电平变化
}
void main()
{
        INTI_time0();
        DDRA=0xff;//设置a管口为输出方式
        sei();
        while(1)
        {
        ;
        }
}

一周热门 更多>