打印
[AVR单片机]

新手求助,是定时器0的比较中断top值太小了?

[复制链接]
2244|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sky_假装|  楼主 | 2010-9-12 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sky_假装 于 2010-9-12 10:19 编辑

想用mega16做一个频率和占空比都可调的方波,频率为1K~10Khz(折算成周期是:100us~1000us),单片机外部晶振16M,输出管脚PD7(初始化输出高电平,程序中定义为PWM)。
小弟使用的方法是timer0比较中断,分频为1,比较中断出一个1us的中断,用一个变量int_time(16位无符号整型,初始值为0,每次进中断+1),然后去和两个标识符常量freq_h(16位无符号整型,表示方波周期里高电平所占时间,int_time加到等于freq_h时,PD7=0)和freq_time(16位无符号整型,表示方波周期,int_time加到等于freq_time时,PD7=1,把int_time也重新置零)匹配,改变PD7的输出,设置和中断代码如下:
void init_timer()
{
    TCCR0  = 0x00;//停止定时器
    TCNT0  = 0x00;//初始值
    OCR0   = 0x07;//匹配值
    TIMSK |= 0x02;//中断允许
    TCCR0  = 0x09;//启动定时器
    SREG |= 0x80;
}

//T0比较中断服务程序
#pragma vector = TIMER0_COMP_vect
__interrupt void timer0_int(void)
{
    int_time++;
    if(int_time==freq_h)
        {
            PWM = 0;
        }
    if(int_time==freq_time)
        {
            PWM = 1;
            int_time = 0;
        }
}


现在的情况是,hex文件放到proteus里面仿真,输出的方波频率(预置5555hz)只有1200hz差不多,会不会是我的中断里面东西太多了,执行中断里面的东西花了太长时间,以至于输出周期变大,频率变小?主程序的while(1)里面什么都没有的,是空的。

另外以前做东西有个疑问,以前有看到说,delay函数(就是那种用for,或者while的直接i--的那种)执行的时候,cpu是满载的,这样子的话,如果单片机里面还有定时中断,会导致定时中断变得不准?那我想再问一下,如果一方面要用动态扫描显示led数码管(一般动态扫描不是都会用到delay的嘛),另一方面要开定时器中断,遇到这种情况怎么办?

刚学avr单片机,第一次发帖,不知道描述清楚了没有,请大家帮忙啊

相关帖子

沙发
sky_假装|  楼主 | 2010-9-13 20:46 | 只看该作者
自己搞出来了,是top值设置太小了的原因,mega16的datasheet里面有提到这个问题,希望后来人不要遇到这种情况吧。
另外用iar avr的时候,注意代码的优化选择,每一种选择都会有不同的结果

使用特权

评论回复
板凳
sky_假装|  楼主 | 2010-9-13 20:47 | 只看该作者
再见avr,我们的交点只有7天,再见大学的最后一个短学期!

使用特权

评论回复
地板
jjt1975| | 2010-9-15 13:56 | 只看该作者
看看反汇编的代码就清楚了。C语言一句话,翻译成机器语言就不知道了。中断程序尽量的小,而且变量的类型前面加上REGISTER 可以声明变量是寄存器变量,处理速度会高很多。如果变化范围没有那么大,不要声明太多的int型变量。尽量使用CHAR 或UNSIGNED CHAR。毕竟是8位机。

使用特权

评论回复
5
jjt1975| | 2010-9-15 13:59 | 只看该作者
提示: 该帖被管理员或版主屏蔽
6
sky_假装|  楼主 | 2010-9-15 16:33 | 只看该作者
5# jjt1975


在公司搞嵌入式Linux下的驱动程序的。avr单片机是回学校交的作业,呵呵

使用特权

评论回复
7
li_527| | 2010-9-20 16:57 | 只看该作者
那啥有前途?刚想学avr的说

使用特权

评论回复
8
sky_假装|  楼主 | 2010-9-22 12:51 | 只看该作者
7# li_527

干好了什么都有前途,所以加油吧

使用特权

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

本版积分规则

1

主题

7

帖子

1

粉丝