Programa¸c˜
ao dos Perif´
ericos
Rodrigo Almeida
Universidade Federal de Itajub´a
rodrigomax@unifei.edu.br
Revis˜ao
Revis˜ao
Esquema el´
etrico e circuitos importantes(rev)
Revis˜ao
Multiplexa¸c˜
ao 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´
ogica pertencente ao quinto conversor anal´
ogico - digital
(AN5)
utilizado para enviar um clock externo de comunica¸
c˜
ao paralela
(CK1SPP)
Revis˜ao
Esquema el´
etrico e circuitos importantes(rev)
Revis˜ao
Registros de configura¸c˜
ao do microcontrolador(rev)
1 // c o n f i g . h 2 #i f n d e f C O N F I G _ H 3 #d e f i n e C O N F I G _ H 4 // P l l d e s l i g a d o 5 c o d e c h a r at 0 x 3 0 0 0 0 0 C O N F I G 1 L = 0 x 0 1; 6 // O s c i l a d o r c / c r i s t a l e x t e r n o HS 7 c o d e c h a r at 0 x 3 0 0 0 0 1 C O N F I G 1 H = 0 x 0 C; 8 // W a t c h d o g c o n t r o l a d o p o r s o f t w a r e 9 c o d e c h a r at 0 x 3 0 0 0 0 3 C O N F I G 2 H = 0 x 0 0; 10 // S e m p r o g r a m a ¸c ~a o em b a i x a t e n s ~a o 11 c o d e c h a r at 0 x 3 0 0 0 0 6 C O N F I G 4 L = 0 x 0 0; 12 #e n d i f // C O N F I G H
Programa¸c˜ao dos Perif´ericos
Programa¸c˜
ao dos Perif´
ericos
Programa¸c˜ao dos Perif´ericos
Perif´
ericos 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¸
c˜
oes
Watchdog
Programa¸c˜ao dos Perif´ericos
Programa¸c˜
ao dos Perif´
ericos
Barramento de Leds
Acesso `as portas do microcontrolador
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
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
Bit número
PORTB
0
Terminal
Físico
33
1
34
2
35
3
36
4
37
5
38
6
39
7
40
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
memória porta x leitura escrita direção controle de direção do sinal entrada N da porta X bit N bit N
Abrir datasheet do PIC18f4520 na pagina 105.
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
Porta
Endere¸
co dos dados
Endere¸
co de configura¸
c˜
ao (TRIS)
PORTA
0xF80
0xF92
PORTB
0xF81
0xF93
PORTC
0xF82
0xF94
PORTD
0xF83
0xF95
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
1 // i n i c i o do p r o g r a m a 2 v o i d m a i n (v o i d) { 3 // d e f i n i m o s c o m o : 4 // ( u n s i g n e d c h a r ) p o i s os 8 b i t s r e p r e s e n t a m v a l o r e s 5 // ( v o l a t i l e ) as v a r i ´a v e i s p o d e m m u d a r a q u a l q u e r m o m e n t o 6 // ( n e a r ) i n d i c a q u e o r e g i s t r o e s t a na m e m ´o r i a de d a d o s 7 v o l a t i l e _ _ n e a r u n s i g n e d c h a r * P O R T D = 0 x F 8 3; 8 v o l a t i l e _ _ n e a r u n s i g n e d c h a r * T R I S D = 0 x F 9 5; 9 // c o n f i g u r a n d o t o d o s os p i n o s c o m o s a ´ı d a s 10 // 0 = s a ´ı d a ( O u t p u t ) 11 // 1 = e n t r a d a ( I n p u t ) 12 * T R I S D = 0 b 0 0 0 0 0 0 0 0; 13 // l i g a a p e n a s os q u a t r o ´u l t i m o s l e d s 14 * P O R T D = 0 b 1 1 1 1 0 0 0 0; 15 // m a n t ´e m o s i s t e m a l i g a d o i n d e f i n i d a m e n t e 16 for( ; ; ) ; 17 }
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
1 // d e f i n e s p a r a p o r t a s de e n t r a d a e s a ´ı d a 2 #d e f i n e P O R T D (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 3) 3 #d e f i n e T R I S D (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 5) 4 5 // i n i c i o do p r o g r a m a 6 v o i d m a i n (v o i d) { 7 // c o n f i g u r a n d o t o d o s os p i n o s c o m o s a ´ı d a s 8 T R I S D = 0 b 0 0 0 0 0 0 0 0; 9 // l i g a a p e n a s os q u a t r o ´u l t i m o s l e d s 10 P O R T D = 0 b 1 1 1 1 0 0 0 0; 11 // m a n t ´e m o s i s t e m a l i g a d o i n d e f i n i d a m e n t e 12 for( ; ; ) ; 13 }
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
Vantagens no uso dos #defines
Utiliza¸
c˜
ao n˜
ao requer uso do *, pois j´
a est´
a incluso no define
Economiza mem´
oria RAM. Criando uma vari´
avel ´
e necess´
ario reservar
um espa¸
co para armazenar o valor do ponteiro.
A defini¸
c˜
ao pode ser feita em apenas um arquivo do tipo header. Os
outros arquivos que precisem utilizar estas defini¸
c˜
oes podem apenas
incluir este header.
A mudan¸
ca de arquitetura ´
e mais simples. Criando apenas um arquivo
com os defines ´
e mais r´
apido migrar o c´
odigo de uma arquitetura para
outra.
Aten¸
c˜
ao
O tamanho do programa final est´
a intimamente ligado ao compilador utilizado.
Dependendo das otimiza¸
c˜
oes que s˜
ao (ou n˜
ao) realizadas, o programa pode ficar maior
com o uso dos defines.
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
1 // b a s i c o . h
2 // f u n ¸c ~o e s de b i t
3 #d e f i n e B i t S e t ( arg , bit ) (( arg ) |= (1< < bit ) )
4 #d e f i n e B i t C l r ( arg , bit ) (( arg ) &= ~(1< < bit ) )
5 #d e f i n e B i t F l p ( arg , bit ) (( arg ) ^= (1< < bit ) )
6 #d e f i n e B i t T s t ( arg , bit ) (( arg ) & (1< < bit ) )
7 8 // d e f i n e s p a r a r e g i s t r o s e s p e c i a i s 9 #d e f i n e P O R T A (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 0) 10 #d e f i n e P O R T B (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 1) 11 #d e f i n e P O R T C (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 2) 12 #d e f i n e P O R T D (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 3) 13 #d e f i n e P O R T E (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 8 4) 14 15 #d e f i n e T R I S A (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 2) 16 #d e f i n e T R I S B (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 3) 17 #d e f i n e T R I S C (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 4) 18 #d e f i n e T R I S D (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 5)
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
1 // b a s i c o . h 2 #d e f i n e I N T C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F F 2) 3 #d e f i n e I N T C O N 2 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F F 1) 4 #d e f i n e P I E 1 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 D) 5 #d e f i n e P I R 1 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 9 E) 6 7 #d e f i n e T M R 0 L (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F D 6) 8 #d e f i n e T M R 0 H (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F D 7) 9 #d e f i n e T 0 C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F D 5) 10 11 #d e f i n e S P P C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 6 5) 12 #d e f i n e S P P C F G (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F 6 3) 13 14 #d e f i n e A D C O N 2 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C 0) 15 #d e f i n e A D C O N 1 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C 1) 16 #d e f i n e A D C O N 0 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C 2) 17 #d e f i n e A D R E S L (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C 3) 18 #d e f i n e A D R E S H (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C 4)
Acesso `as portas do microcontrolador
Acesso `
as portas do microcontrolador
1 // b a s i c o . h 2 #d e f i n e R C S T A (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F A B) 3 #d e f i n e T X S T A (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F A C) 4 #d e f i n e T X R E G (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F A D) 5 #d e f i n e R C R E G (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F A E) 6 #d e f i n e S P B R G (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F A F) 7 #d e f i n e S P B R G H (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B 0) 8 #d e f i n e B A U D C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B 8) 9 #d e f i n e R C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F D 0) 10 11 #d e f i n e W D T C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F D 1) 12 13 #d e f i n e T 2 C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C A) 14 #d e f i n e PR2 (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F C B) 15 #d e f i n e C C P 2 C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B A) 16 #d e f i n e C C P R 2 L (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B B) 17 #d e f i n e C C P 1 C O N (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B D) 18 #d e f i n e C C P R 1 L (*(v o l a t i l e _ _ n e a r u n s i g n e d c h a r*)0 x F B E) 19
Configura¸c˜ao dos perif´ericos
Configura¸c˜
ao dos perif´
ericos
Configura¸c˜ao dos perif´ericos
Configura¸c˜
ao dos perif´
ericos
Term.
Descri¸
c˜
ao
Configurar
como
Fun¸
c˜
ao
2
RA0/AN0
AN0
Potenciˆ
ometro /
Sen-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
Barramento de dados
para o LCD/7seg/Led
20
RD1/SPP1
RD1
Configura¸c˜ao dos perif´ericos
Configura¸c˜
ao dos perif´
ericos
Term.
Descri¸
c˜
ao
Configurar
como
Fun¸
c˜
ao
25
RC6/TX/CK
TX/RC6
RS232/I2C
26
RC7/RX/DT/SDO
RX
RS232
27
RD4/SPP4
RD4
Barramento de dados
para o LCD / 7seg /
Led
28
RD5/SPP5/P1B
RD5
29
RD6/SPP6/P1C
RD6
30
RD7/SPP7/P1D
RD7
33
RB0/AN12/INT0/SDI/SDA
RB0/SDA
Sa´ıdas para
alimenta¸
c˜
ao do
teclado, 0 e 1 para
I2C
34
RB1/AN10/INT1/SCK/SCL
RB1/SCL
35
RB2/AN8/INT2/VMO
RB2
36
RB3/AN9/CCP2/VPO
RB3
37
RB4/AN11/KBI0/CSSPP
RB4
Entradas para leitura
do teclado
38
RB5/KBI1/PGM
RB5
39
RB6/KBI2/PGC
RB6
40
RB7/KBI3/PGD
RB7
Configura¸c˜ao dos perif´ericos
Configura¸c˜
ao dos perif´
ericos
1 T R I S A = 0 b 0 0 0 0 0 0 1 0; // c o n f . t e r m i n a i s c o m o e n t r a d a e s a ´ı d a 2 A D C O N 1 = 0 b 0 0 0 0 1 1 1 0; // a p e n a s 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 T R I S B = 0 b 1 1 1 1 0 0 0 0; // c o n f . t e r m i n a i s c o m o e n t r a d a e s a ´ı d a 5 I N T C O N = 0 b 1 1 0 0 0 1 0 1; // c o n f . c o m i n t e r r u p ¸c ~a o h a b i l i t a d a 6 I N T C O N = 0 b 0 0 0 0 0 0 0 0; // c o n f . s e m i n t e r r u p ¸c ~a o 7 I N T C O N 2 = 0 b 0 0 0 0 0 0 0 1; 8 S P P C F G = 0 b 0 0 0 0 0 0 0 0; // RB0−4 c o n t r o l a d o s p e l a p o r t a B 9 10 T R I S C = 0 b 1 0 0 0 0 0 0 0; // t e r m i n a i s s ~a o s a ´ı d a s , s´o R C 7 ´e e n t r a d a 11 C C P 1 C O N = 0 b 0 0 0 0 1 1 0 0; // c o n f . o 2o t e r m i n a l c o m o P W M 12 C C P 2 C O N = 0 b 0 0 0 0 1 1 0 0; // c o n f . o 3o t e r m i n a l c o m o P W M 13 T X T A = 0 b 0 0 1 0 1 1 0 0; // c o n f . a t r a n s m i s s ~a o de d a d o s da s e r i a l 14 R C S T A = 0 b 1 0 0 1 0 0 0 0; // c o n f . a r e c e p ¸c ~a o de d a d o s da s e r i a l 15 B A U D C O N = 0 b 0 0 0 0 1 0 0 0; // c o n f . s i s t e m a de v e l o c i d a d e da s e r i a l 16 S P B R G H = 0 b 0 0 0 0 0 0 0 0; // c o n f . p a r a 5 6 k 17 S P B R G = 0 b 0 0 1 0 0 0 1 0; // c o n f . p a r a 5 6 k 18 19 T R I S D = 0 b 0 0 0 0 0 0 0 0; // c o n f . os t e r m i n a i s c o m o s a ´ı d a
Barramento de Leds
Barramento de Leds
Barramento de Leds
Barramento de Leds
Barramento de Leds
Barramento de Leds
Exerc´ıcio
Criar uma biblioteca para os leds
Pode fazer uso do basico.h e config.h
Barramento de Leds