SISTEMAS MICROCONTROLADOS UTFPR Código: EL54E Turma: N11/E11 Prof. Sérgio Moribe Colaboração: Prof. Heitor S. Lopes Prof. Rubens Alexandre de Faria Email: [email protected] Site: pessoal.utfpr.edu.br/smoribe Linguagem do Microcontrolador. Um microprocessador/microcontrolador é um elemento eletrônico, desenvolvido para executar tarefas específicas, com linguagem de comando específica. Esta linguagem de comando específica é a linguagem de máquina, que é inteiramente constituida de números binários (bits), sendo definida pelo fabricante do chip. PROF. SÉRGIO MORIBE - UTFPR 2 Linguagem do Microcontrolador. Para facilitar, criou-se a Linguagem Assembly, que possue a mesma estrutura e conjunto de instruções, porem utiliza nomes (mnemônicos) e símbolos no lugar dos números. A conversão da Ling. Assembly para a ling. de máquina é feita pelo “assemblador” (montador = assembler) A linguagem assembly ainda é específica para cada tipo de CPU, sendo considerada uma linguagem de baixo nível. Para tornar a programação mais próxima da linguagem humana, criou-se as linguagens de alto nível, como Pascal, Basic, C, .... A conversão desta linguagem para linguagem de máquina/assembly é feita pelo “compilador”. PROF. SÉRGIO MORIBE - UTFPR 3 Ling. Assembly 8051 – Modos de Endereçamento. O 8051 apresenta 111 tipos de instruções, sendo 49 de um byte, 45 de dois bytes e 17 de três bytes. Levando-se em contas as variações de cada tipo, chega-se a 255 instruções. Para aprendermos como funcionam todas estas instruções, precisamos entender bem apenas 8 modos de endereçamento: 1) Registrador 2) Direto 3) Indireto 4) Imediato 5) Relativo 6) Absoluto 7) Longo 8) Indexado PROF. SÉRGIO MORIBE - UTFPR 4 Modo de Endereçamento Imediato: Significam que o código da instrução já é codificado imediatamente junto com uma constante, chamado dado imediato. Constantes do tipo imediato são precedidos do sinal # Este tipo de instrução é codificado em 2 Bytes ou em 3 Bytes quando se usa o DPTR. Exemplos: MOV A,#30h ; A ← 30h MOV DPTR,#20FFh ; DPTR ← 20FFh, DPH ← 20h e DPL ← FFh PROF. SÉRGIO MORIBE - UTFPR 5 Modo de Endereçamento Registrador: Permite o acesso aos registros R0 a R7 do banco de registros em uso (working registers), definido pelos bits de controle RS1 e RS0 existentes no registro de função especial PSW. Exemplos: MOV A,R0 DEC R0 ; A ← R0 ; R0 ← R0 – 1 Este tipo de instrução é codificado em 1 byte. Importante! Precisa saber qual Banco de Registradores de trabalho (working register) está ativo. PROF. SÉRGIO MORIBE - UTFPR 6 MAIS DETALHES DA RAM INTERNA PROF. SÉRGIO MORIBE - UTFPR 7 Modo de Endereçamento Direto: Referem-se diretamente ao endereço ou mnemônico (apelido) dos registradores internos da RAM. Exemplos: MOV A,P3 MOV 30H,A ; A ← P3 ; 30H ← A Este tipo de instrução é codificado em 2 Bytes PROF. SÉRGIO MORIBE - UTFPR 8 Modo de Endereçamento Indireto: Nesse caso o endereço da posição de memória onde será efetuada a operação é indicado de forma indireta pelos registros R0 ou R1 ou pelo registro DPTR. Os registros R0, R1 e DPTR atuam como ponteiros nessas instruções. R0 e R1 ponteiros para endereços de 8 bits DPTR um ponteiro para endereços de 16 bits. Os ponteiros são precedidos pelo símbolo @, para indicar endereçamento indireto. Este tipo de instrução é codificado em 1 Bytes PROF. SÉRGIO MORIBE - UTFPR 9 Modo de Endereçamento Indireto: Exemplos: Supondo: Que na posição 30h da RAM interna temos o valor 5Ah Que R1 = 30h Se executarmos a instrução: MOV A,@R1 ; A ← (R1) = A ← (30h) = A ← 5Ah Move para A o conteúdo da memória apontada por R1 PROF. SÉRGIO MORIBE - UTFPR 10 Modo de Endereçamento Indireto: Exemplos: Supondo: Que na posição 2000h da RAM externa temos o valor A9h Que DPTR = 2000h, DPH = 20h e DPL = 00h Se executarmos a instrução: MOVX A,@DPTR ; A ← (DPTR) = A ← (2000h) = A ← A9h Move para A o conteúdo da memória apontada por DPTR PROF. SÉRGIO MORIBE - UTFPR 11 Modo de endereçamento da RAM interna. PROF. SÉRGIO MORIBE - UTFPR 12 Modo de Endereçamento Relativo: Permite realizar um salto em relação a posição do PC. Esse endereço relativo (Offset) é um dado de 8 bits sinalizado, isto é, realiza um salto relativo ao endereço que está o PC de -128 a +127 Este tipo de instrução é codificado em 2 Bytes. PROF. SÉRGIO MORIBE - UTFPR 13 Ex. Endereçamento Relativo - Nicolosi PROF. SÉRGIO MORIBE - UTFPR 14 Modo de Endereçamento Absoluto: Instruções ACALL e AJMP, permitem desvio de até 2 Kbytes relativo em apenas 2 bytes de código. A memória é dividida em 32 páginas de 2 Kbytes absolutos. O endereçamento relativo de destino às instruções ACALL e AJMP deve estar dentro da mesma página de 2 kbytes em que o código deles está gravado. Este tipo de instrução é codificado em 2 Bytes. PROF. SÉRGIO MORIBE - UTFPR 15 PROF. SÉRGIO MORIBE - UTFPR 16 PROF. SÉRGIO MORIBE - UTFPR 17 Modo de Endereçamento Longo: Instruções LCALL e LJMP, permitem desvio de até 16 bits que mapeia todo o espaço disponível de endereços (64Kbytes). A desvantagem dessas instruções é que elas ocupam 3 bytes de programa. Este tipo de instrução é codificado em 3 Bytes. PROF. SÉRGIO MORIBE - UTFPR 18 Modo de Endereçamento Indexado: São instruções cujo endereço de destino depende não só do endereço inserido na instrução, mas também do conteúdo de A (index) naquele instante. Este tipo de instrução é codificado em 1 Byte Exemplo: Supondo que na ROM tenha uma tabela de valores Bytes e voce queira o terceiro valor da mesma que é 33h, então: MOV DPTR,#TABELA MOV A,#03 MOVC A,@A+DPTR ; A ← (A+DPTR) = 33h PROF. SÉRGIO MORIBE - UTFPR 19 Endereçamentos Combinados ou Misto Apresentamos algumas combinações de endereçamento possíveis: MOV R0,20h MOV 30h,R4 MOV R1,#40h MOV 60h,#55h MOV @R1,#33h MOV 50h,@R1 MOV @R0,50h MOV 40h,50h ;Registrador e Direto ;Direto e Registrador ;Registrador e Imediato ;Direto e Imediato ;Indireto e Imediato ;Direto e Indireto ;Indireto e Direto ;Direto e Direto PROF. SÉRGIO MORIBE - UTFPR 20 Conjunto de Instruções O conjunto das instruções do 8051 é dividido em 5 grupos: Transferência de dados, Operações lógicas, Operações aritméticas, Manipulação de variáveis booleanas (Bits) Controle de programa (Desvios) PROF. SÉRGIO MORIBE - UTFPR 21 Simbologia utilizada: Rn ==> Indica Registro R0 a R7 genericamente. Ri ==> Indica Registro R0 ou R1 @ ==> Significa "endereçamento indireto" #Dado ==> Indica valor constante de 8 bits. #Dado 16 ==> Indica valor constante de 16 bits. Direto ==> Indica um endereço de memória de 8 bits (256 posições internas - RAM interna e Registros de Função Especial ). Bit ==> Endereço direto do bit. End 11 ==> Endereço de destino de 11 bits. End 16 ==> Endereço de destino de 16 bits. rel ==> Indica que endereçamento é relativo. PROF. SÉRGIO MORIBE - UTFPR 22 Instruções de Transferência PROF. SÉRGIO MORIBE - UTFPR 23 Instruções Lógicas PROF. SÉRGIO MORIBE - UTFPR 24 Instruções Aritméticas PROF. SÉRGIO MORIBE - UTFPR 25 Instruções Manipulação de Bit PROF. SÉRGIO MORIBE - UTFPR 26 Instruções de Desvio PROF. SÉRGIO MORIBE - UTFPR 27 Instruções que afetam os Flags do PSW PROF. SÉRGIO MORIBE - UTFPR 28 Detalhes de algumas Instruções: Instruções PUSH e POP SP (Stack Pointer) 81h = Apontador de Pilha: Registrador de função especial de 8 bits que contem o endereço do topo da Pilha. O armazenamento na pilha, então é feita indiretamente pelo SP. Pilha (Stack) : Área especial de memória RAM para armazenamento temporário de dados e endereços. Utiliza estrutura LIFO (Last In First Out). A Pilha deve ser montada na RAM interna e quando se tem o RESET o SP ← 07h. Para utilizar o Banco de Registradores 1, recomendase carregar SP na inicialização com um endereço mais no fim da memória RAM para formar a pilha PROF. SÉRGIO MORIBE - UTFPR 29 Definindo posição da Pilha PROF. SÉRGIO MORIBE - UTFPR 30 Instrução PUSH 00h - Empilhar PROF. SÉRGIO MORIBE - UTFPR 31 Instrução POP 01h - Desempilhar PROF. SÉRGIO MORIBE - UTFPR 32 Instrução XCH A,@R0 Troca os conteúdos do A e da posição de memória endereçada por R0 Por exemplo: A = 3Ch, R0 = 20h e (20h) = A4h Após: XCH A,@R0 A = A4h, R0 = 20h e (20h) = 3Ch PROF. SÉRGIO MORIBE - UTFPR 33 Instrução MOVX – RAM externa Se A = xx DPTR = 1200h e (1200h) = 5Bh MOVX A,@DPTR ; le RAM externa A = 5Bh DPTR = 1200h Se A = 55h DPTR = 2000h (2000h) = xx MOVX @DPTR,A ;escreve na RAM externa A = 55h DPTR = 2000h PROF. SÉRGIO MORIBE - UTFPR (2000h) = 55 34 Instrução MOVC – Lê ROM Permite ler dados pré-gravados na ROM, geralmente tabela de dados fixos. Se A = 03h DPTR = 0400h MOVC A,@A+DPTR A = B3h (0403h) = B3h ;lê da ROM DPTR = 0400h (0403h) = B3h PROF. SÉRGIO MORIBE - UTFPR 35 Instrução ADDC Supondo A = 3Ah , R0 = 55h e Cy= 1 ADDC A,R0 A ← A + R0 + Cy A = 90h PROF. SÉRGIO MORIBE - UTFPR 36 Instrução SUBB Instrução de subtração sempre subtrai o segundo operando e o Cy do Acumulador Supondo A = A7h R0 = 4Bh e Cy = 1 SUBB A,R0 A ← A – R0 – Cy A = 5Bh PROF. SÉRGIO MORIBE - UTFPR 37 Instrução MUL AB Multiplicação Supondo A = B5h e B = 3Dh MUL AB AxB B ← Resultado MSB A ← Resultado LSB B = 2Bh A = 21h PROF. SÉRGIO MORIBE - UTFPR 38 Instrução DIV AB Divisão: Supondo A = E2h B = 34h DIV AB A/B A ← Resultado parte inteira B ← Resto da divisão A = 04h B = 12h PROF. SÉRGIO MORIBE - UTFPR 39 Instrução DA A Faz um ajuste decimal para operações com números BCD (Binary Coded Decimal). Deve ser utilizada logo após a operação aritmética. Supondo A = 85h ADD A,R1 DA A R1 = 46h ; A = CBh ; A = 31h PROF. SÉRGIO MORIBE - UTFPR e Cy = 1 40 Instrução SETB “Seta” o Bit SETB SETB 23h P3.2 ; bit (23h) = 1 ;P3.2 = 1 PROF. SÉRGIO MORIBE - UTFPR 41 Instrução JNB bit,rel Salta se o bit não for “1”, ou seja, se estiver em “0” Obs. Endereçamento Relativo (+127 a -128) JNB P2.1,fim . . . . fim: . PROF. SÉRGIO MORIBE - UTFPR 42 Instrução CJNE Compara e salta se forem diferentes Não altera nenhum operando, altera apenas o flag Cy. CJNE R0,#55h,diferente diferente: PROF. SÉRGIO MORIBE - UTFPR 43 Instruções LCALL / RET SUBROTINAS: Em um programa é comum a existência de funções específicas que podem ser requeridas várias vezes. Para evitar codificação redundante, reduzir o espaço ocupado e melhorar a estrutura do programa, criam-se as subrotinas. Chamar subrotina implica em mudar o fluxo normal de execução, processar a subrotina e voltar ao ponto do programa imediatamente posterior à instrução de chamada. PROF. SÉRGIO MORIBE - UTFPR 44 Instrução LCALL Chamada de Subrotina Supondo SP = 07h e uma subrotina de nome SBTRN no endereço 056Fh Depois de LCALL SBTRN (08) = PCL (09) = PCH SP = 09h PC = 056Fh PROF. SÉRGIO MORIBE - UTFPR 45 Instrução RET Retorno de Subrotina Supondo o retorna da subrotina SBTRN do exemplo anterior . . RET SP = 07h PC = SP(PCH PCL) PROF. SÉRGIO MORIBE - UTFPR 46 Documentação da Subrotina Toda subrotina criada deve ser precedida por uma documentação em forma de cabeçalho. A documentação deve ter a informação suficiente para que outro programador possa utilizar a subrotina sem a necessidade de olhar o código fonte. PROF. SÉRGIO MORIBE - UTFPR 47 Exemplo Documentação de Subrotina ;********************************************************** ;Nome: LimpaMem ;Descrição: Zera um bloco de memória RAM interna. ;Par. Entrada: R0 = Endereço inicial do bloco ; R1 = Número de bytes do bloco ;Par. Saída: R0 = Endereço final do bloco + 1 ;Altera: R0, R1 ;********************************************************** LimpaMem: MOV @R0,#00 ;Zera memória INC R0 ;Próximo endereço DJNZ R1,LimpaMem ;Zera todo bloco RET PROF. SÉRGIO MORIBE - UTFPR 48