Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

using all the timer together in atmega 8

Status
Not open for further replies.

selva murugesan

Advanced Member level 4
Full Member level 1
Joined
Mar 30, 2012
Messages
116
Helped
2
Reputation
4
Reaction score
1
Trophy points
1,298
Visit site
Activity points
2,007
hi every one,

i need to know , what are the precautions there while use the all the timers in parallel?
i want to use timer0, timer1 simultaneously. but timer0, timer1 shares same prescaler ,on which way is makes its possible?

could u give the example program for the same?


thanks in advance
 

Code:
#include "C8051F120.h"
#include<stdio.h>

#define SYSCLK 24500000

sbit LED0  	=  P1^6;
sbit LED1 = P1^7;
sbit Test =P0^3;
sfr16 T2     =  0xCC;
sfr16 RCAP3    = 0xCA;
sfr16 TMR3     = 0xCC;

xdata unsigned int delay2,delay1;
xdata unsigned long int FrequencyCount;
xdata unsigned int Timer2OverFlowCount;
xdata unsigned int Timer0Count;
unsigned int DelayinMsec = 0;

void Timer_Init();
void PORT_Init();
void Oscillator_Init();
void Interrupts_Init();
void Timer_Init();
void Reset_Sources_Init();
void Timer3_Init (int counts);

xdata unsigned int Count=0;
xdata int frequency= 0;

void main()

{
	Reset_Sources_Init();
	SFRPAGE   = CONFIG_PAGE;
	PORT_Init ();
	Oscillator_Init();
	SFRPAGE   = TIMER01_PAGE;
	Timer_Init();
	SFRPAGE = TMR3_PAGE;
    Timer3_Init (SYSCLK / 12 / 15000);
	Interrupts_Init();
	EA =1;
	while(1)
	{
	}
}

void PORT_Init()
{
    SFRPAGE   = CONFIG_PAGE;
    P0MDOUT   = 0xFF;
    XBR1      = 0x20;
    XBR2      = 0xC0;
}

void Oscillator_Init()
{
    SFRPAGE   = CONFIG_PAGE;
    OSCICN    = 0x83;
}

void Interrupts_Init()
{
    IE        = 0x82;
}

void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}

void Timer_Init()
{
	char SFRPAGE_SAVE = SFRPAGE;
    SFRPAGE   = TIMER01_PAGE;
	TCON      = 0x10;
	TMOD = 0x01;
	TR0		  = 1;
	SFRPAGE   = TMR2_PAGE;
    TMR2CN    = 0x0F;
	SFRPAGE = SFRPAGE_SAVE;
}

void Timer3_Init (int counts)
{
   TMR3CN = 0x00;
   RCAP3   = -counts;
   TMR3    = 0xffff;
   EIE2   |= 0x01;
   TR3 = 1;
}


void Timer0_ISR (void) interrupt 1
{
   Test = ~Test;
   TF0 = 0;
   TL0		  = 0x06;
   TH0		  = 0xF8;
   TR0=1;
   Count++;
   if(Count > 500)
   { 
    LED0 = ~LED0; 
	Count = 0;
   }
   if(Timer0Count++ > 10000)
	{
		frequency = (Timer2OverFlowCount * 65535 + T2);
		Timer2OverFlowCount = 0;
		Timer0Count = 0;
		T2 = 0;
	}

} 

void Timer2_ISR() interrupt 5
{
	if(TF2)
	{
		TF2 = 0;
		Timer2OverFlowCount++;
	}
	if(EXF2)
	{
		EXF2 = 0;
	}
}

void Timer3_ISR (void) interrupt 14
{
   TF3 = 0;
   LED1 = ~LED1;
}
 
Last edited by a moderator:

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top