Este microcontrolador foi projetado pela Intel porém sua arquitetura é utilizada por vários fabricantes (Texas, Atmel, ST, NXP e outros). É uma arquitetura Harvard (como o PIC) porém "amenizada" em vários aspectos.
Como exemplo de microcontrolador derivado do 8051 escolhi o Texas CC1010:
- Clock de 3 a 24MHz
- Flash de 32KB (organizada em 128 páginas de 256 bytes, cada página pode ser apagada e regravada separadamente, inclusive por controle do firmware)
- Ram de 128bytes + 2KB (veremos isto melhor adiante)
- até 26 E/S digitais
- ADC de 10 bits
- RTC
- WDT
- 4 timers (2 com PWM)
- 2 UARTS
- SPI

Somente a região DATA permite acesso direto (com o endereço codificado diretamente na instrução). O acesso às outras duas regiões é indireto: o endereço deve ser colocado em um registrador, o que torna o acesso mais complicado e lento (para acesso a variáveis individuais).
Como no PIC, uma região de endereçamento da Ram corresponde a registradores de controle do microprocessador - é a que está marcada como SFR na figura.
Do ponto de vista de registradores de uso geral, o CC1010 possui uma quantidade bem maior que o PIC:

Resumindo, o 8051 possui algumas excentricidades mas é um processador bem mais agradável de programar em Assembler que o PIC.
Como exemplo de ambiente de desenvolvimento em C, vamos examinar o Keil uVision2 (que não é a versão mais recente). A Keil é uma empresa alemã bastante tradicional neste segmento. O uVision é um produto extremamente profissional e tem uma documentação excelente.
O pacote inclui uma boa IDE (faz falta somente algo parecido ao Intelisense do Visual Studio), assembler, compilador, linker, locator (aplicativo que define os endereços absolutos onde ficarão código e dados) e debugger.
O compilador C possui uma biblioteca padrão boa e mais bibliotecas específicas para vários modelos de microcontroladores baseados na arquitetura 8051.
Para suportar as várias regiões de memória a Keil utiliza os modificadores DATA, XDATA e CODE:
- char *p;
- char code *p;
- char xdata * data p;
Na segunda linha estamos informando que p aponta para um char que está na área CODE. isto permite gerar código bem mais eficiente.
É claro que o ponteiro em si também está armazenado em algumas das regiões; o Keil permite dizer em qual delas. Na terceira linha temos um ponteiro p armazenad na região DATA que aponta para um char na região XDATA.
Um comentário:
Muito obrigado! Foi de grande ajuda...
Postar um comentário