Académique Documents
Professionnel Documents
Culture Documents
Rodrigo Almeida
rodrigomax@unifei.edu.br
Revisao
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
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
Terminal
40 39 38 37 36 35 34 33
Fsico
Bit nmero
7 6 5 4 3 2 1 0
PORTB
memria
leitura
entrada N
da porta X escrita porta x
bit N
controle de direo
do sinal
direo
bit N
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 }
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.
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 )
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 )
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
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
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
Barramento de Leds
Barramento de Leds
Barramento de Leds
Exerccio
Criar uma biblioteca para os leds
Pode fazer uso do basico.h e config.h
Barramento de Leds