20
Programmation du Microcontrôleur PIC en C 1

Programmation du Microcontrôleur PIC en C - e-monsitesystemesembarques.e-monsite.com/.../microcontroleurs.pic.partie1.pdf · 00Bh Interrupt Control 08Bh Interrupt Control 10Bh Interrupt

Embed Size (px)

Citation preview

Programmation du

Microcontrôleur PIC

en C

1

Les Elements D’un Microcontôleur

CPU

Central

Processing

Unit

Input

Peripherals

Output

Peripherals

ROM

Read Only

Memory

RAM

Read & Write

MemoryProgram

download

User

input

User

output

Le microcontrôleur contient tous ces éléments dans une seule puce

2

Figure 1.2 16F877 pin-out

Les broches du microcontrôleur ont de multiples fonctions 3

Figure 1.3 PIC 16F877 MCU Block diagram

Présente les principales parties de la puce sous une forme simplifiée

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

4

Les registres du PIC16F877

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

5

Les types du microcontroller PIC

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

1008 <= 128 KB

75 x 16

bits<= 16 High range, CAN, USB

J series 3V supply, C program

24FXXXX <=

10016 <= 128 KB

76 x 24

bits = 16Power range, 3V supply, no

EEPROM,

data RAM < 8 KB, C program

6

I/O pin operation

La broche peut être réglée pour l'entrée ou la sortie de données

CPU Data Bus Output

Current

Driver

Output

Data

Latch

Data

Direction

LatchTri-state

Output

Enable

Input

Data

Latch

Write data bit

Read data

bit

Write TRIS bit

Analogue input

multiplexer

7

Operation du Timer

Un compteur binaire est utilisée comme une horloge lorsqu'il est

entraîné à partir de l'horloge

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

8

Conversion analogique/numerique ADC

Le ADC convertit une entrée analogique en un code binaire

ANx

Analogue

to Digital

Converter

Vref+

Input volts 0-Vf

Reference volts, Vf8-bit or 16-bit

integer result

Setup ADC

Read ADC

9

Comparateur

Vc+

Vc-

Compartor

status bit

Vc+ > Vc-

Le comparateur établit si une entrée est supérieure à l'autre

10

Opérations sur Port parallèle

La PSP permet à un bus de données externe pour être

connecté à l'unité MCU

Parallel

Slave

Port

Chip select

Read

Write

EXTERNAL

Data x 8

Interrupt

INTERNAL

Data x 8

11

Les sources d’interruptions pour 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_EEPROM12

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

Principe de l’interruption Timer

Force le délai d'expiration que le programme soit suspendu et que le

ISR exécuté 13

PIC MCU

TX1 Transmit

RX1 Receive

Ground

HOST PC

RX2

TX2

COM PORT

Ground

Line

Driver

Interface

Signal USART RS232

Les ”Line Driver” permets de convertir le signal à un bipolaire

avec une tension plus élevée

+/- 12V

14

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

Connections SPI

SPI utilise la sélection matérielle de l’esclave et de l'horloge séparée

15

Master Slave1 Slave2+5V

SDA

SCL

etc

Connections I2C

La sélection de l'esclave utilise des adresses émises par le maître

16

Un programme C simple

#include "16F877A.h" // MCU select

void main() // Main block

{

output_D(255); // Switch on outputs

}

Ce programme minimal envoi un code binaire « 255 » sur le Port D

17

Projet MPLAB

Le programme C est compilé et testé en mode simulation18

module Microchip ICD2/ICD3

ICD2/ICD3 fournit le débogage in-circuit

19

ICD fenêtres de débogage

Interface utilisateur pour la programmation in-circuit et le débogage20