EXPERIMENT 3: The Interrupt and Polling System.: EEEB371 E3 1
EXPERIMENT 3: The Interrupt and Polling System.: EEEB371 E3 1
EXPERIMENT 3: The Interrupt and Polling System.: EEEB371 E3 1
Objective:
To Study the Interrupt and Polling methods
To apply the interrupt and polling concept in a program.
Introduction
Polling
Polling method uses a status flags to indicate whether it has a valid data for the
microprocessor to proceed with the next instruction. This method will wait in a loop for the
flag to be raised. By checking the flag bit continuously, the microprocessor can determine
whether the interface chip has received a new data from the input device. In the polling
method, the system needs to wait until the next loop in order to check the flag.
Interrupt
The PIC18F4550 devices have multiple interrupt sources and an interrupt priority feature that
allows each interrupt source to be assigned a high priority level or a low priority level. The
high priority interrupt vector is at 000008h and the low priority interrupt vector is at
000018h. High priority interrupt events will override any low priority interrupts that may be
in progress.
There are 13 registers that are used to control interrupt operation. These registers are:
RCON
INTCON
INTCON2
INTCON3
PIR1, PIR2, PIR3
PIE1, PIE2, PIE3
IPR1, IPR2, IPR3
Each interrupt source has three bits to control its operation. The functions of these bits are:
1. Flag bit to indicate that an interrupt event occurred
2. Enable bit that allows program execution to branch to the interrupt vector address
when the flag bit is set
3. Priority bit to select high priority or low priority.
EEEB371 E31
The interrupt priority feature is enabled by setting the IPEN bit (RCON register).When
interrupt priority is enabled, there are two bits that enable interrupts globally. Setting the
GIEH bit (INTCON<7>) enables all interrupts including high priority interrupts. Setting the
GIEL bit (INTCON register) enables all low priority interrupts. When the interrupt flag
enable bit and appropriate global interrupt enable bit are set, the interrupt will vector
immediately to address 000008h or 000018h, depending on the priority level. Individual
interrupts can be disabled through their corresponding enable bits.
When the IPEN bit is cleared (default state), the interrupt priority feature is disabled and
interrupts are compatible with PICmicro mid-range devices. In Compatibility mode, the
interrupt priority bits for each source have no effect. The PEIE bit (INTCON register)
enables/disables all peripheral interrupt sources. The GIE bit (INTCON register)
enables/disables all interrupt sources. All interrupts branch to address 000008h in
Compatibility mode.
When an interrupt is responded to, the global interrupt enable bit is cleared to disable further
interrupts. If the IPEN bit is cleared, this is the GIE bit. If interrupt priority levels are used,
this will be either the GIEH or GIEL bit. High priority interrupt sources can interrupt a low
priority interrupt.
The return address is pushed onto the stack and the PC is loaded with the interrupt vector
address (000008h or 000018h). Once in the Interrupt Service Routine, the source(s) of the
interrupt can be determined by polling the interrupt flag bits. The interrupt flag bits must be
cleared in software before re-enabling interrupts to avoid recursive interrupts.
The return from interrupt instruction RETFIE, exits the interrupt routine and sets the GIE
bit (GIEH or GIEL if priority levels are used), which re-enables interrupts. For external
interrupt events, such as the INT pins or the PORTB input change interrupt, the interrupt
latency will be three to four instruction cycles. The exact latency is the same for one or two-
cycle instructions. Individual interrupt flag bits are set regardless of the status of their
corresponding enable bit or the GIE bit.
EEEB371 E32
Procedure
1. Write a program based on the flowcharts given in Figure 3.1 on page E3-4 as a guide.
The program is divided into 4 sections and should follow the following specifications:
Main program the main program cycles through a continuous loop and
outputs to a 7-Segment display. The 7-segment display must display the
numeral number as shown below. The main program must contain Interrupt
initialization to facilitate an interrupt request.
0 1 2 9
Note: The flow charts given are simplified; you will need to expand it to more detail.
Also you may want to modify the sequence, or design an altogether different program
flow, but do keep to the program specifications described above.
2. Assemble the program and then download the hex file into the microcontroller.
3. Test your program on the board. Observe and monitor the responses.
Q1. Is the output response the same as above before pushing the button SW1?
Q2. At the end of interrupt, does the number continues or restarts from 0? Please
explain.
Q3. What is the difference between pushing SW1 and SW2?
Q4. Discuss your answer in Q3.
4. Turn off the PTK40A power supply, rearrange the USB cable back into the Training
Kit. Exit from MPLAB and PICKit 2 programmer. Shutdown your PC and rearrange
your workstation before you leave.
Important note:
(Plagiarism: Adopting, reproducing or copying others' work, ideas, words or
statements without an appropriate acknowledgement constitutes plagiarism and will
be heavily penalized.)
EEEB371 E33
MAIN
INTERRUPT
InitializeINT0
InitializePortinput
andoutput Turn ON LED (rotate)
PORTA=0; from bit 1 to bit 5 at
PORTD=0; PORTA with 0.5 sec
interval between each
rotation
COUNT=0
RETFIE
POLLING Y
SW2PRESS?
N
WriteCOUNTtoPORTD
POLLING
Delay2sec
Turn ON LED (rotate)
from bit 1 to bit 5 at
PORTA with 0.5 sec
interval between each
IncrementCOUNT rotation
WritetoPORTD
N RETURN
COUNT=0xA?
Y
EEEB371 E34