打印
[AVR单片机]

atmega64的定时器

[复制链接]
3504|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cxy19830603|  楼主 | 2013-4-10 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
#include <avr/io.h>
#include <macros.h>

volatile uint num;
/*--------------------------------定时器0初始化--------------------------------------*/
void timer0_init()  
  {
         SREG = 0x80;          //使能全局中断
         TIMSK=0x01;          //T0溢出中断禁止
         TCCR0=0x07;         // T/C0工作于普通模式,1024分频,定时器频率 = 8M/1024 =7812.5Hz
         TCNT0 = 61;          //定时初值设置,定时时间 =(256-61)/7812.5=25ms
  }
/*--------------------------------定时器0中断函数------------------------------------*/
#pragma interrupt_handler timer0_isr:iv_timer0_ovf
void timer0_isr(void)
  {
     TCNT0=61;
     num++;
  }

int main(void)                                                                  
{  
        init();          //端口初始化
        timer0_init();   
        while(1)
        {
            if(num>400)
        display(1);   //数码管显示
        if(num<=400)
        display(0);  //数码管显示
    }          
}

问题是:数码管只显示0(显示不稳定,高频闪),如果中断程序执行,num总有大于400的时候,可为什么就是检测不到。在线等,求高手帮忙。
另外:端口初始化等都没有问题,是因为所有的显示都正常(此处显示简化,只是说明问题),只是想用定时器定时10秒,让他自动切换显示另一个数,就出问题了。
沙发
qin552011373| | 2013-4-10 22:34 | 只看该作者
数码管只显示0(显示不稳定,高频闪)你想过为什么是高频闪?降低一下定时器频率再看看现象  

使用特权

评论回复
板凳
青岛整流器| | 2013-4-10 22:56 | 只看该作者
当然只显示0了。我不见得说的对,首先说一下自己的疑惑。1.unit应该不是标准的书写方式,unsigned int(反正以前在keil中需要define一下好像)2 你定义的是 unit也就是说一个8位的数据最大255,怎么会到400,所以一直显示0也是对的。
3最好num清零一下,要不然一直让它加下去直到溢出好像不太好

使用特权

评论回复
地板
yklstudent| | 2013-4-10 23:13 | 只看该作者
GCC的中断函数是这样写的?
好奇怪的写法 ICC与GCC的结合体
楼主创造出新的编译器了 太牛B了

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
cxy19830603 + 1 很给力!
5
cxy19830603|  楼主 | 2013-4-11 09:11 | 只看该作者
qin552011373 发表于 2013-4-10 22:34
数码管只显示0(显示不稳定,高频闪)你想过为什么是高频闪?降低一下定时器频率再看看现象   ...

频率最后降低到0.625ms也是这样的情况

使用特权

评论回复
6
cxy19830603|  楼主 | 2013-4-11 09:15 | 只看该作者
青岛整流器 发表于 2013-4-10 22:56
当然只显示0了。我不见得说的对,首先说一下自己的疑惑。1.unit应该不是标准的书写方式,unsigned int(反 ...

先谢谢你!因为程序很长,所以简化了一下,只想说明问题,其实unit是我在此处写错了,源代码中#define uint    unsigned int   //数据类型说明;然后volatile uint  num;最后一个num的清零,操作过了,问题同在。

使用特权

评论回复
7
cxy19830603|  楼主 | 2013-4-11 09:19 | 只看该作者
yklstudent 发表于 2013-4-10 23:13
GCC的中断函数是这样写的?
好奇怪的写法 ICC与GCC的结合体
楼主创造出新的编译器了 太牛B了 ...

首先谢谢你,您说的这个问题还真没注意到,也许就是这个原因吧。我刚入门,中断这一块也是参考别人的,然后根据资料照猫画虎,我用的是avr GCC,还希望您指教,谢谢了

使用特权

评论回复
8
cxy19830603|  楼主 | 2013-4-11 09:21 | 只看该作者
qin552011373 发表于 2013-4-10 22:34
数码管只显示0(显示不稳定,高频闪)你想过为什么是高频闪?降低一下定时器频率再看看现象   ...

O(∩_∩)O谢谢你的建议,但是你说的原因我已经排除了。

使用特权

评论回复
9
cxy19830603|  楼主 | 2013-4-11 10:14 | 只看该作者
yklstudent 发表于 2013-4-10 23:13
GCC的中断函数是这样写的?
好奇怪的写法 ICC与GCC的结合体
楼主创造出新的编译器了 太牛B了 ...

非常感谢你,真是这个原因,我老在中断程序里找原因,专家啊:$

使用特权

评论回复
10
qin552011373| | 2013-4-11 12:08 | 只看该作者
cxy19830603 发表于 2013-4-11 10:14
非常感谢你,真是这个原因,我老在中断程序里找原因,专家啊

还真没在意中断函数的写法  好奇怪

使用特权

评论回复
11
df520| | 2013-4-11 12:48 | 只看该作者
学习学习

使用特权

评论回复
12
au529| | 2013-4-11 13:44 | 只看该作者
楼主试试在定时器初始化函数加一句  SEI();

使用特权

评论回复
13
青岛整流器| | 2013-4-11 18:11 | 只看该作者
恩,但是我还是觉着int型的num加到400看着不爽哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝