8-bit PIC Microcontrollers in C

canolaokahumpkaΗλεκτρονική - Συσκευές

2 Νοε 2013 (πριν από 3 χρόνια και 10 μήνες)

103 εμφανίσεις

Martin Bates

Elsevier 2008

Programming

8
-
bit PIC

Microcontrollers

in C

This presentation contains illustrations from the book


Programming 8
-
bit PIC Microcontrollers in C



Part 1

Microcontroller Systems



describes in detail the internal architecture and interfaces


available in the PIC 16F887A, a typical PIC chip, as well as


outlining the main features of the development system


Part 2 C Programming Essentials


provides simple example programs for the microcontroller


which show the basic principles of C programming,


and interfacing to basic I/O devices


Part 3

C Peripheral Interfaces


provides example programs for operating PIC chips with a


full range of peripherals, using timers and interrupts

MICROCONTROLLER

SYSTEMS

Part 1

Figure 1.1

Elements of a digital controller


CPU


Central

Processing

Unit



Input

Peripherals


Output

Peripherals

ROM

Read Only

Memory


RAM

Read & Write

Memory

Program

download

User
input

User
output

The microcontroller contains all these elements in one chip

Figure 1.2


16F877 pin
-
out

The microcontroller pins have multiple functions

Figure 1.3

PIC 16F877 MCU Block diagram

Shows the main parts of the chip in simplified form

Flash

ROM

Program

Memory

8192

x 14 bits


0000


1FFF

Instruction Register

MCU

control

lines

Program Counter

(13 bits)

Stack

13 bits

x 8
levels


RAM

File

Registers

368

X 8 bits


000
-
1FF

Data Bus

(8 bits)


File Select

Register

Working (W)

Register


File Address

Literal

Op
-
code

Instructions

Address

Arithmetic & Logic
Unit


Ports, Timers

ADC, Serial I/O


Status bits

Timing control

EEPROM

256 bytes

Clock

Reset

Port A B C D E

Program address

Instruction

Decode &

CPU control

Status (Flag)

Register


Table 1.1

PIC16F877 simplified file register map







Bank 0 (000


07F)


Bank 1 (080


0FF)


Bank 2 (100
-
180)


Bank 3(180
-
1FF)





Address


Register


Address


Register


Address


Register


Address


Register





000h


Indirect


080h


Indirect


100h


Indirect


180h


Indirect





001h


Timer0


081h


Option


101h


Timer0


181h


Option





002h


PC Low


082h


PC Low



102h


PC Low



182h


PC Low






003h


Status Reg


083h


Status Reg


103h


Status Reg


183h


Status Reg





004h


File Select


084h


File Select


104h


File Select


184h


File Select





005h


Port A data


085h


PortA direction

105h


-


185h


-





006h


Port B data


086h


PortB direction

106h


Port B data


186h


PortB direction





007h


Port C data


087h


PortC direction

107h


-


187h


-





008h


Port D data


088h


PortD direction

108h


-


188h


-





009h


Port E data


089h


PortE direction

109h


-


189h


-





00Ah


PC High

08Ah


PC High

10Ah


PC High

18Ah


PC High




00Bh


Interrupt Control


08Bh


Interrupt Control


10Bh


Interrupt Control


18Bh


Interrupt Control





00Ch

to

01Fh



20 Peripheral

Control

Registers




08Ch

to

09Fh



20 Peripheral

Control

Registers


10Ch

to

10Fh





4 Peripheral

Control

Registers



18Ch

to

18Fh



4 Peripheral

Control

Registers






110h

to

16Fh


96 General

Purpose

Registers



190h

to

1EFh



96 General

Purpose

Registers



020h

to

06Fh




80 General

Purpose

Registers



0A0h

to

0EFh



80 General

Purpose

Registers






070h

to

07Fh


16 Common

Access GPRs



0F0h

to

0FFh


Accesses

70h


7Fh

170h

to

17Fh


Accesses

70h


7Fh


1F0h

to

1FFh



Accesses

70h


7Fh





Table 1.2

PIC microcontroller types



MCU




Pins


Data

word

(bits)


Program

memory

(bytes)




Typical

Instruction

Set




Speed

MIPS




Comment


10FXXX




= 6


8


<= 512


33 x 12
bits


<= 2


Low pin count, small form factor,
cheap

No EEPROM, none low power,
assembler program

12FXXX




= 8


8


<= 2 KB


12 / 14 bits


<= 5


Low pin count, small form factor,
cheap

EEPROM, 10
-
bit ADC, some low
power, assembler

16FXXX




<= 64


8


<= 14 KB


35 x 14
bits


<= 5


Mid
-
range, UART, I2C, SPI

many low power, C or assembler
program

18FXXXX




<=
100


8


<= 128 KB


75 x 16
bits


<= 16


High range, CAN, USB

J series 3V supply, C program

24FXXXX




<=
100


16


<= 128 KB


76 x 24
bits




= 16


Power range, 3V supply, no
EEPROM,

data RAM < 8 KB, C program

Figure 1.4

I/O pin operation

The pin can be set for input or output data transfer

CPU Data Bus


Output

Current

Driver

Output

Data

Latch

Data

Direction

Latch

Tri
-
state

Output

Enable

Input

Data

Latch

Write data bit

Read data
bit

Write TRIS bit

Analogue input

multiplexer

Figure 1.5

General Timer Operation

A binary counter is used as a timer when driven from the clock

Binary Counter

Pre
-
scaler

(clock
divide)

Post
-
scaler

(output
divide)

Timer

Overflow/

Timeout

(Interrupt)

Flag

Clock

Source

Select

Instruction
Clock

External Pulse

Capture
register

Compare
register

Capture
signal

Match flag

Figure 1.6

ADC operation

The ADC converts an analog input into a binary code

ANx


Analogue

to Digital

Converter


Vref+

Input volts 0
-
Vf

Reference volts, Vf

8
-
bit or 16
-
bit

integer result

Setup ADC

Read ADC

Figure 1.7

Comparator operation


Vc+




Vc
-

Compartor

status bit

Vc+ > Vc
-

The comparator simply sets a bit if one input is higher than the other

Figure 1.8

Parallel Slave Port operation

The PSP allows an external data bus to be connected to the MCU


Parallel

Slave

Port

Chip select

Read

Write




EXTERNAL

Data x 8

Interrupt






INTERNAL

Data x 8

Table 1.3

Interrupts sources in the PIC 16F877

Interrupt Source


Interrupt trigger event


CCS C Interrupt label


TIMERS


Timer 0


Timer 0 register overflow


INT_TIMER0


Timer 1


Timer 1 register overflow


INT_TIMER1


CCP 1


Timer 1 capture or compare detected


INT_CCP1


Timer 2


Timer 2 register overflow


INT_TIMER2


CCP2


Timer 2 capture or compare detected


INT_CCP2


PORTS


RB0/INT pin


Change on single pin RB0


INT_EXT


Port B pins


Change on any of four pins RB4


RB7


INT_RB


Parallel Slave Port


Data received at PSP (write input active)


INT_PSP


Analog Converter


A/D conversion completed


INT_AD


Analog Comparator


Voltage compare true


INT_COMP


SERIAL


UART Serial Port


Received data available


INT_RDA


UART Serial Port


Transmit data buffer empty


INT_TBE


SPI Serial Port


Data transfer completed (read or write)


INT_SSP


I2C Serial Port


Interface activity detected


INT_SSP


I2C Serial Port


Bus collision detected


INT_BUSCOL


MEMORY


EEPROM


Non
-
volatile data memory write complete


INT_EEPROM


Program Execution









Program Execution

1

Start counter

statement

2

Run

Counter

until

overflow

5

Time
-
out

Process

(Interrupt

Service

Routine)


7

Continue

3

Timeout

Interrupt

6

Return

from

Interrupt

4

Jump to

ISR

Figure 1.9

Timer Interrupt Process

Time
-
out forces the program to be suspended and the ISR executed


PIC MCU



TX1 Transmit


RX1 Receive



Ground


HOST PC





RX2


TX2

COM PORT

Ground


Line

Driver

Interface

Figure 1.10

USART RS232 Signal

Line drivers convert the signal to a bipolar, higher voltage

+/
-

12V

Figure 1.11

Typical USART RS232 signal

Bit

2


Bit

3

Idle

Start

Bit

Bit

0

Bit

1


Bit

4

Bit

5

Bit

6

Bit

7

Stop

Bit

Time

1



0

Bit period

The data bits are timed from the falling edge of the start bit


Master


Serial Data Out, SDO

Serial Data In, SDI

Serial Clock, SCK










Slave Select SS1

Outputs SS2

SS3




Slave 1


SDO

SDI

SCK


!SS

Slave 2


SDO

SDI

SCK


!SS

Figure 1.12

SPI Connections

SPI uses hardware slave selection and separate clock

Figure 1.13

SPI Signals

7 6 5 4 3 2 1 0

Data bits

SDO/SDI

SCK

Clock

Each data bit is transferred on the falling edge of the clock

Master

Slave1

Slave2

+5V

SDA

SCL

etc

Figure 1.14

I
2
C Connections

Slave selection uses addresses issued by the Master

7 6 5 4 3 2 1 0

SDA

SCL

Acknowledge

Address / Data bits

Start

Figure 1.15

I
2
C Signals

Data is strobed in using the master clock, and reception

is acknowledged by the slave by taking the data line low

Listing 1.1

A simple C program

/*



OUTBYTE.C MPB 2
-
1
-
07 V1.0

*/



#include "16F877A.h"



// MCU select



void main()




// Main block

{


output_D(255);



// Switch on outputs

}







This minimal program outputs a binary code to Port D

Listing 1.2

Program hex file

:10000000
00308A0004280000840183131F30830518

:
1000100083161F149F141F159F1107309C00880121

:
08002000FF30831288006300
29

:02400E00
733F
FE

:00000001FF

;PIC16F877A





The machine code is downloaded as a binary file to the chip

Figure 1.16

Screenshot of MPLAB Project

The C program is compiled and tested in simulation mode

Figure 1.17

PICkit2 demo system hardware

Basic hardware for downloading the program to a test board

Figure 1.18

ICSP target board connections

Application Board

MCU


Vpp/!MCLR

Vdd

Vss

PGD

PGC



1

2

3

4

5


ICSP

Interface

Reset

10k

Vdd Vss

Board +5V Supply

Connections to the target chip for programming

Figure 1.19

PICkit2 programmer dialogue

On
-
screen window for program downloading to target chip

Figure 1.20

Microchip ICD2 module

ICD2 provides in
-
circuit debugging

Figure 1.21

ICD2 program and debug system


Host PC

MPLAB
development
system

+ C Compiler


ICD2

interface


PIC MCU

Target

System

USB

6
-
WAY

connector

Block diagram of the ICD2 programming and in
-
circuit debugging system

Figure 1.22

ICD debugging windows

User interface for in
-
circuit programming & debugging