[AVR单片机] AVR中关于定时器的问题,需要设置熔丝位吗?

[复制链接]
2300|8
 楼主| Mars.CN 发表于 2013-6-12 18:55 | 显示全部楼层 |阅读模式
晶振11.0592MHz,熔丝位CKSEL0-3设置都为1,测试串口已经可以正常通讯
但貌似用led测试定时器的时候问题依旧


#include <avr/io.h>
#include <avr/interrupt.h>

int main(void)
{
        unsigned int i=0;
        DDRA |= (1<<3);
        DDRB = 0XF0;
        PORTB = 0XF0;
        TCCR0 = 0X00;                        //关闭计数器
        TIFR |= 1<<OCF0;                //清楚中断标志位
        TIMSK != OCIE0;                        //允许计数器的比较中断
        TCNT0 = 148;                        //装入初值(cpu频率/分频1024/100)
        TCCR0 |= (1<<CS00) | (1<<CS01) | (1<<CS02);                //设置分频系数
       
    while(1)
    {
                PORTB ^= 0XFF;
                for (i=0;i<10000;i++)
                {
                        while (!(TIFR & (1<<TOV0)));
                        TCNT0 = 148;
                }                       
    }
       
        while(1);
}
 楼主| Mars.CN 发表于 2013-6-12 19:04 | 显示全部楼层
貌似是while (!(TIFR & (1<<TOV0)));根本就没起作用
qin552011373 发表于 2013-6-12 21:24 | 显示全部楼层
哪款AVR?
宇容创行 发表于 2013-6-12 21:36 | 显示全部楼层
用查询方式,必须增加中断清0代码
1061zou 发表于 2013-6-13 07:29 来自手机 | 显示全部楼层
需要设置晶振频率的熔丝位,并且确定使用内部晶振还是外部晶振。
 楼主| Mars.CN 发表于 2013-6-13 09:59 | 显示全部楼层
宇容创行 发表于 2013-6-12 21:36
用查询方式,必须增加中断清0代码

具体怎么做?TIFR &= ~(1<<TOV0)
是这样吗?

现在运行的速度明显比11.0592的要快
我用的是ATMega128
 楼主| Mars.CN 发表于 2013-6-13 10:07 | 显示全部楼层
搞定了,多谢 宇容创行
请中断用的是 TIR |= 1<<TOV0
不过感觉好像还是稍微有点误差呀
zzzyyyxxx 发表于 2013-6-13 10:09 | 显示全部楼层
:)thank!
qin552011373 发表于 2013-6-13 12:59 | 显示全部楼层
Mars.CN 发表于 2013-6-13 10:07
搞定了,多谢 宇容创行
请中断用的是 TIR |= 1

结贴散分吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

43

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部