7. PROGRAMANDO O MICROCONTROLADOR 1
7. PROGRAMANDO O MICROCONTROLADOR: Hardware parte física do circuito eletrônico CPU onde está localizado o microcontrolador. Dentro do microcontrolador existe um conjunto de microprogramas associados a cada uma de suas instruções. Linguagem de Máquina composta por números binários que podem ser: códigos de operação das instruções do microcontrolador (OPCODES) ou seus OPERANDOS. 2
7. PROGRAMANDO O MICROCONTROLADOR: Linguagem Assembly é o mesmo programa escrito em linguagem de máquina, mas que representa as instruções através de MNEMONICOS padronizados permitindo uma maior inteligibilidade. Linguagem de Alto Nível É a linguagem de programação que possui uma estrutura e palavras reservadas mais próximas da linguagem humana, tornando os programas mais fáceis de serem lidos e escritos. 3
7. PROGRAMANDO O MICROCONTROLADOR: Um programa, escrito em qualquer linguagem, deverá ser obrigatoriamente transformado por programas especiais (Assemblers ou Compiladores), para seu equivalente em linguagem de máquina para daí sim, estando na memória de programa, ser executado. 4
7.1 PROGRAMA EM LINGUAGEM C: 5
7.2 PROGRAMA EM ASSEMBLY: 6
7.3 RESULTADO DO COMPILADOR: 7
7.4 PROGRAMA EM LINGUAGEM DE MÁQUINA: 8
8. 8051 HARDWARE PROPOSTO: - Microcontrolador AT89S52 possui core 8051. - Mem. flash de 8 Kbytes, ISP (In-System programming) programável por meio de uma interface periférica serial (SPI). - Oscilador interno, com freqüência definida pelo cristal. - O circuito de reset: automático e manual. - P0, P1, P2 e P3 disponibilizados em barras de pinos. - P1 é dedicada à interface SPI(pinos P1.5, P1.6 e P1.7). Estes bits (MOSI, MISO E SCK), mais o sinal de reset e de GND estão disponíveis no conector P1. - Fonte 7~12V/450mA. 9
9. ASSEMBLY DO 8051: Características: Opcodes de 8 bits Extensão variável de 1 a 3 bytes Tempo de execução variável de 1 a 4 ciclos de máquina (1CM-12CLOCKS) Mnemônicos seguem o padrão Intel
9.1 OPCODES: mnemônicos MOV A, #1C ADD A, #F2 opcodes 01110100 00011100 00100100 11110010 Memória Assembler ISP, gravador, etc
9.2 LABELS: CLR C ;faz carry=0 SUBB A, R0 ;subtrai R0 de A JZ IGUAL ;se R0=A salta para IGUAL JC MAIOR ;se R0>A salta para MAIOR MENOR: MOV R1, #01 ;sinaliza em R1 que R0<A SJMP FIM MAIOR: MOV R1, #02 ;sinaliza em R1 que R0>A SJMP FIM IGUAL: MOV R1, #00 ;sinaliza em R1 que R0=A FIM: ;segue em frente Labels Comentários
9.3 CONJUNTO DE INSTRUÇÕES: Transferência de dados MOV, MOVX, MOVC PUSH, POP XCH, XCHD Aritméticas ADD, ADDC, SUBB INC, DEC MUL, DIV DA
9.3 CONJUNTO DE INSTRUÇÕES: Lógicas ANL, ORL, XRL, CLR, CPL, RL, RLC, RR, RRC, SWAP Booleanas (bits) CLR, SETB, CPL, ANL, ORL MOV
9.3 CONJUNTO DE INSTRUÇÕES: Desvio ACALL, LCALL, RET, RETI AJMP, LJMP, SJMP, JMP JZ, JNZ, JC, JNC, JB, JNB, JBC CJNE, DJNZ NOP
9.4 NOTAÇÃO DOS MNEMÔNICOS: A - acumulador B registro B Rn - R0 ~ R7 do banco em uso direto - endereço da RAM interna (8 bits) @Ri ( R0,R1) @DPTR - DPTR como ponteiro da ROM ou RAM externa (16 bits)
9.4 NOTAÇÃO DOS MNEMÔNICOS: #dado - constante de 8 bits #dado16 - constante de 16 bits Bit - flag, bit de controle ou de port de E/S end11 - endereço dentro de página de 2KB end16 - endereço dentro do espaço de 64KB rel - destino relativo à próxima instrução (-128 a +127)
9.4 NOTAÇÃO DOS MNEMÔNICOS: Endereçamento Direto MOV 25h, A Move A para o conteúdo da posição de memória 25h Endereçamento por Constante Imediata MOV A, #25h Move o dado imediato 25h (#) para A
9.5 MODOS DE ENDEREÇAMENTO: Endereçamento Indireto MOV A, @R1 Move para A o conteúdo da posição de memória apontada por R1 (@) Endereçamento via Registrador MOV A, R1 Move para A o conteúdo de R1
9.5 MODOS DE ENDEREÇAMENTO: Endereçamento Indexado MOVX A, @DPTR Move o conteúdo da posição de memória externa apontada por DPTR para A MOVX @DPTR,A Move para A o conteúdo da posição de memória externa apontada por DPTR MOVC A, @A+DPTR Move para A o conteúdo da posição de memória de código apontada por A+DPTR MOVC A, @A+PC Move para A o conteúdo da posição de memória de código apontada por A+PC
9.6 DIRETIVAS DO ASSEMBLER: ORG exp END exp label: DB exp label: DW exp label: LONG exp label: ASCII exp Label EQU val
9.7 PROGRAMA EM ASSEMBLY: TESTE EQU 01010101B ;CONSTANTE DE TESTE ORG 0000H ;ENDERECO DE RESET RESET: LJMP INICIO ;SALTA PARA O INICIO ORG 0100H ;INICIO DO PROGRAMA INICIO: MOV A, #040H ;INICIALIZA CONTADOR MOV R0, #64 ;ENDERECO INICIAL REPETE:MOV @R0, #TESTE ;ESCREVE CONSTANTE INC R0 ;PRÓXIMO ENDEREÇO DEC A ;DECREMENTA CONTADOR CJNE A, #0, REPETE ;SE NAO TERMINOU REPETE FINAL: JMP FINAL Elaborado por Gilson Yukio Sato
9.8 RESULTADO DO MONTADOR: LOC OBJ LINE SOURCE 0055 1 TESTE EQU 01010101B 2 0000 3 ORG 0000H 0000 020100 4 RESET: LJMP INICIO 5 0100 6 ORG 0100H 0100 7440 7 INICIO: MOV A, #040H 0102 7840 8 MOV R0, #64 0104 7655 9 REPETE: MOV @ R0, # 85 0106 08 10 INC R0 0107 14 11 DEC A 0108 B400F9 12 CJNE A, #0, REPETE 010B 80FE 13 FINAL: JMP FINAL Elaborado por Gilson Yukio Sato
9.9 INSTRUÇÕES DE CARGA: Instrução Descrição Exemplo Op Clk MOV A,Rn Move registro p/ acumulador MOV A,R2 1 12 MOV A,direto Move byte direto p/ acumulador MOV A,7Fh 2 12 MOV A,@Ri Move RAM indireto p/ acumulador MOV A,@R0 1 12 MOV A,#dado Move dado imediato p/ acumulador MOV A,#20 2 12 MOV Rn,A Move acumulador p/ registro MOV R7,A 1 12 MOV Rn,direto Move byte direto p/ registro MOV R3,7Fh 2 24 MOV Rn,#dado Move dado imediato p/ registro MOV R6,#200 2 12 MOV direto,a Move acumulador p/ byte direto MOV 7Fh,A 2 12 MOV direto,rn Move registro p/ byte direto MOV 7Fh,R1 2 24 MOV direto,direto Move byte direto p/ byte direto MOV 7Fh,30h 3 24 MOV direto,@ri Move RAM indireto p/ byte direto MOV 7Fh,@R0 2 24 MOV direto,#dado Move dado imediato p/ byte direto MOV 40h,#100 2 24 MOV @Ri,A Move acumulador p/ RAM indireto MOV @R4,A 1 12 MOV @Ri,direto Move byte direto p/ RAM indireto MOV @R3,40h 2 24 MOV @Ri,#dado Move dado imediato p/ RAM indireto MOV @R4,#0Fh 2 12 MOV DPTR,#dado16 Move 2 bytes p/ data pointer MOV DPTR,#2000h 3 24 Elaborado por Gilson Yukio Sato