User manual

Table Of Contents
General Purpose Input/Output Labs
© 2009 Microchip Technology Inc. DS41369A-page 47
5. The Do_Outputs() code from the previous lab stays the same.
6. Copy/paste the code in Example 3-21 into the Timing() over the code from the
previous lab.
EXAMPLE 3-21: TIMING() CODE FOR GPIO LAB 5
7. Copy/paste the code in Example 3-22 over the main() code from the previous
lab.
EXAMPLE 3-22: MAIN() CODE FOR LAB 5
8. Compile the project, there should be no errors.
3.4.4.4 TESTING THE APPLICATION
Program the PIC16F690. Once programmed, the LEDs connected to PORTC should
sequentially light from left-to-right in 10 mS intervals. When the push button is pressed,
the LEDs should change directions and sequentially light from right-to-left.
Continuously pressing the push button will change the direction each time.
It should be noted that the push button press inconsistently changes the direction of
sequential flashing. The problem here is that the firmware performs a technique called
"Polling" to check the state of the RA0 pin that connects to the push button. Therefore,
the state of RA0 is checked only once each time through the software control loop when
the Get_Inputs() is called. This polling is subject to the timing of the software con-
trol loop and will lead to push button presses being missed. If the Timing() remained
at the 1 second delay as implemented in the previous lab, this would have made
matters worse. The next labs will remedy these issues through the use of interrupts.
The solution for this project is located in the
C:\PICDEM_Lab\GPIO_Labs\GPIO_Lab5\solution directory.
unsigned int delay_var = 9997;
//Keep looping until the delay_var is
// equal to zero (should take 10mS)
while(--delay_var);
Note: This lab now utilizes a 10 mS delay to time the software control loop.
Initialize(); //Initialize the relevant registers
while(1)
{
Get_Inputs();//Evaluate inputs
Decide();//Make any decisions
Do_Outputs(); //Perform any outputs
Timing();//Sets execution rate of the
//Software Control Loop
}