Vous êtes sur la page 1sur 30

Programming 8-bit PIC Microcontrollers in C

Martin Bates Elsevier 2008

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

Part 1

MICROCONTROLLER SYSTEMS

Figure 1.1

Elements of a digital controller

User input

Input Peripherals

CPU Central Processing Unit

Output Peripherals

User output

Program download

ROM Read Only Memory

RAM Read & Write Memory

The microcontroller contains all these elements in one chip

Figure 1.2

16F877 pin-out

The microcontroller pins have multiple functions

Figure 1.3
Flash ROM Program Memory 8192 x 14 bits 0000 1FFF

PIC 16F877 MCU Block diagram


Program Counter (13 bits) Address Stack 13 bits x8 levels

Instructions

RAM File Registers 368 X 8 bits 000-1FF

Instruction Register

File Address Program address


Working (W) Register Arithmetic & Logic Unit File Select Register

Literal Status bits Opcode

Status (Flag) Register

Data Bus (8 bits) EEPROM 256 bytes Ports, Timers ADC, Serial I/O

Instruction Decode & CPU control

MCU control lines

Timing control Clock Reset Port A B C D E

Shows the main parts of the chip in simplified form

Table 1.1
Bank 0 (000 07F) Address 000h 001h 002h Register Indirect Timer0 PC Low

PIC16F877 simplified file register map


Bank 1 (080 0FF) Address 080h 081h 082h Register Indirect Option PC Low Bank 2 (100-180) Address 100h 101h 102h Register Indirect Timer0 PC Low Bank 3(180-1FF) Address 180h 181h 182h Register Indirect Option PC Low

003h
004h 005h 006h 007h 008h 009h 00Ah 00Bh 00Ch to 01Fh 020h to 06Fh 070h to 07Fh

Status Reg
File Select Port A data Port B data Port C data Port D data Port E data PC High Interrupt Control 20 Peripheral Control Registers 80 General Purpose Registers 16 Common Access GPRs

083h
084h 085h 086h 087h 088h 089h 08Ah 08Bh 08Ch to 09Fh 0A0h to 0EFh 0F0h to 0FFh

Status Reg
File Select PortA direction PortB direction PortC direction PortD direction PortE direction PC High Interrupt Control 20 Peripheral Control Registers 80 General Purpose Registers Accesses 70h 7Fh

103h
104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch to 10Fh 110h to 16Fh 170h to 17Fh

Status Reg
File Select Port B data PC High Interrupt Control 4 Peripheral Control Registers 96 General Purpose Registers Accesses 70h 7Fh

183h
184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch to 18Fh 190h to 1EFh 1F0h to 1FFh

Status Reg
File Select PortB direction PC High Interrupt Control 4 Peripheral Control Registers 96 General Purpose Registers Accesses 70h 7Fh

Table 1.2
Data word (bits)

PIC microcontroller types


Program memory (bytes) Typical Instruction Set

MCU

Pins

Speed MIPS

Comment

10FXXX

=6

<= 512

33 x 12 bits

<= 2

Low pin count, small form factor, cheap No EEPROM, none low power, assembler program

12FXXX

=8

<= 2 KB

12 / 14 bits

<= 5

Low pin count, small form factor, cheap EEPROM, 10-bit ADC, some low power, assembler
Mid-range, UART, I2C, SPI many low power, C or assembler program

16FXXX

<= 64

<= 14 KB

35 x 14 bits

<= 5

18FXXXX

<= 100

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

Write TRIS bit

Data Direction Latch

Tri-state Output Enable Output Current Driver

CPU Data Bus Write data bit

Output Data Latch

Read data bit

Input Data Latch

Analogue input multiplexer

The pin can be set for input or output data transfer

Figure 1.5

General Timer Operation


Capture signal Capture register

Instruction Clock External Pulse

Clock Source Select

Prescaler (clock divide)

Binary Counter

Post-scaler (output divide)

Timer Overflow/ Timeout (Interrupt) Flag

Compare register

Match flag

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

Figure 1.6

ADC operation

Input volts 0-Vf

ANx Analogue to Digital Converter

Setup ADC Read ADC 8-bit or 16-bit integer result

Reference volts, Vf

Vref+

The ADC converts an analog input into a binary code

Figure 1.7

Comparator operation

Vc+ Compartor status bit Vc+ > Vc-

Vc-

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

Figure 1.8

Parallel Slave Port operation

Chip select Read Write

Interrupt
Parallel Slave Port

EXTERNAL Data x 8

INTERNAL Data x 8

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

Table 1.3
Interrupt Source Timer 0 Timer 1 CCP 1 Timer 2 CCP2 RB0/INT pin Port B pins Parallel Slave Port Analog Converter Analog Comparator UART Serial Port UART Serial Port SPI Serial Port I2C Serial Port I2C Serial Port EEPROM

Interrupts sources in the PIC 16F877


Interrupt trigger event TIMERS Timer 0 register overflow Timer 1 register overflow Timer 1 capture or compare detected Timer 2 register overflow Timer 2 capture or compare detected PORTS Change on single pin RB0 Change on any of four pins RB4 RB7 Data received at PSP (write input active) A/D conversion completed Voltage compare true SERIAL Received data available Transmit data buffer empty Data transfer completed (read or write) Interface activity detected Bus collision detected MEMORY Non-volatile data memory write complete INT_EEPROM INT_RDA INT_TBE INT_SSP INT_SSP INT_BUSCOL INT_EXT INT_RB INT_PSP INT_AD INT_COMP INT_TIMER0 INT_TIMER1 INT_CCP1 INT_TIMER2 INT_CCP2 CCS C Interrupt label

Figure 1.9

Timer Interrupt Process


Program Execution

1 Start counter statement

2 Run Counter until overflow

Program Execution

3 Timeout Interrupt 4 Jump to ISR


7 Continue 5 Time-out Process (Interrupt Service Routine)

6 Return from Interrupt

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

Figure 1.10

USART RS232 Signal

HOST PC

PIC MCU

TX1 Transmit RX1 Receive Ground

Line Driver Interface

RX2 +/- 12V

TX2 COM PORT Ground

Line drivers convert the signal to a bipolar, higher voltage

Figure 1.11

Typical USART RS232 signal

Bit period 1

0 Idle Start Bit Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Stop Bit

Time

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

Figure 1.12
Master Serial Data Out, SDO Serial Data In, SDI Serial Clock, SCK

SPI Connections

Slave 1 SDO SDI SCK !SS Slave Select Outputs SS1 SS2 SS3

Slave 2 SDO SDI SCK !SS

SPI uses hardware slave selection and separate clock

Figure 1.13

SPI Signals

SDO/SDI

Data bits

SCK

Clock

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

Figure 1.14

I2C Connections

+5V

Master

Slave1

Slave2

etc

SDA SCL

Slave selection uses addresses issued by the Master

Figure 1.15
Start SDA
7 6

I2C Signals
Acknowledge
2 1 0

Address / Data bits


5 4 3

SCL

Data is strobed in using the master clock, and reception is acknowledged by the slave by taking the data line low

Listing 1.1
/* OUTBYTE.C */ #include "16F877A.h" void main() { output_D(255); } MPB 2-1-07

A simple C program

V1.0

// MCU select // Main block // Switch on outputs

This minimal program outputs a binary code to Port D

Listing 1.2

Program hex file

:1000000000308A0004280000840183131F30830518 :1000100083161F149F141F159F1107309C00880121 :08002000FF3083128800630029 :02400E00733FFE :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 Reset 10k

MCU
Vpp/!MCLR Vdd Vss PGD PGC

ICSP Interface

1 2 3 4 5 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

USB

ICD2 interface

6-WAY connector

PIC MCU Target System

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

Figure 1.22

ICD debugging windows

User interface for in-circuit programming & debugging

Vous aimerez peut-être aussi