Transcript Chapter 2 - Walking in Circles
Chapter 2 Walking in Circles
Programming Loops in C
The Plan
The Main Loop
WHILE loops
Logic Expressions
Of TRUE and FALSE in C
DO loops
The first peripheral: Timer1
Debugging with MPLAB SIM
Animations The Logic Analyzer
Di Jasio - Programming 32-bit Microcontrollers in C
Preparation
The following tools will be used in this lesson:
MPLAB IDE, Integrated Development Environment (v8.00 or later, free) MPLAB SIM, free software simulator (included in MPLAB installation) MPLAB C32, C compiler (free Student Edition) The following pieces of documentation will be used during this lesson:
PIC32MX Datasheet –DS61143 (latest rev.)
PIC32MX Family Reference Manual – DS61120 Section 12. I/O Ports Make sure they are available and/or installed and ready to use on your computer.
You can download them from Microchip web site at: http://www.microchip.com/mplab And http://www.microchip.com/c32 Di Jasio - Programming 32-bit Microcontrollers in C
The Structure of an (embedded) C Program
The main() function is where we place our application code At power up or after a reset, special initialization code ( crt0 ) is executed first When the main() _exit() function returns the function is called Both crt0 and _exit() contain default code inserted automatically by the compiler crt0
main()
_exit()
Di Jasio - Programming 32-bit Microcontrollers in C
WHILE Loops
while ( x) { // your code here… }
Di Jasio - Programming 32-bit Microcontrollers in C
Logic Expressions
true
and
false
are just integers in C
false
is zero
true
is everything else!
Logic operators produce
true/false !
|| && == != > >= < <=
results:
the “ logic OR ” the “ logic AND ” operator, operator, the “ logic NOT ” operator the “ equal-to ” operator the “ NOT-equal to ” the “ greater-than ” operator.
operator.
the “ greater-or-equal to ” the “ less-than ” operator.
operator.
the “ less-or-equal to ” operator.
Di Jasio - Programming 32-bit Microcontrollers in C
Strange Loops
while ( 0) { // your code here… } while ( 1) { // your code here… }
Di Jasio - Programming 32-bit Microcontrollers in C
A First Program: Loops.c
#include
Di Jasio - Programming 32-bit Microcontrollers in C
MPLAB SIM: Animation
Use the
Project Build checklist
“ loops.c
” program. to compile and link the Also use the
MPLAB SIM simulator Setup checklist
to prepare the software simulator.
Use the
Animate
mode (
Debugger>Animate
). In this mode, the simulator executes one C program line at a time, pausing shortly after each one to give us the time to observe the immediate results.
Control the simulation speed with the
Debug>Settings
dialog box, selecting the
Animation/Real Time Updates
tab, and modifying the
Animation Step Time
parameter
Di Jasio - Programming 32-bit Microcontrollers in C
Timer1
Di Jasio - Programming 32-bit Microcontrollers in C
Timer1
A 16-bit timer
Compatible with 8-bit PIC microcontrollers and 16-bit microcontrollers
Operates off the internal (peripheral) clock or an external input signal
Has a dedicated low power (secondary) oscillator that can also be used to provide a clock signal to the entire system
Can be gated via a separate input pin
A 16-bit register allows for cyclical operation Di Jasio - Programming 32-bit Microcontrollers in C
Using Timer1 for simple Delays
while( TMR1 < DELAY) { // wait }
Tdelay = (Fpb) * Prescaler * DELAY
Fpb peripheral bus frequency
DELAY a constant defined by the user Di Jasio - Programming 32-bit Microcontrollers in C
Loops.c
/* ** Loops */ #include
Di Jasio - Programming 32-bit Microcontrollers in C
MPLAB SIM: Logic Analyzer
Select the
Debug>Settings
dialog box and then choose the
Osc/Trace
tab. In the
Tracing
options section, check the
Trace All
box. Now you can open the Analyzer window, from the
View >Simulator Logic Analyzer
menu.
Di Jasio - Programming 32-bit Microcontrollers in C
Adding Channels
Click on the
Channels
selection dialog box button, to bring up the channel select
RA0
and click
Add
=> Click on
OK Di Jasio - Programming 32-bit Microcontrollers in C
Di Jasio - Programming 32-bit Microcontrollers in C
Summary
In this lesson we learned:
The function of the Main Loop
WHILE and DO loops
Logic Expressions in C
Timer1
How to use the MPLAB SIM simulator:
Animate mode Logic Analyzer window
Di Jasio - Programming 32-bit Microcontrollers in C
Advanced Material
Notes for the Assembly Experts
11110101 | 00001000 true (binary) OR true gives 11111101 true 11110101 || 00001000 true (logical) OR true gives 00000001 true
Di Jasio - Programming 32-bit Microcontrollers in C
Notes for the 8-bit PIC MCU Experts
Timer0 is gone
All timers are now 16-bit wide
Each timer has a 16-bit period registers
A new 32-bit mode timer-pairing mechanism is available for Timer2/3 and Timer4/5
A new external clock gating feature has been added on Timer1 Di Jasio - Programming 32-bit Microcontrollers in C
More Notes
Notes for 16-bit PIC Experts
The peripheral bus and the system bus are now separate to allow better power control when executing code at the highest clock speeds
Notes for C experts
While several
Real Time Operating Systems
(RTOSs) are available for the PIC32, a large number of applications won ’ t need and won ’ t use one. By default, the C32 compiler assumes there is no operating system to return control to
Notes for MIPS experts
The
core (
32-bit)
timer
is available as an additional resource to the set of five peripheral timers compatible with the 16-bit PIC microcontrollers
Di Jasio - Programming 32-bit Microcontrollers in C
Tips and Tricks
When writing an application that is
“
Always ON
”
, consider the impossible:
Refresh the most important control registers of the essential peripherals used by the application Group the sequence of initialization instructions in one or more functions. Call the functions once at power up, before entering the main loop, Also make sure that inside the main loop the initialization functions are called when idling and no other critical task is pending so that every control register is re-initialized periodically
Di Jasio - Programming 32-bit Microcontrollers in C
Peripheral Libraries
Using the peripheral libraries #include
Di Jasio - Programming 32-bit Microcontrollers in C
Suggested Excercises
Output a counter on PortA pins instead of the alternating on and off patterns Use PortD if you have a PIC32 Starter Kit.
Use a rotating pattern instead of alternating on and off Re-write the “ loops ” project using exclusively peripheral library functions to Control PortA pins Configure and read the timer Disable the JTAG port if necessary
Di Jasio - Programming 32-bit Microcontrollers in C
Recommended Readings
Ullman, L. & Liyanage, M. (2005)
C Programming
Peachpit Press, Berkeley, CA.
This is a fast reading and modern book, with a simple step by step introduction to the C programming language
Di Jasio - Programming 32-bit Microcontrollers in C
Online Resources
http://en.wikipedia.org/wiki/Control_flow#Loops
A wide perspective on programming languages and the problems related to coding and taming loops.
http://en.wikipedia.org/wiki/Spaghetti_code
Your code gets out of control when your loops start knotting… Di Jasio - Programming 32-bit Microcontrollers in C