搜索
bottom↓
回复: 2

atmega128的多个定时不能同时工作吗???

[复制链接]

出0入0汤圆

发表于 2014-6-4 20:12:37 | 显示全部楼层 |阅读模式
   最经想写一个程序就是要把所有的128的定时器用上,但是发现8位定时器和16位定时器无法同时工作,这是什么原因,其代码如下:
#include<avr/io.h>
#include<avr/interrupt.h>

#ifndef uchar
#define uchar unsigned char
#endif

#define PWM_ddr      DDRB
#define PWM_port     PORTB

#ifndef uint
#define uint unsigned int
#endif

#define true   1
#define false  0

volatile uint a=0,b=0,c=0;


#define LED_port     PORTC
#define LED_ddr      DDRC
#define LED_pin      PINC

//输出波形
void TIMER1_init()
{
        TIMSK = 0X00;
        TCNT1H = 0x00;
        TCNT1L = 0x00;
        TCCR1A = 0xab;
        TCCR1B = 0x09;    //
        TCCR1C=0X00;
        OCR1A=0x0300;     //OC1A 输出 75%占空比
        OCR1B=0x0300;     //OC1B 输出 75%占空比
        OCR1C=0x0300;
}
//工作在定时方式
void TIMER3_init()
{
        TCNT3H = 0x02;                                //定时溢满值是500US
        TCNT3L = 0x0c;              //所需值为524
        TCCR3A = 0x00;         
        TCCR3B = 0x01;//1分频
        TCCR3C = 0X00;
        ETIMSK=0X04;
//        ETIMSK |= (1<<TOIE3);   //使能定时器3中断
}
//工作在定时方式
void TIMER0_init()
{
        TCCR0=0x01;              
        TCNT0=0X7c;              //定时溢出事件为100us
//        ASSR=0x08;                         //外部TOSC1触发
        TIMSK|=(1<<TOIE0);
}
//测速计数
void TIMER2_init()
{
          TCNT2=0x00;            
          TCCR2=0x07;             //外部时钟,上升沿
}
//测速计数
void INT0_init()
{
        EICRA=0X03;       //上升沿产生中断
        EIMSK=0X01;       //外部中断使能
}

void IO_init()
{
        LED_ddr=0xFF;
        LED_port=0xFF;
     //DDRB=0XFF;
        PWM_ddr|=(1<<PB5)|(1<<PB6)|(1<<PB7);
}

int main()
{
        TIMER0_init();
        TIMER1_init();
        TIMER2_init();
        TIMER3_init();
        INT0_init();
        IO_init();
    sei();
        while(1)
        {
        if(TCNT2==100)
        {
                TCNT2=0;
                LED_port|=(1<<PC2);
        }
        if(c==100)
        {
        LED_port|=(1<<PC3);
        c=0;
        }       
        }
}

SIGNAL (TIMER3_OVF_vect)////定时溢满值是500US
{
        cli();
    TCNT3H=0X02;                                
        TCNT3L=0X0c;
        a++;
        if(a==1000)
        {
        LED_port|=(1<<PC0);
        }
        else if(a==2000)
        {
        a=0;
        LED_port&=~(1<<PC0);
        }
        sei();
}

SIGNAL (TIMER0_OVF_vect)   ////定时溢出事件为100us
{
   cli();
   TCNT0=0X7C;
           b++;
        if(b==1000)
        {
        LED_port&=~(1<<PC1);
        }
        else if(b==2000)
        {
        b=0;
        LED_port|=(1<<PC1);
        //LED_port|=(1<<PC1);
        }
   sei();
}
SIGNAL (SIG_INTERRUPT0)
{
    cli();
        c++;       
        sei();
}
解释有问题,请高手回答!!!!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-6-5 17:10:35 | 显示全部楼层
AVR的各定时器之间呢都是独立的模块,都可以独立的工作,请查看相应的数据手册,查看是否配置错误。

出0入0汤圆

 楼主| 发表于 2014-9-10 15:53:04 | 显示全部楼层
squall45 发表于 2014-6-5 17:10
AVR的各定时器之间呢都是独立的模块,都可以独立的工作,请查看相应的数据手册,查看是否配置错误。 ...

thanks ,我在看一下!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 17:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表