Time Delay
Time Delay
Microcontroller
Time Delay Methods
&
Calculations of Delay for Software
loop
Time Delay
Software Hardware
(Polling) (Timer interrupts)
SQR_WAVE:
COM R16
OUT PORTB,R16
LDI R20,0x80 ;Load Timer register for next cycle
OUT TCNT0,R20
RETI
C Language Program
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER0_OVF_vect)
{
TCNT0=0x80;
PORTB=PORTB^(1<<7);
}
C Language Program
int main(void)
{
TIMSK=TIMSK|(1<<TOIE0); //TIMSK=0x01;
sei(); //Enable global interrupt flag
TCNT0=0x80; //Load timer register
TCCR0=0x01; //Timer 0 normal mode, no prescalar
while(1);
}
Exercise
Modify Interrupt routine to get variable
frequency of square wave depending on
position of DIP Switch connected at PORTC
COM01:0: Compare Match Output Mode
COM01 (D3) COM00 (D4) Mode
U1
9 22
RESET PC0/SCL
23
PC1/SDA
13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
40 27
PA0/ADC0 PC5/TDI
39 28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
R1 37
PA3/ADC3
10k 36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
33 17
R2 U2 PA7/ADC7 PD3/INT1
18
PD4/OC1B
1 A C 4 1 19
PB0/T0/XCK PD5/OC1A
220 2 20
PB1/T1 PD6/ICP1
3 21
PB2/AIN0/INT2 PD7/OC2
2 3 4
PB3/AIN1/OC0
K E 5
PB4/SS
PC817 6
PB5/MOSI
7 32
PB6/MISO AREF
8 30
PB7/SCK AVCC
ATMEGA32
Object Counter Program …
CBI DDRB,0 ;Make PB0 (T0) pin input
LDI R20,0xFF ; Make Port D output
OUT DDRD,R20
LDI R20,0x06
OUT TCCR0,R20 ;Counter on falling edge
CHECK:
IN R20,TCNT0 ;Read count value from timer register
OUT PORTD,R20 ;Display Count value
IN R16,TIFR
SBRS R16,TOV0
RJMP CHECK
LDI R16,1<<TOV0
OUT TIFR,R16
RJMP CHECK
Exercise
• Convert Object Counter Program in C
Language …