pic18f ola mundo

15
Introdução a programação de micro controladores PIC “Olá mundo” Programação em C utilizando o Mplab C18 e PIC´s da família 18F 1 Luis Rafael 2010 http://www.lingtronic.com

Upload: luis-rafael

Post on 07-Apr-2015

518 views

Category:

Documents


5 download

DESCRIPTION

Este tutorial mostra como utilizar o programa MPLab IDE V8 bem como a suite C18, para programar e em C, e compilar um pequeno programa como exemplo de código minimalista desta linguagem de programação. Neste caso será por um LED a piscar, com um microcontrolador da família PIC, já que para por o mesmo num display requeria mais algumas noções.

TRANSCRIPT

Page 1: pic18f ola mundo

Introdução a programação de micro controladores PIC

“Olá mundo”

Programação em C utilizando

o Mplab C18 e PIC´s da

família 18F

1

Luis Rafael 2010

http://www.lingtronic.com

Page 2: pic18f ola mundo

•Facilidade de Aquisição

•Baixo consumo

•Entradas e Saídas

•Conversor ADC

•Fácil Interligação com outros dispositivos

•Interrupções externas e internas

Microchip Technology

2

Luis Rafael 2010

http://www.lingtronic.com

Page 3: pic18f ola mundo

•8 bits , 16 bits, mais recentemente 32

•Extensa variedade de modelos e periféricos internos

• Programação por Memória flash

•Podem ser programados em assembler, Pascal C Basic

•Compiladores geram um código em formato hexadecimal

•Gravados na memória de programa desses microcontroladores.

•Para tal procedimento, utiliza-se um hardware especial (gravador) acoplado a um PC.

•PICs com memória FLASH são altamente flexíveis na fase de desenvolvimento pois permitem uma rápida alteração do código de programa.

•Como ferramentas de desenvolvimento, encontram-se disponíveis: gravadores, depuradores, emuladores, placas de protótipos, etc.

3

Luis Rafael 2010

http://www.lingtronic.com

Page 4: pic18f ola mundo

Programar em C

#include <p18cxxx.h>

void main(void)

{

/* Coloca os registos a O e define o port B como saidas */

LATB = 0x00;

TRISB = 0x00;

/* Ligar um led B0 */

LATBbits.LATB0 = 1;

/* PORTDbits.RB0 =1 teria funcionado mas não é a maneira

correcta*/

while(1);

}

Microcontrolador – PIC

4

Luis Rafael 2010

http://www.lingtronic.com

Page 5: pic18f ola mundo

Programar em C

.

.

.

while(1)

{

/* Liga LED, B0 */

LATBbits.LATB0 = 1;

/* Desliga LED, B0 */

LATBbits.LATB0 = 0;

}

int i; ...

LATBbits.LATB0 = 1;

for ( i = 0; i < 32768; i++);

nop;

LATBbits.LATB0 = 1;

for ( i = 0; i < 32768; i++);

nop;

Microcontrolador – PIC

5

Luis Rafael 2010

http://www.lingtronic.com

Page 6: pic18f ola mundo

Tempos e Delays

Supondo a utilização de 10 MHz clock com 250

nanossegundos tempo de ciclo de instrucao.

Pode ser conseguido com a utilização da seguinte instrução

Delay10KTCYx 200;

São presisas 2,000,000 ciclos de intrusões para

ter um atraso de 500 milissegundos

Microcontrolador – PICc

6

Luis Rafael 2010

http://www.lingtronic.com

Page 7: pic18f ola mundo

#include <p18cxxx.h>

#include <delays.h> /* Para utilizar as funcoes

de delay */

void main(void)

{

/* Config PORT D como saidas digitais */

LATD = 0x00;

TRISD = 0x00;

while(1)

{

/* Turn on LED, D1 */

LATDbits.LATD0 = 1;

/* Delay de 500 milissegundos */

Delay10KTCYx(200);

/* Turn off LED, D1 */

LATDbits.LATD0 = 0;

/* Delay de 500 milissegundos */

Delay10KTCYx(200);

}

} 7

Luis Rafael 2010

http://www.lingtronic.com

Page 8: pic18f ola mundo

Function Functionality Provided Parameters Example

Usage

Delay in

Example

Delay1TCY Delay one instruction

cycle. Same as Nop(). None Delay1TCY();

1 Instruction

Cycle

Delay10TC

Yx

Delay in multiples of 10

instruction cycles.

unsigned char

(8 bit value) Delay10TCYx(10);

100

Instruction

Cycles

Delay100T

CYx

Delay in multiples of 100

instruction cycles.

unsigned char

(8 bit value) Delay100TCYx(10);

1,000

Instruction

Cycles

Delay1KTC

Yx

Delay in multiples of

1,000 instruction cycles.

unsigned char

(8 bit value) Delay1KTCYx(10);

10,000

Instruction

Cycles

Delay10KT

CYx

Delay in multiples of

10,000 instruction

cycles.

unsigned char

(8 bit value) Delay10TCYx(10);

100,000

Instruction

Cycles

Microcontrolador – Delays.h

8

Luis Rafael 2010

http://www.lingtronic.com

Page 9: pic18f ola mundo

#define LED0 LATDbits.LAT0

#define ON 1

#define OFF 0

#include <p18cxxx.h>

#include <delays.h> /* This is needed for the delay functions */

/* Define LED0 as LATDbits.LAT0 */

#define LED0 LATDbits.LAT0

void main(void)

{

/* Set PORT D as digital outputs */

LATD = 0x00;

TRISD = 0x00;

/* Loop forever */

while(1)

{

/* Turn on LED, D1 */

LED0 = 1;

9

Luis Rafael 2010

http://www.lingtronic.com

Page 10: pic18f ola mundo

MPLAB

10

Luis Rafael 2010

http://www.lingtronic.com

Page 11: pic18f ola mundo

MPLAB

11

Luis Rafael 2010

http://www.lingtronic.com

Page 12: pic18f ola mundo

MPLAB

12

Luis Rafael 2010

http://www.lingtronic.com

Page 13: pic18f ola mundo

MPLAB

Ficheiros a Adicionar

•Ficheiro com o código fonte

na pasta source files

•Ficheiro de configuração e

outras bibliotecas na pasta

header files

•Ficheiro .Lib do

microcontrolador a utilizar

na pasta Library Files

•Ficheiro *.lkr do

microcontrolador a utilizar

13

Luis Rafael 2010

http://www.lingtronic.com

Page 14: pic18f ola mundo

Configuration Bits

#pragma config OSC = HS /* Sets the oscillator mode to HS */

#pragma config WDT = OFF /* Turns the watchdog timer off */

#pragma config LVP = OFF /* Turns low voltage programming off */

#pragma config DEBUG = OFF /* Compiles without extra debug code */

14

Luis Rafael 2010

http://www.lingtronic.com

Page 15: pic18f ola mundo

Fim

15

Luis Rafael 2010

http://www.lingtronic.com