introduction to pic16 microcontroller programming ... 1 am introductio… · 1 introduction to...

43
1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. 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

Upload: duongnhi

Post on 30-Jan-2018

245 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 2: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 3: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 4: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 5: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 6: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 7: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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”

Page 8: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 9: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 10: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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)

Page 11: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 12: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 13: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 14: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 15: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 16: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 17: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 18: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 19: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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..

Page 20: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 21: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 22: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 23: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 24: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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>

Page 25: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 26: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 27: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 28: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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;

Page 29: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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)

Page 30: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 31: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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;

Page 32: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 33: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 34: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 35: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 36: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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 )

Page 37: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 38: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 39: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 40: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 41: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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:

Page 42: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

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

Page 43: Introduction to PIC16 Microcontroller Programming ... 1 AM Introductio… · 1 Introduction to PIC16 Microcontroller Programming & Interfacing November 25-27, 2011 Engr. Franz Duran,

43

END