1) O documento discute programação de periféricos de microcontroladores, incluindo acesso às portas, barramentos de LEDs, conversores AD e outros periféricos.
2) É explicado como configurar as portas do PIC18F4550 como entrada ou saída e como acessá-las para controlar dispositivos como LEDs.
3) São apresentados vários registradores de configuração importantes para programação de periféricos como conversor AD, UART, PWM e interrupções.
1. Programa¸c˜ao dos Perif´ericos
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajub´a
rodrigomax@unifei.edu.br
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 1 / 27
3. Arquitetura de Microcontroladores
Multiplexa¸c˜ao nos terminais do microcontrolador
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)
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 3 / 27
4. Arquitetura de Microcontroladores
Registros de configura¸c˜ao do microcontrolador
Registros de configura¸c˜ao do
microcontrolador
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 4 / 27
6. Arquitetura de Microcontroladores
Registros de configura¸c˜ao do microcontrolador
1 // c o n f i g . h
2 #ifndef CONFIG_H
3 #define CONFIG_H
4 // P l l 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/ c r i s t a l ext erno HS
7 code char at 0x300001 CONFIG1H = 0x0C ;
8 // Watchdog 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 programa¸c˜ao em baixa tens˜ao
11 code char at 0x300006 CONFIG4L = 0x00 ;
12 #endif //CONFIG H
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 6 / 27
7. Programa¸c˜ao dos Perif´ericos
Programa¸c˜ao dos Perif´ericos
.
.
.
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 7 / 27
8. 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
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 8 / 27
11. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
O microcontrolador PIC 18F4550 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
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 11 / 27
12. Programa¸c˜ao dos Perif´ericos
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
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 12 / 27
13. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
37 Trisb:4
Leitor
Gravador
4Trisb:4
= 1
= 0 = 0
= 1
< 2volts = 0
> 3volts = 1
PORTB
Abrir datasheet do PIC18f4550 na pagina 110.
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 13 / 27
14. Programa¸c˜ao dos Perif´ericos
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
PORTE 0xF84 0xF96
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 14 / 27
15. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
1 // i n i c i o do programa
2 void main ( void )
3 {
4 // d e f i n i m o s como :
5 // ( unsigned char ) p o i s os 8 b i t s representam v a l o r e s
6 // ( v o l a t i l e ) as v a r i ´a v e i s podem mudar a qualquer momento
7 // ( near ) i n d i c a que o r e g i s t r o e s t a na mem´oria de dados
8 v o l a t i l e near unsigned char ∗PORTD = 0xF83 ;
9 v o l a t i l e near unsigned char ∗TRISD = 0xF95 ;
10 // configurando todos os pinos como s a´ı d a s
11 // 0 = s a´ı d a ( Output )
12 // 1 = entrada ( Input )
13 ∗TRISD = 0b00000000 ;
14 // l i g a apenas os quatro ´u l t i m o s l e d s
15 ∗PORTD = 0b11110000 ;
16 //mant´em o sistema l i g a d o i n d e f i n i d a m e n t e
17 f o r ( ; ; ) ;
18 }
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 15 / 27
16. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
1 // d e f i n e s para p o r t a s de entrada e s a´ı d a
2 #define PORTD (∗( v o l a t i l e near unsigned char ∗) 0xF83 )
3 #define TRISD (∗( v o l a t i l e near unsigned char ∗) 0xF95 )
4 // i n i c i o do programa
5 void main ( void )
6 {
7 // configurando todos os pinos como s a´ı d a s
8 TRISD = 0b00000000 ;
9 // l i g a apenas os quatro ´u l t i m o s l e d s
10 PORTD = 0b11110000 ;
11 //mant´em o sistema l i g a d o i n d e f i n i d a m e n t e
12 f o r ( ; ; ) ;
13 }
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 16 / 27
17. Programa¸c˜ao dos Perif´ericos
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 devem apenas
incluir este header.
A mudan¸ca de arquitetura ´e mais simples. Criando apenas um arquivo
com os defines ´e mais simples 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.
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 17 / 27
18. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
1 // b a s i c o . h
2 // fun¸c˜oes de b i t
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 // d e f i n e s para r e g i s t r o s e s p e c i a i s
9 #define PORTA (∗( v o l a t i l e near unsigned char ∗) 0xF80 )
10 #define PORTB (∗( v o l a t i l e near unsigned char ∗) 0xF81 )
11 #define PORTC (∗( v o l a t i l e near unsigned char ∗) 0xF82 )
12 #define PORTD (∗( v o l a t i l e near unsigned char ∗) 0xF83 )
13 #define PORTE (∗( v o l a t i l e near unsigned char ∗) 0xF84 )
14
15 #define TRISA (∗( v o l a t i l e near unsigned char ∗) 0xF92 )
16 #define TRISB (∗( v o l a t i l e near unsigned char ∗) 0xF93 )
17 #define TRISC (∗( v o l a t i l e near unsigned char ∗) 0xF94 )
18 #define TRISD (∗( v o l a t i l e near unsigned char ∗) 0xF95 )
19 #define TRISE (∗( v o l a t i l e near unsigned char ∗) 0xF96 )
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 18 / 27
19. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
1 // b a s i c o . h
2 #define INTCON (∗( v o l a t i l e near unsigned char ∗) 0xFF2 )
3 #define INTCON2 (∗( v o l a t i l e near unsigned char ∗) 0xFF1 )
4 #define PIE1 (∗( v o l a t i l e near unsigned char ∗) 0xF9D )
5 #define PIR1 (∗( v o l a t i l e near unsigned char ∗) 0xF9E )
6
7 #define TMR0L (∗( v o l a t i l e near unsigned char ∗) 0xFD6 )
8 #define TMR0H (∗( v o l a t i l e near unsigned char ∗) 0xFD7 )
9 #define T0CON (∗( v o l a t i l e near unsigned char ∗) 0xFD5 )
10
11 #define SPPCON (∗( v o l a t i l e near unsigned char ∗) 0xF65 )
12 #define SPPCFG (∗( v o l a t i l e near unsigned char ∗) 0xF63 )
13
14 #define ADCON2 (∗( v o l a t i l e near unsigned char ∗) 0xFC0 )
15 #define ADCON1 (∗( v o l a t i l e near unsigned char ∗) 0xFC1 )
16 #define ADCON0 (∗( v o l a t i l e near unsigned char ∗) 0xFC2 )
17 #define ADRESL (∗( v o l a t i l e near unsigned char ∗) 0xFC3 )
18 #define ADRESH (∗( v o l a t i l e near unsigned char ∗) 0xFC4 )
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 19 / 27
20. Programa¸c˜ao dos Perif´ericos
Acesso `as portas do microcontrolador
1 // b a s i c o . h
2 #define RCSTA (∗( v o l a t i l e near unsigned char ∗) 0xFAB )
3 #define TXSTA (∗( v o l a t i l e near unsigned char ∗) 0xFAC )
4 #define TXREG (∗( v o l a t i l e near unsigned char ∗) 0xFAD )
5 #define RCREG (∗( v o l a t i l e near unsigned char ∗) 0xFAE )
6 #define SPBRG (∗( v o l a t i l e near unsigned char ∗) 0xFAF )
7 #define SPBRGH (∗( v o l a t i l e near unsigned char ∗) 0xFB0 )
8 #define BAUDCON (∗( v o l a t i l e near unsigned char ∗) 0xFB8 )
9 #define RCON (∗( v o l a t i l e near unsigned char ∗) 0xFD0 )
10
11 #define WDTCON (∗( v o l a t i l e near unsigned char ∗) 0xFD1 )
12
13 #define T2CON (∗( v o l a t i l e near unsigned char ∗) 0xFCA )
14 #define PR2 (∗( v o l a t i l e near unsigned char ∗) 0xFCB )
15 #define CCP2CON (∗( v o l a t i l e near unsigned char ∗) 0xFBA )
16 #define CCPR2L (∗( v o l a t i l e near unsigned char ∗) 0xFBB )
17 #define CCP1CON (∗( v o l a t i l e near unsigned char ∗) 0xFBD )
18 #define CCPR1L (∗( v o l a t i l e near unsigned char ∗) 0xFBE )
19
20 // fun¸c˜ao para limp ar o watchdog
21 #define CLRWTD () _asm CLRWDT _endasm
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 20 / 27
22. Programa¸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
21 RD2/SPP2 RD2
22 RD3/SPP3 RD3
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 22 / 27
23. Programa¸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
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 23 / 27
24. Programa¸c˜ao dos Perif´ericos
Configura¸c˜ao dos perif´ericos
1 TRISA = 0b00000010 ; // c o n f i g . os t e r m i n a i s como entrada e s a´ı d a
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 ; // c o n f i g . os t e r m i n a i s como entrada e s a´ı d a
5 INTCON = 0b11000101 ; // c o n f i g . com i n t e r r u p ¸c ˜a o h a b i l i t a d a
6 INTCON = 0b00000000 ; // c o n f i g . sem i n t e r r u p ¸c ˜a o
7 INTCON2 = 0b00000001 ;
8 SPPCFG = 0b00000000 ; //RB0−4 c o n t r o l a d o s p e l a porta B
9
10 TRISC = 0b10000000 ; // t e r m i n a i s s˜ao sa´ıdas , s´o RC7 ´e entrada
11 CCP1CON = 0b00001100 ; // c o n f i g . o 2o t e r m i n a l como PWM
12 CCP2CON = 0b00001100 ; // c o n f i g . o 3o t e r m i n a l como PWM
13 TXTA = 0b00101100 ; // c o n f i g . a t r a n s m i s s˜a o de dados da s e r i a l
14 RCSTA = 0b10010000 ; // c o n f i g . a recep¸c˜ao de dados da s e r i a l
15 BAUDCON = 0b00001000 ; // c o n f i g . sistema de v e l o c i d a d e da s e r i a l
16 SPBRGH = 0b00000000 ; // c o n f i g . para 56k
17 SPBRG = 0b00100010 ; // c o n f i g . para 56k
18
19 TRISD = 0b00000000 ; // c o n f i g . os t e r m i n a i s como s a´ı d a
20
21 TRISE = 0b00000000 ; // c o n f i g . os t e r m i n a i s como s a´ı d a
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 24 / 27
27. Programa¸c˜ao dos Perif´ericos
Barramento de Leds
Biblioteca de acesso aos leds:
Inicializa¸c˜ao do dispositivo
Armazenamento de vari´aveis internas (endere¸cos)
Escrita/Leitura do estado dos leds
ELT024 Programa¸c˜ao dos Perif´ericos rodrigomax@unifei.edu.br 27 / 27