Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Islamic university
Electrical engineering
PIC course
Chapter#2
Programming Microcontroller Using Assembly
Language
2.4 Delay
In this section we will learn how building delays.
A delay is a mechanism that keeps the processor from
executing a part of its program for a specific amount of
time.
Methods for creating these delays are:
"NOP" Delay : A simple delay can be achieved by throwing in a
few instructions that don't do anything useful except waste
machine cycles.
Basic Loop Delay: The next example show how to make delay for
41 cycles.
5
2.4 Delay
Example#1:
1
Will be evaluated one cycle
1
2.4 Delay
Example#2 :is a simple example consist of connecting a led to RB0, then turning on/off
this led in a flasher way:
PORTB
XORWF PORTB, F
Delay
W
PORTB
Outer loop
Inner loop
XORWF PORTB, F
2.4 Delay
1
1
1x255
1x255
1x255
1x255x255
(1x254+2)x255
Note:
ODH register
will decrease from
255 to 0 then it
goes out from
LOOP0.
Then the OCH
register will
decrease by 1
then the ODH
register will full
again in then begin
decrease and so
on
254x255x2
1x254+2
2x254
2
2.4 Delay
Total delay
=[1+1+1x255+1x255+1x255+1x255x255+(1
x254+2)x255+254x255x2+1x254x2+2x254
+2]x(4/(4MHz))=0.26sec
Important note:
This method of delay is not sufficient especially at long delay so we learn
another method by using TMR0.
9
2.4 Delay
Example#3:
Write a PIC subroutine in assembly language to give a fixed delay of
200us. Assume that a 4MHz oscillator is being used.
1
1X(K-1)
2X(K-1)
Total delay=
1+1+(K-1)+2+2X(K1)+2=3K+3 Cycles
(3K+3)sec=200sec
K=65
10
2.5 Interrupts
Interrupts are a mechanism of a microcontroller which
enables it to respond to some events at the moment they
occur, regardless of what microcontroller is doing at the
time.
2.5 Interrupts
Sources of interrupt:
In the PIC16F84A, there are four sources of interrupt:
Internal interrupt
Termination of writing data to
EEPROM.
TMR0 interrupt caused by
timer overflow.
External interrupt
Interrupt during
alteration on RB4, RB5,
RB6 and RB7 pins of port
B.
External interrupt from
RB0/INT pin of
microcontroller.
12
2.5 Interrupts
Registers used with interrupt:
1. Control interrupt register (INTCON) at 0Bh address.
2. Option register at 81h address.
3. Control EEPROM register (EECON 1) at 88h address.
The most important register is (INTCON), so you can see
the datasheet to know more about this register.
13
2.5 Interrupts
flags
14
2.5 Interrupts
15
2.5 Interrupts
16
2.5 Interrupts
The bellow Figure shows the most important interrupt
register INTCON, which controls the usage and selection
of interrupt sources in the PIC16F84A.
17
2.5 Interrupts
We can use the bits of INTCON register to make interrupt as follow:
1) First we set GIE bit which must be enabled for any interrupt.
2) Second we enable one of this bits( T0IE ,EEIE , RBIE,INTE) as we
like to use the interrupt:
If we use external interrupt , we set INTE to 1.
If we use TMR0 interrupt , we set T0IE to 1.
If we use RB interrupt , we set RBIE to 1.
If we use EEPROM interrupt , we set EEIE 1.
3) When interrupt occurred , the one of flag bits (INTF, RBIF, TOIF) is
set physically so it must be cleared in software.
18
2.5 Interrupts
Keeping the contents of important registers:
19
2.5 Interrupts
The step of push and pop is performed because the contents of the
most important registers may change during the interrupt.
The most important registers we must keep is the work register and
status register and this is done by storing the work register in any
bank and storing the status register in bank 0.
20
2.5 Interrupts
After writing the main body of the interrupt and we can restore the
status register then restore the W register.
21
2.5 Interrupts
The following example shows how to use the external interrupt to turn
on a led connected to RB2 when a pushbutton connected RB0
(External interrupt source) is pressed
22
2.5 Interrupts
23
2.5 Interrupts
24
problem#1:
using external interrupt INT0 to implement a counter to counts from
0000 to 1111 at falling edge input.
25
problem#2:
using external interrupt INT0 to implement a counter to counts from
1111 to 0000 at RISING edge input
26
2.6 TMR0
Timer0 is an internal 8bit register that increments automatically with
every PIC instruction cycle until the count over flows timer capacity .
This takes place when the timer count goes from 0xff to 0x00 .
At that time ,the timer restarts the count .
2.6 TMR0
Two register are used for control timer0:
1) INTCON register: is used in timer mode to enable timer0 interrupt as
showed in pervious section.
2) OPTION register: is used for control timer operation as select mode,
postescaler for timer0 or WDT timer ,select the value of prescaler and
counter work in fall edge or high edge.
28
2.6 TMR0
Select mode:To choose timer0 work on timer mode or counter mode, we use
bit5(T0CS). If it is set ,timer0 take external clock ( work as counter). Else it take
internal clock & work as timer.
Select edge: If trigger TMR0 was enabled with impulses from a RA4/T0CKI pin, bit
4(T0SE) would determine whether it would be on the rising or falling edge of a signal.
1= Falling edge
0= Rising edge
Prescale: To select prescale for a WDT timer or for TMR0 we use bit3 (PSA):
1=prescaler is assigned to WDT.
0=prescaler is assigned to free timer TMR0
The counter prescaler consists of the three low-order bits in the OPTION
register.
These bits allow selecting eight possible values that serve as advisor for the
counter rate .When the prescaler is disabled, the counter rate is one-fourth the
processors clock speed .If the prescaler is set to the maximum value (255) then
one of 255 clock. Signals actually reach the timer.
29
2.6 TMR0
Table below shows the prescaler settings and their action on the rate of theTimer0
module and the Watchdog Timer:
30
2.6 TMR0
Delay with TIMER0:
A general formula for calculating the number of timer beats per second is as
follows :
T =C/(4*P*R)
Where
31
2.6 TMR0
Counter mode:
The PIC16F84A can be programmed so hat portRA4/T0CKI is used to
count events or pulses by initializing the Timer0 module as a counter.
Without interrupts , the process requires the following preparatory steps:
2.6 TMR0
The following example is using TMR0 as a counter to count from 0
to 99 as shown in Figure:
33
34
2.6 TMR0
problem#1:
using interrupt technique with tmr0 to implement 15 usec delay
35
Homework:
Using interrupt technique with tmr0 to implement 15 msec delay
37