Você está na página 1de 28

Programação dos Periféricos

Rodrigo Almeida

Universidade Federal de Itajubá

rodrigomax@unifei.edu.br

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 1 / 28


Revisão

Revisão

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 2 / 28


Revisão

Esquema elétrico e circuitos importantes(rev)

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 3 / 28


Revisão

Multiplexação nos terminais do microcontrolador(rev)

Ex: o oitavo terminal do PIC18F4550.


Pode ser configurado como terminal:
de entrada ou saı́da referente ao primeiro bit da porta E (RE0)
de leitura analógica pertencente ao quinto conversor analógico - digital
(AN5)
utilizado para enviar um clock externo de comunicação paralela
(CK1SPP)

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 4 / 28


Revisão

Esquema elétrico e circuitos importantes(rev)

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 5 / 28


Revisão

Registros de configuração 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 ç a~ o em baixa tens~ ao
11 code char at 0x300006 CONFIG4L = 0x00 ;
12 # endif // C O N F I G H

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 6 / 28


Programação dos Periféricos

Programação dos Periféricos

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 7 / 28


Programação dos Periféricos

Periféricos disponı́veis

Saı́da
Barramento de Led’s
Display de 7 segmentos
Display LCD 2x16
Saı́das PWM
Entrada
Teclado 4*4
Conversor AD
Outros
Serial RS232
Tratador de Interrupções
Watchdog

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 8 / 28


Programação dos Periféricos

Programação dos Periféricos


Barramento de Leds

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 9 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 10 / 28


Acesso às portas do microcontrolador

Acesso às 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 Programação dos Periféricos rodrigomax@unifei.edu.br 11 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

Terminal
40 39 38 37 36 35 34 33
Físico

Bit número
7 6 5 4 3 2 1 0
PORTB

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 12 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

memória

leitura

entrada N
da porta X escrita porta x

bit N
controle de direção
do sinal
direção

bit N

Abrir datasheet do PIC18f4520 na pagina 105.

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 13 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

Porta Endereço dos dados Endereço de configuração (TRIS)


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

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 14 / 28


Acesso às portas do microcontrolador

Acesso às 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 á 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 memória 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 saı́das
10 // 0 = saı́da ( Output )
11 // 1 = entrada ( Input )
12 * TRISD = 0b00000000 ;
13 // liga apenas os quatro últimos leds
14 * PORTD = 0b11110000 ;
15 // mantém o sistema ligado i n d e f i n i d a m e n t e
16 for (;;) ;
17 }

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 15 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

1 // defines para portas de entrada e saı́da


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 saı́das
8 TRISD = 0b00000000 ;
9 // liga apenas os quatro últimos leds
10 PORTD = 0b11110000 ;
11 // mantém o sistema ligado i n d e f i n i d a m e n t e
12 for (;;) ;
13 }

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 16 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

Vantagens no uso dos #defines


Utilização não requer uso do *, pois já está incluso no define
Economiza memória RAM. Criando uma variável é necessário reservar
um espaço para armazenar o valor do ponteiro.
A definição pode ser feita em apenas um arquivo do tipo header. Os
outros arquivos que precisem utilizar estas definições podem apenas
incluir este header.
A mudança de arquitetura é mais simples. Criando apenas um arquivo
com os defines é mais rápido migrar o código de uma arquitetura para
outra.

Atenção
O tamanho do programa final está intimamente ligado ao compilador utilizado.
Dependendo das otimizações que são (ou não) realizadas, o programa pode ficar maior
com o uso dos defines.

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 17 / 28


Acesso às portas do microcontrolador

Acesso às portas do microcontrolador

1 // basico . h
2 // funç~
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 Programação dos Periféricos rodrigomax@unifei.edu.br 18 / 28


Acesso às portas do microcontrolador

Acesso às 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 Programação dos Periféricos rodrigomax@unifei.edu.br 19 / 28


Acesso às portas do microcontrolador

Acesso às 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 // funç~
a o para limpar o w a t c h d o g
21 # define CLRWDT () _asm CLRWDT _endasm

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 20 / 28


Configuração dos periféricos

Configuração dos periféricos

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 21 / 28


Configuração dos periféricos

Configuração dos periféricos

Configurar
Term. Descrição Função
como
Potenciômetro / 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 Programação dos Periféricos rodrigomax@unifei.edu.br 22 / 28


Configuração dos periféricos

Configuração dos periféricos

Configurar
Term. Descrição Função
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 Saı́das para
34 RB1/AN10/INT1/SCK/SCL RB1/SCL alimentação 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 Programação dos Periféricos rodrigomax@unifei.edu.br 23 / 28


Configuração dos periféricos

Configuração dos periféricos

1 TRISA = 0b00000010 ; // conf . t e r m i n a i s como entrada e saı́da


2 ADCON1 = 0b00001110 ; // apenas o p r i m e i r o t e r m i n a l é a n a l ó g i c o
3
4 TRISB = 0b11110000 ; // conf . t e r m i n a i s como entrada e saı́da
5 INTCON = 0b11000101 ; // conf . com i n t e r r u p ç ~
ao habilitada
6 INTCON = 0b00000000 ; // conf . sem i n t e r r u p ç ~
ao
7 INTCON2 = 0b00000001 ;
8 SPPCFG = 0b00000000 ; // RB0−4 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 saı́das , só RC7 é 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 ç ~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 saı́da
20
21 TRISE = 0b00000000 ; // conf . os t e r m i n a i s como saı́da

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 24 / 28


Barramento de Leds

Barramento de Leds

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 25 / 28


Barramento de Leds

Barramento de Leds

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 26 / 28


Barramento de Leds

Barramento de Leds

Exercı́cio
Criar uma biblioteca para os leds
Pode fazer uso do basico.h e config.h

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 27 / 28


Barramento de Leds

Barramento de Leds

Biblioteca de acesso aos leds:


Inicialização do dispositivo
Armazenamento de variáveis internas (endereços)
Escrita/Leitura do estado dos leds

ECOP04 Programação dos Periféricos rodrigomax@unifei.edu.br 28 / 28

Você também pode gostar