Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Wagner da Silva Zanco Bits de Configuração Quando o programa é gravado na memória de programa do microcontrolador, uma série de configurações é armazenada em um grupo especial de registradores de configuração, os quais estão mapeados em uma região fora da memória de programa, a partir do endereço 300000h. A tabela a seguir mostra os registradores de configuração e os seus respectivos bits. File name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Default / Unprogrammed Value 300001h CONFIG1H IESO FCMEN - - FOSC3 FOSC2 FOSC1 FOSC0 00-- 0111 300002h CONFIG2L - - - BORV1 BORV0 BOREN1 BOREN0 PWRTEN ---1 1111 300003h CONFIG2H - - - WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN ---1 1111 300005h CONFIG3H MCLRE - - - - LPT1OSC PBADEN CCP2MX 1--- -011 300006h CONFIG4L DEBUG XINST - - - LVP - STVREN 10-- -1-1 300008h CONFIG5L - - - - CP3 CP2 CP1 CP0 ---- 1111 300009h CONFIG5H CPD CPB - - - - - - 11-- ---- 30000Ah CONFIG6L - - - - WRT3 WRT2 WRT1 WRT0 ---- 1111 30000Bh CONFIG6H WRTD WRTB WRTC - - - - - 111- ---- 30000Ch CONFIG7L - - - - EBTR3 EBTR2 EBTR1 EBTR0 ---- 1111 30000Dh CONFIG7H - EBTRB - - - - - - -1-- ---- 30000Eh DEVID1 DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0 xxxx xxxx 30000Fh DEVID2 DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3 xxxx xxxx Os registradores de configuração são utilizados para a configuração do modelo específico de microcontrolador e estão mapeados fora da região da memória de programa. Sendo assim, só é possível acessá-los durante a execução do programa via instrução TBLWT. Dentre as configurações possíveis, podemos destacar o tipo de oscilador e a proteção contra leitura da memória de programa. Existem duas formas de efetuar essas configurações na hora da gravação: uma é introduzir a configuração no programa-fonte por meio da diretiva #pragma config. A outra é selecionar a opção Configure/Configuration Bits... na barra de menu do MPLAB® IDE. Vejamos a seguir as opções de configuração para o PIC18F4520 no programa-fonte. Oscillator: Define o tipo de oscilador. LP Cristal de baixa potência (até 200kHz). XT Cristal/Ressonador (até 4MHz). HS Cristal/Ressonador de alta frequência (acima de 4MHz). HSPLL Cristal/Ressonador de alta frequência com o PLL habilitado. 2 Bits de Configuração RC RC externo com saída de clock. Essa opção fornece no pino OSC2/CLKO/RA6 um sinal digital com frequência quatro vezes menor que a do oscilador principal (Fosc/4). RCIO RC externo. Nessa opção o RA6 funciona como pino digital. INTIO1 Oscilador interno com Fosc/4 no pino RA6 e pino RA7 configurado como digital. INTIO2 Oscilador interno com os pinos RA6 e RA7 configurados como digitais. EC Oscilador externo com saída de clock. Essa opção fornece no pino OSC2/CLKO/RA6 um sinal digital com frequência quatro vezes menor que a do oscilador principal. ECIO Oscilador externo. Nessa opção o RA6 funciona como pino digital. Fail-Safe Clock Monitor: permite ao microcontrolador continuar em operação se ocorrer uma falha no osci- lador principal, chaveando o clock para o oscilador interno. Essa opção pode ser habilitada ou desabilitada. Internal External Switch Over Mode: permite ao microcontrolador efetuar o chaveamento do dispositivo gerador do clock. Essa opção pode ser habilitada ou desabilitada. Power Up Timer: quando ativada, faz com que o microcontrolador só comece a funcionar cerca de 72ms depois que a fonte de alimentação for energizada. Isso garante que quando ele começar a funcionar, a tensão de alimentação já esteja estabilizada, evitando problemas como travamento. Brown Out Detect: quando essa opção é ativada o microcontrolador reseta caso a tensão de alimentação caia abaixo de um determinado valor. Caso não esteja ativada o microcontrolador pode travar quando ocorrer uma queda de tensão momentânea. O Brown-out detect pode ser ativado por software ou por hardware. Quando habilitado, possui quatro opções de valor de tensão de alimentação que provoca o Reset. Watchdog Timer (WDT): circuito temporizador que provoca um Reset no programa sempre que ele produzir um timeout. Sua utilização é indicada para locais onde o programa não pode parar de funcionar, como no caso do computador de bordo de um automóvel. O WDT tem um oscilador independente do oscilador principal. Isso significa que se por algum motivo o oscilador principal travar, o WDT continua em funcionamento. É possível habilitar ou desabilitar o funcionamento do WDT. Watchdog Postscaler: define o postscaler do WDT. Faixa varia de 1:1 a 1:32.768. CCP2 Mux: define o pino que será utilizado como saída do módulo CCP2. Debug: habilita o debug. Quando habilitada, configura os pinos RB7:RB6 para serem utilizados no In-circuit Debug. Quando desabilitada, configura os pinos RB7:RB6 como digitais. Port B A/D Enable: configura pinos do Port B como digitais ou analógicos no POR. Low Power Timer Osc Enable: habilita ou desabilita operação em baixa potência do oscilador interno do Timer 1. Master Clear Enable: habilita o pino /MCLR/Vpp/RE3 a funcionar como entrada de Reset. Para configurar esse pino como digital, essa opção deve ser desabilitada. Stack Overflow Reset: quando habilitada, reseta o microcontrolador se estourar o registrador que 3 Wagner da Silva Zanco armazena os endereços de retorno de desvios incondicionais. Low Voltage Program (LVP): essa opção ativa a programação em baixa voltagem. A menos que você saiba o que está fazendo, deixe-a desabilitada. É necessário que essa opção esteja desabilitada para que o pino RB5/PGM seja configurado como digital. Extended Instruction Set Enable Bit: habilita o set de instruções estendido. Code Protect: é a mais importante opção a ser configurada. Ativado o código de proteção, não é possível ler o programa gravado no chip. O chip pode ser regravado, mas não pode ser lida a sua memória de programa até que uma nova gravação seja feita com essa opção desativada. Ativar o código de proteção garante que o programa gravado no componente não seja copiado de forma nenhuma se o microcontrolador estiver funcionando dentro das especificações elétricas definidas pelo fabricante. A proteção da memória de programa é efetuada por faixa. A tabela a seguir mostra como é dividida a memória de programa. Bloco de memória de programa Faixa Boot Block 000000h-0007FFh Block 0 000800-001FFFh Block 1 002000-003FFFh Block 2 004000-005FFFh Block 3 006000-007FFFh Data EEPROM Code Protect: se estiver desativada, todos os dados armazenados na EEPROM interna podem ser lidos pelo programa de gravação. Para proteger os dados armazenados na EEPROM, essa opção precisa ser habilitada. Table Write Protect: habilita a escrita na memória de programa em tempo de execução. Config. Write Protect: habilita a escrita nos registradores de configuração em tempo de execução. Data EEPROM Write Protect: habilita a escrita na memória EEPROM em tempo de execução. Table Read Protect: habilita a leitura na memória de programa em tempo de execução. Inclusão dos bits de configuração no programa-fonte por meio da diretiva #pragma A diretiva #pragma config pode ser utilizada para ativar as opções dos registradores de configuração no programa-fonte. O MPLAB® C18 verifica se as configurações são válidas para o modelo de microcontrolador que está sendo utilizado na aplicação. A seguir é mostrada a forma geral de utilização da diretiva #pragma config. #pragma config _configuração = valor As configurações efetuadas pela diretiva #pragma config devem ser introduzidas no início do programa-fonte, logo após o cabeçalho. Vejamos a seguir a lista de opções de configuração oferecida pela diretiva #pragma config. Bits de seleção do oscillator 4 Bits de Configuração OSC = LP Oscilador LP OSC = XTOscilador XT OSC = HS Oscilador HS OSC = RC Oscilador externo RC, CLKOUT no pino RA6 OSC = EC Oscilador EC, CLKOUT no pino RA6 OSC = ECIO6 Oscilador EC, RA6 como pino digital OSC = HSPLL Oscilador HS, PLL habilitado (Fosc = 4 x FOSC1) OSC = RCIO6 Oscilador externo RC, RA6 como pino digital OSC = INTIO67 Oscilador interno, RA6 e RA7 como pinos digitais OSC = INTIO7 Oscilador interno, CLKOUT no pino RA6, RA7 como pino digital Bit de seleção do Fail-Safe Clock Monitor FCMEN = OFF Fail-Safe Clock Monitor desabilitado FCMEN = ON Fail-Safe Clock Monitor habilitado Bit Internal External Switchover Mode IESO = OFF Oscillator Switchover mode desabilitado IESO = ON Oscillator Switchover mode habilitado Bit de habilitação do Power-up Timer PWRT = ON PWRT habilitado PWRT = OFF PWRT desabilitado Bit de habilitação do Brown-out Reset BOREN = OFF Brown-out Reset desabilitado por hardware e software BOREN = ON Brown-out Reset habilitado e controlado por software (SBOREN habilitado) BOREN = NOSLP Brown-out Reset habilitado por hardware e desabilitado no Sleep mode (SBOREN desabilitado) BOREN = SBORDIS Brown-out Reset habilitado por hardware (SBOREN desabilitado) Bits de tensão do Brown-out Reset BORV = 0 4,5V BORV = 1 4,2V BORV = 2 2,7V BORV = 3 2,0V Bit de habilitação do Watchdog Timer WDT = OFF WDT desabilitado (controle é feito pelo bit SWDTEN) WDT = ON WDT habilitado Bit de seleção de postscaler do Watchdog Timer 5 Wagner da Silva Zanco WDT = 1 1:1 WDT = 2 1:2 WDT = 4 1:4 WDT = 8 1:8 WDT = 16 1:16 WDT = 32 1:32 WDT = 64 1:64 WDT = 128 1:128 WDT = 256 1:256 WDT = 512 1:512 WDT = 1.024 1:1.024 WDT = 2.048 1:2.048 WDT = 4.096 1:4.096 WDT = 8.192 1:8.192 WDT = 16.384 1:16.384 WDT = 32.768 1:32.768 Bit de habilitação do pino Master Clear MCLRE = OFF Pino RE3 habilitado; MCLR desabilitado MCLRE = ON Pino /MCLR habilitado; pino RE3 desabilitado Habilita Low Power Timer Osc LPT1OSC = OFF Timer1 configurado para operação em alta potência LPT1OSC = ON Timer1 configurado para operação em baixa potência Bit de habilitação do Port B A/D PBADEN = OFF Pinos PORTB<4:0> como pinos digitais no Reset PBADEN = ON Pinos PORTB<4:0> como entradas analógicas no Reset Bit CCP2 Mux CCP2MX = PORTBE Saída CCP2 multiplexada no pino RB3 CCP2MX = PORTC Saída CCP2 multiplexada no pino RC1 Bit de habilitação do Stack Full/Overflow Reset STVREN = OFF Stack full/underflow não provoca Reset STVREN = ON Stack full/underflow provoca Reset 6 Bits de Configuração Bit de habilitação da Low Voltage Program LVP = OFF Single-Supply ICSP desabilitado LVP = ON Single-Supply ICSP habilitado Bit de habilitação do Extended Instruction XINST = OFF Set de instruções estendidas e modo de endereçamento indexado desabilitados (Legacy mode) XINST = ON Set de instruções estendidas e modo de endereçamento indexado habilitados Bit de habilitação do Background Debugger DEBUG = ON Background debugger habilitado, RB6 e RB7 dedicados ao In-Circuit Debug DEBUG = OFF Background debugger desabilitado, RB6 e RB7 configurados como pinos digitais Bit de proteção do Block 0 CP0 = ON Block 0 (000800-001FFFh) protegido CP0 = OFF Block 0 (000800-001FFFh) não protegido Bit de proteção do Block 1 CP1 = ON Block 1 (002000-003FFFh) protegido CP1 = OFF Block 1 (002000-003FFFh) não protegido Bit de proteção do Block 2 CP2 = ON Block 2 (004000-005FFFh) protegido CP2 = OFF Block 2 (004000-005FFFh) não protegido Bit de proteção do Block 3 CP3 = ON Block 3 (006000-007FFFh) protegido CP3 = OFF Block 3 (006000-007FFFh) não protegido Bit de proteção do Boot Block CPB = ON Boot block (000000-0007FFh) protegido CPB = OFF Boot block (000000-0007FFh) não protegido Bit de proteção da Data EEPROM Code Protect CPD = ON Data EEPROM protegido CPD = OFF Data EEPROM não protegido Bit de Table Write Protect do Block 0 WRT0 = ON Block 0 (000800-001FFFh) escrita protegida WRT0 = OFF Block 0 (000800-001FFFh) escrita não protegida Bit de Table Write Protect do Block 1 7 Wagner da Silva Zanco WRT1 = ON Block 1 (002000-003FFFh) escrita protegida WRT1 = OFF Block 1 (002000-003FFFh) escrita não protegida Bit de Table Write Protect do Block 2 WRT2 = ON Block 2 (004000-005FFFh) escrita protegida WRT2 = OFF Block 2 (004000-005FFFh) escrita não protegida Bit de Table Write Protect do Block 3 WRT3 = ON Block 3 (006000-007FFFh) escrita protegida WRT3 = OFF Block 3 (006000-007FFFh) escrita não protegida Bit de Table Write Protect do Boot Block WRTB = ON Boot block (000000-0007FFh) escrita protegida WRTB = OFF Boot block (000000-0007FFh) escrita não protegida Bit de proteção do Config. Write Protect WRTC = ON Registradores de configuração (300000-3000FFh), escrita protegida WRTC = OFF Registradores de configuração (300000-3000FFh), escrita não protegida Bit de Data EEPROM Write Protect WRTD = ON Data EEPROM, escrita protegida WRTD = OFF Data EEPROM, escrita não protegida Bit de Table Read Protect do Block 0 EBTR0 = ON Block 0 (000800-001FFFh) protegido de table reads executados em outros blocos EBTR0 = OFF Block 0 (000800-001FFFh) não protegido de table reads executados em outros blocos Bit de Table Read Protect do Block 1 EBTR1 = ON Block 1 (002000-003FFFh) protegido de table reads executados em outros blocos EBTR1 = OFF Block 1 (002000-003FFFh) não protegido de table reads executados em outros blocos Bit de Table Read Protect do Block 2 EBTR2 = ON Block 2 (004000-005FFFh) protegido de table reads executados em outros blocos EBTR2 = OFF Block 2 (004000-005FFFh) não protegido de table reads executados em outros blocos Bit de Table Read Protect do Block 3 EBTR3 = ON Block 3 (006000-007FFFh) protegido de table reads executados em outros blocos EBTR3 = OFF Block 3 (006000-007FFFh) não protegido de table reads executados em outros blocos Bit de Table Read Protect do Boot Block EBTRB = ON Boot block (000000-0007FFh) protegido de table reads executados em outros blocos EBTRB = OFF Boot block (000000-0007FFh) não protegido de table reads executados em outros blocos 8 Bits de Configuração Inserindo os bits de configuração no programa-fonte A seguir é apresentado um exemplo de configuração dos registradores de configuração utilizando a diretiva #pragma config. Veja que o oscilador HS é habilitado, o Power-on Reset habilitado, o Brown- out Reset habilitado por hardware com tensão de 4,2V, o pino /MCLR habilitado, a baixa tensão de programação desabilitada, o boot block protegido contra leitura, o boot block protegido contra escrita, escrita protegida nos registradores de configuração, o boot block protegido contra table reads. #pragma config OSC = HS //oscilador HS #pragma config FCMEN = OFF // Fail-Safe Clock Monitor desabilitado #pragma config IESO = OFF // Oscillator Switchover mode desabilitado #pragma config PWRT = ON // PWRT habilitado #pragma config BOREN = SBORDIS //Brown-out Reset habilitado por hardware (SBOREN desabilitado) #pragma config BORV = 1 //Tensão de Reset do Brown-out Reset de 4,2V #pragma config WDT = OFF // WDT desabilitado (controle é feito pelo bit SWDTEN) #pragma config MCLRE = ON //pino /MCLR habilitado #pragma config LPT1OSC = OFF // Timer1 configurado para operação em alta potência #pragma config PBADEN = OFF // Pinos PORTB<4:0> como pinos digitais no Reset #pragma config CCP2MX = PORTC // Saída CCP2 multiplexada no pino RC1 #pragma config STVREN = OFF // Stack full/underflow não provocará Reset #pragma config LVP = OFF // Single-Supply ICSP desabilitado #pragma config XINST = OFF // Set de instruções estendido e modo de endereçamentoindexado desabilitados #pragma config DEBUG = OFF // Background debugger desabilitado, RB6 e RB7 como pinos digitais #pragma config CP0 = OFF // Block 0 (000800-001FFFh) não protegido #pragma config CP1 = OFF // Block 1 (002000-003FFFh) não protegido #pragma config CP2 = OFF // Block 2 (004000-005FFFh) não protegido #pragma config CP3 = OFF // Block 3 (006000-007FFFh) não protegido #pragma config CPB = ON // Boot block (000000-0007FFh) protegido #pragma config CPD = OFF // Data EEPROM não protegida #pragma config WRT0 = OFF // Block 0 (000800-001FFFh) escrita não protegida #pragma config WRT1 = OFF // Block 1 (002000-003FFFh) escrita não protegida #pragma config WRT2 = OFF // Block 2 (004000-005FFFh) escrita não protegida #pragma config WRT3 = OFF // Block 3 (006000-007FFFh) escrita não protegida #pragma config WRTB = ON // Boot block (000000-0007FFh) escrita protegida #pragma config WRTC = ON // Registradores de configuração (300000-3000FFh) escrita protegida #pragma config EBTR0 = OFF /*Block 0 (000800-001FFFh) não protegido de table reads executados em outros Blocos*/ #pragma config EBTR1 = OFF /* Block 1 (002000-003FFFh) não protegido de table reads executados em outros blocos*/ #pragma config EBTR2 = OFF /* Block 2 (004000-005FFFh) não protegido de table reads executados em outros blocos*/ #pragma config EBTR3 = OFF /* Block 3 (006000-007FFFh) não protegido de table reads executados em outros blocos*/ #pragma config EBTRB = ON /* Boot block (000000-0007FFh) protegido de table reads executados em outros blocos*/ A outra forma de configurar os registradores de configuração na hora da gravação é selecionar a opção Configure/Configuration Bits... na barra de menu do MPLAB IDE. A Figura A.1 mostra a janela com as configurações disponíveis para o PIC18F4520. 9 Wagner da Silva Zanco Figura A.1
Compartilhar