Memória de dados interna A MD interna na família 51 proporciona 128 bytes ou 256 bytes de MD interna (conforme a versão do componente) Os endereços 0 a 7FH incluem os bancos de registos R0 a R7, posições endereçáveis ao bit (endereços 20H a 2FH) e posições para armazenamento genérico Os SFR (incluem diversos registos internos, como A, B, etc. e periféricos) situam-se nos endereços 80H a FFH e distinguem-se das posições de memória genérica no mesmo espaço através do modo de endereçamento EEC2104 Microprocessadores - FEUP / DEEC / JMF - 1 Distinção entre SFR e memória de uso genérico Os 128 bytes superiores de memória genérica (quando existem) estão acessíveis por endereçamento indirecto Os SFR, por sua vez, estão acessíveis através de endereçamento directo Todos os registos, excepto o PC e R0-R7, residem no espaço dos SFR EEC2104 Microprocessadores - FEUP / DEEC / JMF - 2
Memória de dados externa Quando a RAM interna não é suficiente, podemos acrescentar MD externa até um máximo de 64 KB (o barramento de endereços tem 16 bits) O acesso à MD externa tem lugar através das instruções MOVX A leitura é feita através de MOVX A, (activa /RD) A escrita é feita através de MOVX,A (activa /WR) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 3 Organização da MD interna 80H-FFH (end. dir. / ind.) Directo: SFR portas paralelas e série, timers / counters, registos (A, B, SP, DPTR, etc.) Indirecto: memória genérica 0-7FH R0-R7 (0-7, 8-15, 16-23, 24-31) End. ao bit, ex. SETB 0 coloca em 1 o bit 0 do endereço 20H Posições de uso genérico 80H-FFH: Espaço partilhado uso genérico (@R0/1) e SFRs (end. dir.) 0 a 7FH: Espaço não partilhado (R0-R7, posições endereçáveis ao bit, uso genérico) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 4
Memória endereçável ao bit Os endereços de bit 0 a 7FH correspondem aos 128 bits entre 20H e 2FH Os endereços de bit 80H a FFH permitem o acesso a bits seleccionados dos SFR (nem todos estes registos são acessíveis ao bit) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 5 Estas posições são acessíveis das duas maneiras: ao byte (ex. MOV A,20H) ou ao bit (ex. CLR 20H) (Re)Inicialização do µc A entrada de reset da família 51 é activa ao nível lógico 1 Ao ligarmos V CC forçamos o estado de reset (a tensão aos terminais do condensador C não pode variar bruscamente) O díodo permite a descarga rápida de C R1 e R2 devem permitir a aplicação de uma tensão próxima de V CC quando se fecha SW R1 e C garantem um tempo de reset suficiente EEC2104 Microprocessadores - FEUP / DEEC / JMF - 6
Geração do sinal de relógio XTAL2 é a saída de um amplificador interno (XTAL1 é a entrada) Um cristal colocado entre XTAL1 e XTAL2 permite a geração interna do sinal de relógio Se XTAL1 for alimentado por um gerador de sinal de relógio externo, XTAL2 deve ser deixado no ar Os condensadores (dezenas de pf) melhoram a estabilidade e facilitam o arranque EEC2104 Microprocessadores - FEUP / DEEC / JMF - 7 Sumário das instruções O 8051 tem 111 instruções que se dividem por cinco grupos: Aritméticas (24), ex. ADD, ADDC, SUBB, INC, DEC, Lógicas (25), ex. ANL, ORL, XRL, CLR, CPL, RL, Transferência de dados (28), MOV, MOVX, MOVC, Booleanas (17), ex. CLR, SETB, JC, JNB, JBC, Salto (17), ex. ACALL, LCALL, RET, RETI, EEC2104 Microprocessadores - FEUP / DEEC / JMF - 8
Modos de endereçamento São os seguintes os modos de endereçamento suportados pela família 51: Directo (é dado o endereço) Ao registo (o opcode codifica qual o registo a usar) Indirecto (usa-se outro registo como apontador) Imediato (para passar uma constante) Específico (instruções específicas de alguns registos) Indexado (um registo como apontador a indicar o endereço de base e outro registo como índice) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 9 Endereçamento directo Apesar de existirem apenas 111 instruções, o número de códigos de instrução é muito superior (MOV A,50H é diferente de MOV A,#50H) No endereçamento directo o endereço do operando é indicado explicitamente (MOV A,50H) O assembler da KEIL substitui o nome dos registos pelo seu endereço, o que possibilita a escrita de instruções como MOV B,#50 MOV A,50H e MOV ACC,50H serão diferentes? EEC2104 Microprocessadores - FEUP / DEEC / JMF - 10
Endereçamento ao registo Existem códigos de instrução que usam três bits para indicar qual o registo envolvido: MOV R0,#50 tem por opcode Recorde-se que há quatro bancos de registos na memória de dados interna (0-7, 8-15, ) A definição do banco a usar é feita através de dois bits no PSW (program status word) A instrução MOV R0,#50 escreve o decimal 50 (32H) em que posição de memória? EEC2104 Microprocessadores - FEUP / DEEC / JMF - 11 Endereçamento indirecto O endereçamento indirecto usa um registo como apontador para o operando, ex. MOV A,@R1 O e-book recomendado refere quatro tipos de endereçamento indirecto: Via R0 e R1 (só estes, R2 a R7 não) Via DPTR (Data Pointer) DPTR + ACC ou PC + ACC (base, index) A instrução XCHD A,@R i Este é na verdade o modo indexado EEC2104 Microprocessadores - FEUP / DEEC / JMF - 12 (descrito adiante)
Endereçamento imediato Este modo de endereçamento é usado quando queremos transferir uma constante (MOV 50,#50) Uma única instrução pode (e frequentemente assim acontece) usar mais do que um modo de endereçamento No caso de MOV 50,#50 quais são os modos usados? Existirão também MOV #50H,50 e MOV 50H,#50H? E o caso de MOV A,#R0? EEC2104 Microprocessadores - FEUP / DEEC / JMF - 13 Endereçamento específico Há instruções que são específicas de alguns registos (CPL A) O e-book recomendado usa a expressão zeroaddress instructions (no sentido em que não contêm um endereço explícito) ou ainda implied addressing Este e-book também usa as expressões oneaddress instruction and two-address instruction EEC2104 Microprocessadores - FEUP / DEEC / JMF - 14
Endereçamento indexado Neste modo de endereçamento usa-se um registo para indicar o endereço de base e o acumulador para indicar um offset (distância em relação ao endereço de base), ex. MOVC A,@A+DPTR Este modo de endereçamento é útil para aceder a tabelas (o registo que contém o endereço de base aponta para o início da tabela) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 15 Ciclo de desenvolvimento de código Escrever o código em assembly (mnemómicas) e guardar como um ficheiro de texto Realizar a análise sintáctica e compilar para código objecto (µvision da KEIL) Correr o código no sistema-alvo final (produzir e instalar o firmware final) Validar o código desenvolvido por simulação e depois execução (dscope da KEIL) EEC2104 Microprocessadores - FEUP / DEEC / JMF - 16
Desenvolvimento de software Ferramentas principais ICE: In-circuit emulators ( emuladores em-circuito, que servem para realizar a integração de hardwaresoftware) substituem o micro no sistema-alvo e permitem a execução controlada do programa ROM emulators Usam uma RAM para substituir a ROM que conterá o código-objecto final Pequenos dispositivos (ex. LED, buzzer, etc.) que servem para observar os efeitos da execução do programa EEC2104 Microprocessadores - FEUP / DEEC / JMF - 17 Desenvolvimento de hardware Existem ferramentas activas e passivas: As passivas permitem apenas observar o funcionamento do sistema (ex. osciloscópio, voltímetro, analisador lógico, etc.) As activas podem assumir um carácter intrusivo e permitem ao projectista controlar o funcionamento do sistema (o host contêm as ferramentas de desenvolvimento e o target corresponde ao hardware onde correrá o código desenvolvido o sistema-alvo ) Os ICE são também um exemplo deste segundo tipo EEC2104 Microprocessadores - FEUP / DEEC / JMF - 18