Вы находитесь на странице: 1из 18

Microcontroller Timers

ECET 209 – Lecture 12


Introduction to Microcontrollers
Clock Select

GND (no signal )


System Clock

CK/8

TCCR1B
System Clock
Prescale

CK/64
Timer/Counter
CK/256
Register
CK/1024

External Pin T1

CS10
CS11
CS12
ECET 209 Purdue University 2
Microcontroller Timer

ECET 209 Purdue University 3


Microcontroller Timer

ECET 209 Purdue University 4


Microcontroller Timer

ECET 209 Purdue University 5


Microcontroller Timer

ECET 209 Purdue University 6


Creating a 1mSec Delay

• To create a desired delay, we must calculate


the number of timer ticks it takes to
implement the delay.

• The equation is:

#ticks = desired delay / (fosc / prescale)-1

ECET 209 Purdue University 7


Load TCNT1 with
64,786 TCNT1 = 64786;

Select Clock / 8 TCCR1B = 2;

while ((TIFR & 0x04) == 0)


Wait for TOV1
to be set {
}

Stop the Timer


TCCR1B = 0;

Clear the Timer


Overflow Flag TIFR = TIFR | 0x04;

ECET 209 Purdue University 8


TCNT1 = 64786; // set for 250 counts
TCCR1B = 2; // select CLK / 8
while ( (TIFR & 0x04) == 0) // wait for flag
{
}
TCCR1B = 0; // stop the clock
TIFR = TIFR | 0x04; // clear the flag

ECET 209 Purdue University 9


Goal

• Our goal is to create our own timer delay


• Specifically, we are going to:
– Create a 1 millisecond time delay using Timer 1
– Later, we make it a variable 1mSec delay

ECET 209 Purdue University 10


Functions

• Functions are “building blocks”


– Perform complicated processes ( > 1 line of C )
– Eliminate redundant code
– Make code easier to read
– Allow for “libraries”
– Allow software to be modularized

ECET 209 Purdue University 11


delay_1ms Function

void delay_1ms ( void ); // function prototype

delay_1ms(); // delay for 1mSec

ECET 209 Purdue University 12


delay_1ms()
void delay_1ms(void)
{
TCNT1 = 64786; // set for 250 counts
TCCR1B = 2; // select CLK / 8
while ( (TIFR & 0x04) == 0) // wait for flag
{
}
TCCR1B = 0; // stop the clock
TIFR = TIFR | 0x04; // clear the flag
}

ECET 209 Purdue University 13


What if we needed a variable
1mSec delay?

ECET 209 Purdue University 14


Variable 1mSec delay

counter = 0
Set loop counter
to zero counter++
Increment loop
counter
for loop
Is
loop counter Yes
less than
desired?

No

Delay 1mSec

delay_1ms( )

ECET 209 Purdue University 15


Variable 1mSec delay
void delay(unsigned int time)
{
unsigned int cntr;
for (counter=0; counter < time;counter++)
{
delay_1ms( );
}
}

ECET 209 Purdue University 16


Example Functions

delay_ms( 4 );

void delay_ms ( unsigned int );

Function Prototype

ECET 209 Purdue University 17


Any Questions?

ECET 209 Purdue University 18

Вам также может понравиться