introduction to pic16 microcontroller programming ... 1 am introductio… · 1 introduction to...
TRANSCRIPT
1
Introduction to PIC16Microcontroller Programming &
Interfacing
November 25-27, 2011Engr. Franz Duran, MEP-ECE
25-Nov-2011 Franz Duran 2
OVERVIEW
DAY 1 (Morning)
Introduction to PIC Microcontroller
PICTrainer3™ microcontroller laboratory/training module
MPLAB IDE
Basic C Programming
25-Nov-2011 Franz Duran 3
OVERVIEW
DAY 1 (Afternoon)
Basic C Programming… (cont.)
Intermediate C Programming
C Functions & Structured Programming
Modular Programming
Interfacing with 2x16 character LCD
Interfacing with 4x3 keypad
2
25-Nov-2011 Franz Duran 4
OVERVIEW
DAY 2 (Morning)
Basic of Interrupts
Interrupt sources
Interrupt service routine
RB0/INT interrupt
PORTB Interrupt on Change
25-Nov-2011 Franz Duran 5
OVERVIEW
DAY 2 (Afternoon)
PIC16 Timer module
TMR0 architecture
TMR0 as an interrupt source
Interfacing with 7-segment displays
25-Nov-2011 Franz Duran 6
OVERVIEW
DAY 3 (Morning)
Basic of Analog-to-Digital Conversion
Using the PIC16 A/D module
Interfacing LM35 temperature sensor
3
25-Nov-2011 Franz Duran 7
OVERVIEW
DAY 3 (Afternoon)
Basics of Serial Communication
PIC16 UART module
Basic string processing
25-Nov-2011 Franz Duran 8
MICROCONTROLLER
MCU, µC
A single-chip computer
Invented in the 1970’s
Used as “embedded” controller
25-Nov-2011 Franz Duran 9
MICROCONTROLLER
used as dedicated controllersdomestic appliances
consumer electronics
industrial equipments
automotive electronics
Naval/avionics/aerospace
4
25-Nov-2011 Franz Duran 10
MICROCONTROLLER
Why use?Cheap
Flexible
Small outline & high integration
Low-power
25-Nov-2011 Franz Duran 11
PIC MICROCONTROLLER
PIC, PICMICRO®
by MICROCHIP®
Arizona, U.S.A.
1989 (offshoot of General Instrument)
http://www.microchip.com
25-Nov-2011 Franz Duran 12
PIC MICROCONTROLLER
Rank (8-bit microcontroller)1990 – 20th
1993 – 8th
1996 - 5th
1997-2001 – 2nd
2002 – Present – 1st
5
25-Nov-2011 Franz Duran 13
PIC MICROCONTROLLER
FamilyPIC10, PIC12
PIC16
PIC17 / PIC18
PIC24 / DSPICs (16-bit)
PIC32(32-bit)
Popular among students and hobbyists
25-Nov-2011 Franz Duran 14
PIC16 ARCHITECTURE
Program
Memory
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
25-Nov-2011 Franz Duran 15
PIC16 ARCHITECTURE
Program
Memory
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
6
25-Nov-2011 Franz Duran 16
PIC16 ARCHITECTURE
CPUReduced Instruction Set Computer (RISC)
FOSC = 20MHz max. speed
FOSC/4 instruction clock
25-Nov-2011 Franz Duran 17
PIC16 ARCHITECTURE
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
ProgramMemory
25-Nov-2011 Franz Duran 18
PIC16 ARCHITECTURE
Program Memory“hard drive” where fixed program is stored
flash-based memory
reprogrammable at least 10,000x
7
25-Nov-2011 Franz Duran 19
PIC16 ARCHITECTURE
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
Input/Output
PortsCPU
Program
Memory
General Purpose
Registers
“Data RAM”
Special Function
Registers
25-Nov-2011 Franz Duran 20
PIC16 ARCHITECTURE
File RegistersGeneral Purpose Registers (GPRs)
Data RAM
Special Function Registers (SFRs)
control device operation
25-Nov-2011 Franz Duran 21
PIC16 ARCHITECTURE
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
Input/Output
PortsCPU
Program
Memory
Special Function
Registers
General PurposeRegisters
“Data RAM”
8
25-Nov-2011 Franz Duran 22
PIC16 ARCHITECTURE
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
Input/Output
PortsCPU
Program
Memory
General Purpose
Registers
“Data RAM”
Special FunctionRegisters
25-Nov-2011 Franz Duran 23
PIC16 ARCHITECTURE
Program
Memory
Power
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
CPUInput/Output
Ports
25-Nov-2011 Franz Duran 24
PIC16 ARCHITECTURE
Program
Memory
Power
Reset, WatchdogTimer, etc
Oscillator
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
Internal Peripherals
9
25-Nov-2011 Franz Duran 25
PIC16 ARCHITECTURE
Program
Memory
Reset, WatchdogTimer, etc
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
Power
25-Nov-2011 Franz Duran 26
PIC16 ARCHITECTURE
Program
Memory
Power
Reset, WatchdogTimer, etc
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
Oscillator
25-Nov-2011 Franz Duran 27
PIC16 ARCHITECTURE
Program
Memory
Power
Oscillator
Internal Peripherals
General Purpose
Registers
“Data RAM”
Special Function
Registers
Input/Output
PortsCPU
Reset, Watchdog
Timer, etc
10
25-Nov-2011 Franz Duran 28
PIC16 ARCHITECTURE
Input/Output pins
Internal Peripherals/ModulesTimers
A/D converter module
UART
SPI / I2C
Comparator
25-Nov-2011 Franz Duran 29
PIC16 ARCHITECTURE
Features:Watchdog Timer
SLEEPmode
Power On Reset, Brown-out Reset
CPU
RISC (reduced instruction set computer)
FOSC = 20Mhz typical
25-Nov-2011 Franz Duran 30
PIC16 ARCHITECTURE
Instruction set35 instructions (PIC16)
Easy to memorize all instructions
75 instruction (PIC18)
11
25-Nov-2011 Franz Duran 31
PIC16F84A
8-bit microcontrolller“PIC16” – family
“F” – flash memory, i.e. reprogrammable
“84” – variant/model
“A” - revision
4Mhz (≈1MIPS), DIP18, +5V
25-Nov-2011 Franz Duran 32
PIC16F84A
Program Memory1024 instruction words
1 word = 14 bit
File Registers (2 banks)GPRs - 68 bytes RAM
SFRs – 16 registers
Data EEPROM64 bytes
25-Nov-2011 Franz Duran 33
PIC16F84A
13 I/O pinsPORTB – 8 pins
PORTA – 5 pins
2 power pinsVDD, VSS
2 oscillator pinsOSC1, OSC2
1 RESET pin MCLR
12
25-Nov-2011 Franz Duran 34
PIC16F877A
20Mhz (≈5MIPS), DIP40, +5V
8192 instruction word
368 bytes Data RAM / GPRs
56 SFRs
256 bytes Data EEPROM
25-Nov-2011 Franz Duran 35
PIC16F877A
33 I/O pinsPORTA – 6 pins
PORTB – 8 pins
PORTC – 8 pins
PORTD – 8 pins
PORTE – 3 pins
4 power pins
1 Reset, 2 Clock pins
25-Nov-2011 Franz Duran 36
PIC16F877A TRAINER BOARD
PIC16F877A
Reset Button
20Mhz Oscillator
+5V supply
ICSP connector
SIL connectors
13
25-Nov-2011 Franz Duran 37
PIC16F877A TRAINER BOARD10 LEDs
4 pushbuttons
3 potentiometers
serial comm. ckt.
character LCD
7-seg. display
keypad
4x3 or 4x4
DS1307
real-time IC
serial EEPROM IC
LM35 temp. sensor
25-Nov-2011 Franz Duran 38
PIC16F877A & eICD2
Connect wires to build application circuit
eICD2
ICSP connector
25-Nov-2011 Franz Duran 39
MPLAB IDE 8.xx
integrated development environment (IDE) for PIC freely downloadable (~90MB)
assembler (MPASM®)
HI-TECH® C Compiler
45-day full version (full optimization)
Lite mode (no optimization)
direct support for ICD2/PICKIT2 programmer/debugger
eICD2, ePICKIT2
14
25-Nov-2011 Franz Duran 40
MPLAB IDE 8.xx
Download and Install MPLABhttp://www.microchip.com
Install HI-TECH® Compilerincluded in the MPLAB installer
or download separately from:
http://www.htsoft.com
HI-TECH Sofware
– Brisbane, Australia
– bought by Microchip (March 2009)
25-Nov-2011 Franz Duran 41
MPLAB IDE 8.53
Open MPLAB – an example application
25-Nov-2011 Franz Duran 42
MPLAB IDE 8.53
To create new project: Project > Project Wizard
15
25-Nov-2011 Franz Duran 43
MPLAB IDE 8.53
Step 1: Select Device
25-Nov-2011 Franz Duran 44
MPLAB IDE 8.53
Step 2: Select Language
25-Nov-2011 Franz Duran 45
MPLAB IDE 8.53
Step 3: Select Project Name & Directory
16
25-Nov-2011 Franz Duran 46
MPLAB IDE 8.53
Step 4: Add files
25-Nov-2011 Franz Duran 47
MPLAB IDE 8.53
Project Summary
25-Nov-2011 Franz Duran 48
MPLAB IDE 8.53
Empty ProjectProject Window
Output Window
17
25-Nov-2011 Franz Duran 49
MPLAB IDE 8.53
Create source codeEditor Window
25-Nov-2011 Franz Duran 50
MPLAB IDE 8.53
#include <pic.h>
void main()
TRISB0 = 0;
RB0 = 1;
while(1)
25-Nov-2011 Franz Duran 51
MPLAB IDE 8.53
save as “main.c” in project directory
18
25-Nov-2011 Franz Duran 52
MPLAB IDE 8.53
main.c
25-Nov-2011 Franz Duran 53
MPLAB IDE 8.53
Add main.c Build project
(F10)
25-Nov-2011 Franz Duran 54
MPLAB IDE 8.53
19
25-Nov-2011 Franz Duran 55
WHY C? (& not ASM?)
1. Easy to Use Easy to read
C uses human readable syntax
Assembly uses mnemonics (cryptic!)
Shorter code
saves time & effort
easy “math” statements
2. Portable code can run in other target device
no or few modifications, saves time and effort
25-Nov-2011 Franz Duran 56
WHY C? (& not ASM?)
3. Easy to manage large, complex programs
code reuse of C modules (.h & .c)
Easy to implement state machines
Can use RTOS, not possible in ASM
4. Better performance C can be as fast as ASM
well structured program
C codes can include ASM codes
25-Nov-2011 Franz Duran 57
WHY C? (& not ASM?)
5. C is a universal language (almost!) Learning C will benefit the user down the
road
Can be used in other 8-bit/16-bit/32-bit MCU
implement USB, Ethernet & TCP-IP applications
DSP
Learn desktop programming
foundation for C++, Java, C#, etc..
20
25-Nov-2011 Franz Duran 58
BASIC PIC16F84A CKT.
PIC16F84A CIRCUIT1. PIC16F84A
2. +5v supply
3. Oscillator circuit
4. Reset circuit
5. External peripherals
6. In-circuit serial
programming
connector
25-Nov-2011 Franz Duran 59
BASIC PIC16F84A CKT.
PIC16F84A w/ +5V supply circuit
25-Nov-2011 Franz Duran 60
BASIC PIC16F84A CKT.
PIC16F84A w/ +5V supply circuit & crystal oscillator and loading capacitors
21
25-Nov-2011 Franz Duran 61
BASIC PIC16F84A CKT.
oscillator circuitgenerate a pulse train signal; used to
synchronize MCU internal operations
25-Nov-2011 Franz Duran 62
BASIC PIC16F84A CKT.
Reset circuit
25-Nov-2011 Franz Duran 63
BASIC PIC16F84A CKT.
Interfacing external peripherals
22
25-Nov-2011 Franz Duran 64
BASIC PIC16F84A CKT.
25-Nov-2011 Franz Duran 65
PIC16F877A Trainer Board
25-Nov-2011 Franz Duran 66
IO INTERFACING: LED
LED at RB0RB0 is output
23
25-Nov-2011 Franz Duran 67
LED
5mm LEDIF = 5 – 35 mA
VF = 2V
3mm LEDIF = 1 – 30 mA
VF = 2V
25-Nov-2011 Franz Duran 68
LED
IF
+
-
VF =
2v
+ -VR=3V
If IF = 10mA,R = 3V/10mA
R = 300 Ω
25-Nov-2011 Franz Duran 69
LED
R should not be too largeLED will not turn on
R should not be too smallIF < 30mA
PIC Output pin source
current < 25mA
24
25-Nov-2011 Franz Duran 70
BASIC I/O PROGRAM
Example I/O Program
#include <pic.h>
void main()
TRISB0 = 0;
RB0 = 1;
while(1)
preprocessor directive
main() function
initialization
program loop- infinite loop- super loop
25-Nov-2011 Franz Duran 71
IO PROGRAMMING
Input/Output port - group of 8 pins typical
PORTA – 6 I/O pins
RA5, RA4, RA3, RA2, RA1, RA0
PORTA<5:0>
PORTB – 8 I/O pins
RB7, RB6, RB5, RB4, RB3, RB2, RB1, RB0
PORTB<7:0>
25-Nov-2011 Franz Duran 72
IO PROGRAMMING
PORTC – 8 I/O pins
RC7, RC6, RC5, RC4, RC3, RC2, RC1, RC0
PORTC<7:0>
PORTD – 8 I/O pins
RD7, RD6, RD5, RD4, RD3, RD2, RD1, RD0
PORTD<7:0>
PORTE – 3 I/O pins
RE2, RE1, RE0
PORTE<2:0>
25
25-Nov-2011 Franz Duran 73
IO PROGRAMMING
Special Function Registers for I/OTRISA, PORTA
TRISB, PORTB
TRISC, PORTC
TRISD, PORTD
TRISE, PORTE
25-Nov-2011 Franz Duran 74
IO PROGRAMMING
Consider PORTB..
25-Nov-2011 Franz Duran 75
IO PROGRAMMING: SFRs
PORTB port controlled by 2 special function registers
1. TRISB register PORTB Data Direction Register
8-bit
2. PORTB register PORTB Data Latch Register
8-bit
26
25-Nov-2011 Franz Duran 76
IO PROGRAMMING: SFRs
TRISB
TRISB0
TRISB1
TRISB7
. . . . . . . . .
.
.
.
0 – output1 – input
= XXXXXXXX
25-Nov-2011 Franz Duran 77
IO PROGRAMMING: SFRs
TRISB0
X X X X X X X X0
TRISB0 = 0; //RB0 is output
TRISB
RB0 pin is an output pin
25-Nov-2011 Franz Duran 78
IO PROGRAMMING: SFRs
PORTB
RB0
RB1
RB7
. . . . . . . . .
.
.
.
0 – Logic 01 – Logic 1
= XXXXXXXX
27
25-Nov-2011 Franz Duran 79
IO PROGRAMMING: SFRs
RB0
X X X X X X X X1
RB0 = 1; //LED on
PORTB
RB0 outputs a Logic 1 signal;
~5V
25-Nov-2011 Franz Duran 80
IO PROGRAMMING: SFRs
TRISB0 = 0; //RB0 is output
RB0 = 1; //LED is on
X X X X X X X
X X X X X X X
0
1
TRISB
PORTB
25-Nov-2011 Franz Duran 81
IO PROGRAMMING
EXERCISE:Create new project
Led_demo_2
Turn on LEDs connected to the ff. I/O pins: RB0, RA1, RC3, RD7, RE2
28
25-Nov-2011 Franz Duran 82
IO PROGRAMMING
EXERCISE: (Solution)TRISB0 = 0;
RB0 = 1; //LED1 on
TRISC3 = 0;
RC3 = 0; //LED2 on
TRISD7 = 0;
RD7 = 1; //LED3 on
ADCON1 = 0x06; //All PORTA & PORTE pins are digital I/O
TRISA1 = 0;
RA1 = 1; //LED4 on
TRISE2 = 0;
RE2 = 0; //LED5 on
25-Nov-2011 Franz Duran 83
IO PROGRAMMING
EXERCISE:Turn on all 8 LEDs connected to PORTD
25-Nov-2011 Franz Duran 84
IO PROGRAMMING
SOLUTION:TRISD = 0b00000000; //binary notation
PORTD = 0b11111111;
or
TRISD = 0x00; //hexadecimal notation
PORTD = 0xFF;
or
TRISD = 0; //decimal notation
PORTD = 255;
29
25-Nov-2011 Franz Duran 85
IO INTERFACING: Button
pushbuttoninput device
Tack Switch
25-Nov-2011 Franz Duran 86
IO INTERFACING: Button
If button is not pressed
RIN
10k
+5v
+
-
≈1MΩV = 5v x 1MΩ / (R+1MΩ)
R
V ≈ 5v
RB2
(Logic 1)
25-Nov-2011 Franz Duran 87
IO INTERFACING: Button
If button is pressed
RIN+
-
~1MΩ V = 0v
RB2
(Logic 0)
30
25-Nov-2011 Franz Duran 88
IO INTERFACING: Button
void main()
TRISB0 = 0; //RB0 is an output pin
RB0 = 0; //LED is off
TRISB2 = 1; //RB2 is an input pin
while(1)
if(RB2==0) //If button is pressed,
RB0 = 1; // LED is on,
else //else,
RB0 = 0; // LED is OFF.
25-Nov-2011 Franz Duran 89
IO INTERFACING: Button
R should be large enough to limit the
currentwhen button is
pressedI
25-Nov-2011 Franz Duran 90
IO INTERFACING: Button
R should be large enough to limit the currentwhen I/O pin is
configured as
output and at
Logic 0 (I/O pin
is internally
connected
to ground)
I < 25mA
31
25-Nov-2011 Franz Duran 91
BASICS OF C: #defines#include <pic.h>
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT & LVPDIS);
#define LED RB0
#define BUTTON RB2
#define ON 1
#define OFF 0
#define PRESSED 0
void main()
TRISB0 = 0; //RB0 is an output pin
LED = OFF; //LED is initially off
TRISB2 = 1; //RB2 is an input pin
while(1)
if(BUTTON==PRESSED) //If pushbutton is pressed,
LED = ON; // turn on LED.
else //Else, LED is OFF.
LED = OFF;
25-Nov-2011 Franz Duran 92
BASICS OF C: Conditional
Statements
1. If() If()-else()
If()-else-if()
2. switch()
25-Nov-2011 Franz Duran 93
BASICS OF C: IF Conditional
Statement
If() Simplest conditional statement
if (condition)
statement1;
Ex.if(var>99)
var=0;
32
25-Nov-2011 Franz Duran 94
BASICS OF C: IF Conditional
Statement
If() use else clause (optional)
if (condition)
statement1;
else
statement2;
Ex.if(BUTTON==PRESSED)
LED=1;
else
LED=0;
25-Nov-2011 Franz Duran 95
BASICS OF C: IF Conditional
Statement
If()-else-if() if (condition1)
statement1;
else if (condition2)
statement2;
else if (condition3)
statement3;
else
statement4;
25-Nov-2011 Franz Duran 96
BASICS OF C: Switch()
switch()Allow comparison of a single variable (or
expression) to multiple values
Code associate with the matching value is executed
33
25-Nov-2011 Franz Duran 97
BASICS OF C: Switch()var1 = get_input_from_user()
switch(var1)
case 0x00:
statement1;
break;
case 0x01:
statement2;
break;
case 0x02:
statement3;
break;
case 0x03:
statement4;
break;
default:
statement5;
break
25-Nov-2011 Franz Duran 98
BASICS OF C: Loops
Loops used to repeatedly execute specific
statements
3 loop statements in C1. for() loop
2. while() loop
3. do-while() loop
25-Nov-2011 Franz Duran 99
BASICS OF C: FOR Loop
void main()
unsigned int i; //a variable.
TRISB0 = 0; //RB0 pin is configured as an output
RB0 = 0; //LED is initially off
while(1)
RB0 = 1; //LED is ON
for(i=0;i<50000;i++) //delay
//empty body
RB0 = 0; //LED is OFF
for(i=0;i<50000;i++) //delay
//empty body
34
25-Nov-2011 Franz Duran 100
BASICS OF C: FOR Loop
for(i=0;i<50000;i++)
...//code goes here
i<50000?
i=0
TRUE
FALSE
//codes
exit
start
i++
25-Nov-2011 Franz Duran 101
BASICS OF C: FOR Loop
i=0;
for( ;i<50000; )
//codes here
i++;
OR
for(i=50000;i>0;i--)
//codes here
25-Nov-2011 Franz Duran 102
BASICS OF C: WHILE Loop
while(condition)
...//code goes here
condition?
TRUE
FALSE
//codes
exit
start
35
25-Nov-2011 Franz Duran 103
BASICS OF C: WHILE Loop
EXERCISE:Modify previous example to used while()
loop
25-Nov-2011 Franz Duran 104
BASICS OF C: DO-WHILE Loop
do
...//code goes here
while(condition);
condition?
TRUE
FALSE
//codes
exit
start
25-Nov-2011 Franz Duran 105
BASICS OF C: Loops
Which loop statements to use?If number of iteration is controlled, use for()
loop
If a simple test of condition is used, use while() loop
If a simple test of condition is used AND the code block should be executed at least once, use do-while() loop
36
25-Nov-2011 Franz Duran 106
BASICS OF C: Variables
Variables
program data that varies during run-time
temporary data
placed in volatile memory
General Purpose Registers (GPR)
PIC16F877A
– 368 Bytes GPR
25-Nov-2011 Franz Duran 107
BASICS OF C: Variables
unsigned char var1; //range of values: 0-255
var1 = 100; //OK
var1 = 500; //not OK!
var1 = -10; //not OK!
signed char var2; //range of values: -128 to 127
var2 = 100; //OK
var2 = -1000; //not OK!
var2 = 150; //not OK!
unsigned int temp = 100; // range of values: 0-65535
temp = 50000; //OK
temp = 100000; //not OK!
25-Nov-2011 Franz Duran 108
BASICS OF C: Variables bit (1-bit) (0 – 1) char (8-bit) (-128 – 127) unsigned char (8-bit) (0 – 255) short (16-bit) (-32768 – 32767) unsigned short (16-bit) (0 – 65535) int (16-bit) (-32768 – 32767) unsigned int (16-bit) (0 – 65535) short long (24-bit) (-8388608 – 8388607) unsigned short long (24-bit) (0 – 16777215) long (32-bit) (21474833648 – 2147483647) unsigned long (32-bit) (0 – 4294967295) float (24-bit) (1.17549435e-38 - 3.40277e+38) double (24-bit) (1.17549435e-38 - 3.40277e+38 ) double (32-bit) (1.17549435e-38 - 3.40282347e+38 )
37
25-Nov-2011 Franz Duran 109
BASICS OF C: Operators
1.= (Assignment operator)
2. Mathematical operators
3. Relational operators
4. Logical operators
5. Bitwise operators
25-Nov-2011 Franz Duran 110
BASICS OF C: Operators
= (Assignment operator) x = y; //assign the value of y
//to the variable x
Variable name = expression
Expression - anything that evaluates to a number i.e.
int sum;
sum = a + b; //a + b is an expression
25-Nov-2011 Franz Duran 111
BASICS OF C: Operators
Mathematical operators1. + (addition) ex. x + y
2. - (subtraction) ex. x - y
3. * (multiplication) ex. x * y
4. / (division) ex. x / y
5. % (modulus) ex. x % y
6. ++ (increment) ex. x++, ++x
7. -- (decrement) ex. x--, --x
38
25-Nov-2011 Franz Duran 112
BASICS OF C: Operators
Relational Operators
1.== (equal to) ex. x==y
2.> (greater than) ex. x>y
3.>= (greater than or equal to) ex. x>=y
4.< (lesser than) ex. x<y
5.<= (lesser than or equal to) ex. x<=y
6.!= (not equal to) ex. x!=y
25-Nov-2011 Franz Duran 113
BASICS OF C: Operators
Logical Operators1. && (Logical AND)
2. || (Logical OR)
3. ! (Logical NOT)
25-Nov-2011 Franz Duran 114
BASICS OF C: Operators
EXERCISE:Turn on LED1 if BUTTON1 or BUTTON2
is pressed
Modify: Turn on LED1 if BUTTON1 and BUTTON2
are pressed
39
25-Nov-2011 Franz Duran 115
BASICS OF C: Operators
Bitwise Operators1. & (Bitwise AND)
2. | (Bitwise OR)
3. ~ (Bitwise Complement)
4. ^ (Bitwise Exclusive-OR)
5. << (Leftshift)
6. >> (Rightshift)
25-Nov-2011 Franz Duran 116
BASICS OF C: & Operator
A B A & B
0 0 0
0 1 0
1 0 0
1 1 1
AND (&) operator truth table:
25-Nov-2011 Franz Duran 117
BASICS OF C: & Operator
Bitwise-AND operator
Example: RB0 = RB0 & 0; //clear RB0
Equivalent to: RB0 = 0; //clear RB0
40
25-Nov-2011 Franz Duran 118
BASICS OF C: & Operator
Example:Clear PORTB<3:0> and RB6
Initial solution
RB0 = 0;
RB1 = 0;
RB2 = 0;
RB3 = 0;
RB6 = 0;
Alternative (better solution):PORTB = PORTB & 0b10110000;
PORTB &= 0b10110000;
PORTB &= ~0x4F;
25-Nov-2011 Franz Duran 119
BASICS OF C: | Operator
A B A | B
0 0 0
0 1 1
1 0 1
1 1 1
OR (|) operator truth table:
25-Nov-2011 Franz Duran 120
BASICS OF C: | Operator
Bitwise-OR operator
Example: RB0 = RB0 | 1; //set RB0
Equivalent to: RB0 = 1; //set RB0
41
25-Nov-2011 Franz Duran 121
BASICS OF C: Operators
Example:Configure PORTD<6:5> and PORTD<2:1> as
input: Initial solution
TRISD6=1;
TRISD5=1;
TRISD2=1;
TRISD1=1;
Alternative (better solution):TRISD = TRISD | 0b01100110;
TRISD |= 0x66;
25-Nov-2011 Franz Duran 122
BASICS OF C: Operators
Masking techniqueTo clear a bit (or bits), AND this bit with 0
To set a bit (or bits), OR this bit with 1
Ex: PORTB &= 0b10110000;
TRISD |= 0x66;
Mask values
25-Nov-2011 Franz Duran 123
BASICS OF C: ^ Operator
A B A | B
0 0 0
0 1 1
1 0 1
1 1 0
XOR (^) operator truth table:
42
25-Nov-2011 Franz Duran 124
BASICS OF C: ^ Operator
Bitwise-XOR operatorToggle operator
Example: RB0 = RB0 ^ 1; //toggle RB0
Equivalent to: RB0 = ~RB0; //toggle RB0
PORTB ^= 0b00000011;
25-Nov-2011 Franz Duran 125
BASICS OF C: ^ Operator
EXERCISE:Create a LED blinker application using ^
operator
Toggle two LEDs alternately
25-Nov-2011 Franz Duran 126
BASICS OF C: << and >> Operators
<< (shift left)
>> (shift right)
Ex:unsigned char var1 = 0b00000001;
PORTB = var1 << 2; //PORTB = 0b00000100
43
END