4596|12

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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

#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的值   但是烧录进去发现一直进不去中断是什么原因呢

最新回复

void Inti_time0() { CLI(); TCCR0 = 0x06;//采用256分频工作方式 TCNT0 = 0x82;//每8ms溢出 TIMSK =0x01;//允许定时0使能溢出 SEI();;//开启总中断 } 这样试试看  详情 回复 发表于 2013-11-9 12:37
点赞 关注
 

回复
举报

1万

帖子

139

TA的资源

版主

沙发
 
检查中断使能是否已开启,如果软件没问题,给出具体的硬件电路。

点评

在avr gcc 下面运行 软仿发现TIMSK不能赋值进去 这是为什么呢?  详情 回复 发表于 2013-11-8 08:21
中断已经开启了 软件部应该存在问题才对 上次写其他的程序也是用的AVR icc 硬件电路也没出现问题 其他的定时器能够正常工作.... 就是想不明白为什么进不去定时器0  详情 回复 发表于 2013-11-8 08:19
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发chunyang 的帖子

中断已经开启了 软件部应该存在问题才对  上次写其他的程序也是用的AVR icc    硬件电路也没出现问题  其他的定时器能够正常工作....   就是想不明白为什么进不去定时器0
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发chunyang 的帖子

在avr gcc 下面运行 软仿发现TIMSK不能赋值进去  这是为什么呢?
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

5
 
PORTA=~num;这句话是什么意思

TCCR0 = 0x06;是设置为时钟由T0引脚输入,下降沿触发,这样定时器根本没工作,肯定不会产生中断

如果设置成256分频的话应该是0x04

我是看的ATmega16的寄存器,ATmega128应该一样吧

[ 本帖最后由 wudayongnb 于 2013-11-8 09:18 编辑 ]

点评

不是的 TCCR0=0x06; 是采用256分频的普通工作方式 POTRA=~num; 这是个将num取反输出 这样点亮的led可以对应的bcd编码(即哪个为1就哪盏灯点亮)  详情 回复 发表于 2013-11-8 09:23
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼wudayongnb 的帖子

不是的   TCCR0=0x06;  是采用256分频的普通工作方式
   POTRA=~num;  这是个将num取反输出  这样点亮的led可以对应的bcd编码(即哪个为1就哪盏灯点亮)

点评

你这么写试试 TCCR0 = 0x00; TCNT0 = 0x82;//每8ms溢出 TCCR0 = 0x06;//采用256分频工作方式 TIMSK |= BIT(0);//允许定时0使能溢出 SREG|= BIT(7);//开启总中断  详情 回复 发表于 2013-11-8 09:53
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

7
 

回复 6楼le455622864 的帖子

你这么写试试
TCCR0 = 0x00;
TCNT0 = 0x82;//每8ms溢出
TCCR0 = 0x06;//采用256分频工作方式
TIMSK |= BIT(0);//允许定时0使能溢出
SREG|= BIT(7);//开启总中断

点评

改换顺序也没用。。。。  详情 回复 发表于 2013-11-8 21:15
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

8
 
将cnt定义为全局变量,
然后参考http://wenku.baidu.com/link?url= ... uTi5CQ-1YOcdoNzZZS3
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

9
 
将cnt改为全局变量试试,然后去百度文库搜“ATMAGE64定时器中断例程”的文章参考一下吧!

[ 本帖最后由 abu315 于 2013-11-8 17:08 编辑 ]

点评

num用静态变量和全局变量在这里没什么区别 不过换了还是没用  详情 回复 发表于 2013-11-8 21:14
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼abu315 的帖子

num用静态变量和全局变量在这里没什么区别  不过换了还是没用
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 7楼wudayongnb 的帖子

改换顺序也没用。。。。
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

12
 
void Inti_time0()
{
CLI();
TCCR0 = 0x06;//采用256分频工作方式
TCNT0 = 0x82;//每8ms溢出
TIMSK =0x01;//允许定时0使能溢出
SEI();;//开启总中断
}
这样试试看
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

13
 

虽然出来了依旧有问题

采用gcc编译
#include
#include
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)
        {
        ;
        }
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表