Vous êtes sur la page 1sur 28

Programacao dos Perifericos

Rodrigo Almeida

Universidade Federal de Itajuba

rodrigomax@unifei.edu.br

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 1 / 28


Revisao

Revisao

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 2 / 28


Revisao

Esquema eletrico e circuitos importantes(rev)

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 3 / 28


Revisao

Multiplexacao nos terminais do microcontrolador(rev)

Ex: o oitavo terminal do PIC18F4550.


Pode ser configurado como terminal:
de entrada ou sada referente ao primeiro bit da porta E (RE0)
de leitura analogica pertencente ao quinto conversor analogico - digital
(AN5)
utilizado para enviar um clock externo de comunicacao paralela
(CK1SPP)

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 4 / 28


Revisao

Esquema eletrico e circuitos importantes(rev)

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 5 / 28


Revisao

Registros de configuracao do microcontrolador(rev)

1 // config . h
2 # ifndef CONFIG_H
3 # define CONFIG_H
4 // Pll d e s l i g a d o
5 code char at 0x300000 CONFIG1L = 0x01 ;
6 // O s c i l a d o r c / cristal externo HS
7 code char at 0x300001 CONFIG1H = 0x0C ;
8 // W a t c h d o g c o n t r o l a d o por s o f t w a r e
9 code char at 0x300003 CONFIG2H = 0x00 ;
10 // Sem p r o g r a m a c a~ o em baixa tens~ ao
11 code char at 0x300006 CONFIG4L = 0x00 ;
12 # endif // C O N F I G H

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 6 / 28


Programacao dos Perifericos

Programacao dos Perifericos

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 7 / 28


Programacao dos Perifericos

Perifericos disponveis

Sada
Barramento de Leds
Display de 7 segmentos
Display LCD 2x16
Sadas PWM
Entrada
Teclado 4*4
Conversor AD
Outros
Serial RS232
Tratador de Interrupcoes
Watchdog

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 8 / 28


Programacao dos Perifericos

Programacao dos Perifericos


Barramento de Leds

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 9 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 10 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

O microcontrolador PIC 18F4520 possui 5 portas


PORTA: bidirecional com 7 bits
PORTB: bidirecional com 8 bits
PORTC: bidirecional com 7 bits
PORTD: bidirecional com 8 bits
PORTE: 3 bits bidirecionais e 1 bit apenas entrada

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 11 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

Terminal
40 39 38 37 36 35 34 33
Fsico

Bit nmero
7 6 5 4 3 2 1 0
PORTB

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 12 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

memria

leitura

entrada N
da porta X escrita porta x

bit N
controle de direo
do sinal
direo

bit N

Abrir datasheet do PIC18f4520 na pagina 105.

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 13 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

Porta Endereco dos dados Endereco de configuracao (TRIS)


PORTA 0xF80 0xF92
PORTB 0xF81 0xF93
PORTC 0xF82 0xF94
PORTD 0xF83 0xF95
PORTE 0xF84 0xF96

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 14 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

1 // inicio do p r o g r a m a
2 void main ( void ) {
3 // d e f i n i m o s como :
4 // ( u n s i g n e d char ) pois os 8 bits r e p r e s e n t a m valores
5 // ( v o l a t i l e ) as v a r i a v e i s podem mudar a q u a l q u e r momento
6 // ( near ) indica que o r e g i s t r o esta na memoria de dados
7 volatile __near unsigned char * PORTD = 0xF83 ;
8 volatile __near unsigned char * TRISD = 0xF95 ;
9 // c o n f i g u r a n d o todos os pinos como sadas
10 // 0 = sada ( Output )
11 // 1 = entrada ( Input )
12 * TRISD = 0b00000000 ;
13 // liga apenas os quatro ultimos leds
14 * PORTD = 0b11110000 ;
15 // mantem o sistema ligado i n d e f i n i d a m e n t e
16 for (;;) ;
17 }

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 15 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

1 // defines para portas de entrada e sada


2 # define PORTD (*( volatile __near unsigned char *) 0xF83 )
3 # define TRISD (*( volatile __near unsigned char *) 0xF95 )
4
5 // inicio do p r o g r a m a
6 void main ( void ) {
7 // c o n f i g u r a n d o todos os pinos como sadas
8 TRISD = 0b00000000 ;
9 // liga apenas os quatro ultimos leds
10 PORTD = 0b11110000 ;
11 // mantem o sistema ligado i n d e f i n i d a m e n t e
12 for (;;) ;
13 }

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 16 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

Vantagens no uso dos #defines


Utilizacao nao requer uso do *, pois ja esta incluso no define
Economiza memoria RAM. Criando uma variavel e necessario reservar
um espaco para armazenar o valor do ponteiro.
A definicao pode ser feita em apenas um arquivo do tipo header. Os
outros arquivos que precisem utilizar estas definicoes podem apenas
incluir este header.
A mudanca de arquitetura e mais simples. Criando apenas um arquivo
com os defines e mais rapido migrar o codigo de uma arquitetura para
outra.

Atencao
O tamanho do programa final esta intimamente ligado ao compilador utilizado.
Dependendo das otimizacoes que sao (ou nao) realizadas, o programa pode ficar maior
com o uso dos defines.

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 17 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

1 // basico . h
2 // func~
o es de bit
3 # define BitSet ( arg , bit ) (( arg ) |= (1 < < bit ) )
4 # define BitClr ( arg , bit ) (( arg ) &= ~( 1 < < bit ) )
5 # define BitFlp ( arg , bit ) (( arg ) ^= (1 < < bit ) )
6 # define BitTst ( arg , bit ) (( arg ) & (1 < < bit ) )
7
8 // defines para r e g i s t r o s e s p e c i a i s
9 # define PORTA (*( volatile __near unsigned char *) 0xF80 )
10 # define PORTB (*( volatile __near unsigned char *) 0xF81 )
11 # define PORTC (*( volatile __near unsigned char *) 0xF82 )
12 # define PORTD (*( volatile __near unsigned char *) 0xF83 )
13 # define PORTE (*( volatile __near unsigned char *) 0xF84 )
14
15 # define TRISA (*( volatile __near unsigned char *) 0xF92 )
16 # define TRISB (*( volatile __near unsigned char *) 0xF93 )
17 # define TRISC (*( volatile __near unsigned char *) 0xF94 )
18 # define TRISD (*( volatile __near unsigned char *) 0xF95 )
19 # define TRISE (*( volatile __near unsigned char *) 0xF96 )

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 18 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

1 // basico . h
2 # define INTCON (*( volatile __near unsigned char *) 0xFF2 )
3 # define INTCON2 (*( volatile __near unsigned char *) 0xFF1 )
4 # define PIE1 (*( volatile __near unsigned char *) 0xF9D )
5 # define PIR1 (*( volatile __near unsigned char *) 0xF9E )
6
7 # define TMR0L (*( volatile __near unsigned char *) 0xFD6 )
8 # define TMR0H (*( volatile __near unsigned char *) 0xFD7 )
9 # define T0CON (*( volatile __near unsigned char *) 0xFD5 )
10
11 # define SPPCON (*( volatile __near unsigned char *) 0xF65 )
12 # define SPPCFG (*( volatile __near unsigned char *) 0xF63 )
13
14 # define ADCON2 (*( volatile __near unsigned char *) 0xFC0 )
15 # define ADCON1 (*( volatile __near unsigned char *) 0xFC1 )
16 # define ADCON0 (*( volatile __near unsigned char *) 0xFC2 )
17 # define ADRESL (*( volatile __near unsigned char *) 0xFC3 )
18 # define ADRESH (*( volatile __near unsigned char *) 0xFC4 )

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 19 / 28


Acesso as portas do microcontrolador

Acesso as portas do microcontrolador

1 // basico . h
2 # define RCSTA (*( volatile __near unsigned char *) 0xFAB )
3 # define TXSTA (*( volatile __near unsigned char *) 0xFAC )
4 # define TXREG (*( volatile __near unsigned char *) 0xFAD )
5 # define RCREG (*( volatile __near unsigned char *) 0xFAE )
6 # define SPBRG (*( volatile __near unsigned char *) 0xFAF )
7 # define SPBRGH (*( volatile __near unsigned char *) 0xFB0 )
8 # define BAUDCON (*( volatile __near unsigned char *) 0xFB8 )
9 # define RCON (*( volatile __near unsigned char *) 0xFD0 )
10
11 # define WDTCON (*( volatile __near unsigned char *) 0xFD1 )
12
13 # define T2CON (*( volatile __near unsigned char *) 0xFCA )
14 # define PR2 (*( volatile __near unsigned char *) 0xFCB )
15 # define CCP2CON (*( volatile __near unsigned char *) 0xFBA )
16 # define CCPR2L (*( volatile __near unsigned char *) 0xFBB )
17 # define CCP1CON (*( volatile __near unsigned char *) 0xFBD )
18 # define CCPR1L (*( volatile __near unsigned char *) 0xFBE )
19
20 // func~
a o para limpar o w a t c h d o g
21 # define CLRWDT () _asm CLRWDT _endasm

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 20 / 28


Configuracao dos perifericos

Configuracao dos perifericos

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 21 / 28


Configuracao dos perifericos

Configuracao dos perifericos

Configurar
Term. Descricao Funcao
como
Potenciometro / Sen-
2 RA0/AN0 AN0
sor de Temperatura
4 RA2/AN2/VREF-/CVREF RA2 Display 2
7 RA5/AN4/SS/C2OUT RA5 Display 1
8 RE0/AN5/CK1SPP RE0 RS-LCD / Display 3
9 RE1/AN6/CK2SPP RE1 EN-LCD
10 RE2/AN7/OESPP RE2 RW-LCD / Display 4
13 OSC1/CLKI OSC1
Cristal
14 OSC2/CLKO/RA6 OSC2
16 RC1/T1OSI/CCP2/UOE CCP2 Aquecedor
17 RC2/CCP1/P1A CCP1 Ventilador / Buzzer
19 RD0/SPP0 RD0
20 RD1/SPP1 RD1 Barramento de dados
21 RD2/SPP2 RD2 para o LCD/7seg/Led
22 RD3/SPP3 RD3

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 22 / 28


Configuracao dos perifericos

Configuracao dos perifericos

Configurar
Term. Descricao Funcao
como
25 RC6/TX/CK TX/RC6 RS232/I2C
26 RC7/RX/DT/SDO RX RS232
27 RD4/SPP4 RD4
Barramento de dados
28 RD5/SPP5/P1B RD5
para o LCD / 7seg /
29 RD6/SPP6/P1C RD6
Led
30 RD7/SPP7/P1D RD7
33 RB0/AN12/INT0/SDI/SDA RB0/SDA Sadas para
34 RB1/AN10/INT1/SCK/SCL RB1/SCL alimentacao do
35 RB2/AN8/INT2/VMO RB2 teclado, 0 e 1 para
36 RB3/AN9/CCP2/VPO RB3 I2C
37 RB4/AN11/KBI0/CSSPP RB4
38 RB5/KBI1/PGM RB5 Entradas para leitura
39 RB6/KBI2/PGC RB6 do teclado
40 RB7/KBI3/PGD RB7

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 23 / 28


Configuracao dos perifericos

Configuracao dos perifericos

1 TRISA = 0b00000010 ; // conf . t e r m i n a i s como entrada e sada


2 ADCON1 = 0b00001110 ; // apenas o p r i m e i r o t e r m i n a l e a n a l o g i c o
3
4 TRISB = 0b11110000 ; // conf . t e r m i n a i s como entrada e sada
5 INTCON = 0b11000101 ; // conf . com i n t e r r u p c ~
ao habilitada
6 INTCON = 0b00000000 ; // conf . sem i n t e r r u p c ~
ao
7 INTCON2 = 0b00000001 ;
8 SPPCFG = 0b00000000 ; // RB04 c o n t r o l a d o s pela porta B
9
10 TRISC = 0b10000000 ; // t e r m i n a i s s~
a o sadas , so RC7 e entrada
11 CCP1CON = 0b00001100 ; // conf . o 2o t e r m i n a l como PWM
12 CCP2CON = 0b00001100 ; // conf . o 3o t e r m i n a l como PWM
13 TXTA = 0b00101100 ; // conf . a t r a n s m i s s ~
a o de dados da serial
14 RCSTA = 0b10010000 ; // conf . a r e c e p c ~a o de dados da serial
15 BAUDCON = 0b00001000 ; // conf . sistema de v e l o c i d a d e da serial
16 SPBRGH = 0b00000000 ; // conf . para 56k
17 SPBRG = 0b00100010 ; // conf . para 56k
18
19 TRISD = 0b00000000 ; // conf . os t e r m i n a i s como sada
20
21 TRISE = 0b00000000 ; // conf . os t e r m i n a i s como sada

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 24 / 28


Barramento de Leds

Barramento de Leds

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 25 / 28


Barramento de Leds

Barramento de Leds

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 26 / 28


Barramento de Leds

Barramento de Leds

Exerccio
Criar uma biblioteca para os leds
Pode fazer uso do basico.h e config.h

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 27 / 28


Barramento de Leds

Barramento de Leds

Biblioteca de acesso aos leds:


Inicializacao do dispositivo
Armazenamento de variaveis internas (enderecos)
Escrita/Leitura do estado dos leds

ECOP04 Programacao dos Perifericos rodrigomax@unifei.edu.br 28 / 28

Vous aimerez peut-être aussi