新人求助,关于定时器问题

2019-03-24 20:45发布

学过AVR单片机有一段时间了,不过对于定时器还是有问题,我用的是atmega128单片机,以下这段程序 是我想 利用定时器来实现让一个发光二极管1秒的闪烁, 当时我用 AVR Studio运行,灯一直是灭的。
#include <avr/io.h>
#include<avr/pgmspace.h>
#include<util/delay.h>
#include <avr/interrupt.h>

/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uchar time_1s_count=0;

void T0_init(void)
{
TCCR0=0X07; //普通模式,OC0不输出,1024分频
TCNT0=0Xd8;//初值10ms
TIMSK=0x01;
TIFR=0x01;     
}

void port_init(void)//端口初始化
{
DDRB=0xff;//端口设为输出
PORTB=0Xff;
}

ISR(SIG_OVERFLOW0)   //中断服务程序
{
TCNT0=0xd8;//重新赋值
if(time_1s_count!=100)    //在这里的意思我是想让//定时器定时10mS,计数100次为1s,到达1S亮   而且亮的时间也为1S
{time_1s_count++;}
else
{
    PORTB ^= (1 << PB7);       //放光二极管亮灭变化
time_1s_count=0;
}

int main(void)
{
port_init();//端口设置
T0_init();//定时初始化
time_1s_count=0;
SREG|=0x80;      //开启全局中断
while(1);
}

以上是所有程序,8位和16位的定时器是如何计算初值的,比如我的单片机主频为7.3728MHz,TCNT0=0X3E是怎么实现初值为100US的,请理出计算公式 还有16位的定时器是如何计算的  比如TCNT1=0xfb1e,是如何计算出来初值,
麻烦大家帮帮忙,谢谢 请问论坛里面有QQ群吗,我想加入 拜托大家了。

[ 本帖最后由 楠溪江的小鱼 于 2012-11-18 16:50 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
wudayongnb
1楼-- · 2019-03-24 23:13
100us溢出一次,计100次是1秒吗?你能看到闪烁的现象那就怪了
楠溪江的小鱼
2楼-- · 2019-03-25 00:29
谢谢 这里是我写错了 应该把US改成MS
楠溪江的小鱼
3楼-- · 2019-03-25 06:27
功能应该实现完成了  还是得谢谢大家
tiankai001
4楼-- · 2019-03-25 11:27
呵呵,单片机里面这个时间问题经常容易忽视,但是有时万万不能忽视的
tiankai001
5楼-- · 2019-03-25 13:51
关于初值设置,要仔细看数据手册,上面有很详细的说明
楠溪江的小鱼
6楼-- · 2019-03-25 18:36
 精彩回答 2  元偷偷看……

一周热门 更多>