Vous êtes sur la page 1sur 37

PIC Discussion

By Eng. Tamar Jomaa


1

Write assembly language instructions to clear the general


purpose registers of PIC16F84A microcontroller
(dont write the whole program)

Islamic university
Electrical engineering
PIC course

Chapter#2
Programming Microcontroller Using Assembly
Language

Outlines for part#2:


2.4 Delay
2.5 Interrupts
2.6 TMR0

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

Will be evaluated one cycle


1x10
1x9+2

Take one cycle but it repeat 10 times


Decrease from 9 to 1 take one
cycle repeat 9 times.

When decrease from 1 to 0


a skip will be happen, so
take 2 cycles.
Take 2 cycles repeat 9 times
Total delay = (1+1+1x10+1x9+2+2x9)cycle= 41 cycle
Note: 1cycle=4Tosc=4x(1/Fosc)=4/(4MHz)=1sec.
so total delay=41sec

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

The inner loop


will repeat
255x255, but the
outer loop will
repeat only 255.
8

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.

This is a very important part, because it provides


connection between a microcontroller and environment
which surrounds it.
Generally, each interrupt changes the program flow,
interrupts it and after executing an interrupt subprogram
(interrupt routine) it continues from that same point on.
11

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:

An important part of the interrupt process is the stack.

Its basic role is to keep the value of program counter after a


jump from the main program to an address of a subprogram.

In order for a program to know how to go back to the point where it


started from, it has to return the value of a program counter from a
stack.

When moving from a program to a subprogram, program counter is


being pushed onto a stack.

19

2.5 Interrupts

When executing instructions such as RETURN, RETLW or RETFIE


which were executed at the end of a subprogram, program counter
was taken from a stack so that program could continue from where it
stopped before the interrupt.

These operations of placing on and taking off from a program counter


stack are called PUSH and POP.

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 .

The timer has the following characteristics:

A timer register that is readable and writeable by software.


Can be powered by an external or internal clock.
Timing edge for external clock can be selected.
8-bit software programmable prescaler.
Interrupt capability.
Can be used as a timer or as a counter.
27

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

T: is the number of clock beats per second


C :is the system clock speed in Hz
P: is value stored in the prescaler
R: is the number of iterations counted in
theTMR0 register.
The range of both P and R in this formula is
1 to 256 .

Example how to make


delay with timer0:

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:

Port-A , line4 , (RA4/T0CKI) is defined for input.


The Timer0 register (TMR0) is cleared.
The OPTION register bits PSA and PS0:PS2 are initialized if the
prescaler is to be used.
The OPTION register bit T0SE is set so as to increment the
count on the high-to-low transition of the port pin if the port
source is active low .Otherwise the bit is cleared.
The OPTION register bit T0CS is set to select action on the
RA4/T0CKI pin.
32

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

Delivery date: next discussion lecture.


36

Be free to ask any question

37

Vous aimerez peut-être aussi