Transformando uma placa de sucata em um Kit de Desenvolvimento 8051: Microcontrolador 80C32 com memória de programa externa EPROM 27C512.
Projeto Teste da Comunicação Serial com o 8051: o programa inicia e envia algumas mensagens de texto para o computador pela comunicação serial. Depois passa a aguardar dados vindos pela serial e retorna os caracteres para o computador como uma função de echo. A cada dado recebido o 8051 inverte o status do LED ligado no Port P1.4. Trabalha com a Interrupção Serial.
Você vai aprender a trabalhar com a memória EPROM 27C512, como fazer o apagamento da memória com luz Ultra Violeta e fazer a gravação com o programador Minipro / TL866 II plus.
Figura 1 - Diagrama do circuito com o Microcontrolador 80C32 e memória externa EPROM 27C512.
Figura 2 - Placa de sucata com o Microcontrolador 80C32 e memória externa EPROM 27C512.
Figura 3 - Ferramentas utilizadas.
Código do projeto Testando a Comunicação Serial do 8051.
;############ PROGRAMA 8051 COM LED E SERIAL ###############
; ENVIA MENSAGENS INICIAIS PARA O COMPUTADOR
; DEVOLVE DADO RECEBIDO PARA O COMPUTADOR E INVERTE STATUS DO LED
; COMPILADOR ASM51 ou Keil
; V 1.1 ABRIL/2013 PLACA AT89S52
; V 1.2 MARÇO/2021 ADAPTADO PARA PLACA 80C32
; v 1.3 CORRIGIDO BUG DA INTERRUPCAO SERIAL
; M.R.G.
; PINO 10, P3.0 = RX
; PINO 11, P3.1 = TX
; PINO 5, P1.4 = LED
; PINO 15, P3.5 = enable drive MTA011
$MOD51
; *************** DEFINE CONSTANTES **************
TEMPO EQU 60535
TEMPO2 EQU 15535
STRING01 EQU 0500h
STRING02 EQU 0520h
STRING03 EQU 0540h
STRING04 EQU 0560h
STRING05 EQU 0580h
STRING06 EQU 0600h
STRING07 EQU 0620h
STRING08 EQU 0640h
TRANSMIT EQU F0 ;UTILIZANDO BIT DO PSW PARA FLAG DE TRANSMISSÃO
LED EQU P1.4
ENABLE_INPUT_DRIVE_MTA011 EQU P3.5
; ******************** DECLARACAO DE VARIAVEIS DA RAM **********************
;*************** VETOR DE RESET **********************************************
ORG 000H
MOV R0, #0FFH
LJMP INICGERAL
;****************** TRATAMENTO DA INTERRUPÇÃO SERIAL ***************************
ORG 023H
LJMP INT_SERIAL
ORG 100H
INT_SERIAL:
JNB RI, INT_TX ;SEPARA POR SOFTWARE A INTERRUPCAO DA TRANSMISSAO E DA RECEPCAO
INT_RX:
MOV A,SBUF ;MOVE DADO RECEBIDO DA SERIAL PARA R1
MOV R1, A ;MOVE DADO DO ACUMULADOR PARA REGISTRADOR R1
CALL TRANSMITE ;DEVOLVE DADO RECEBIDO PARA O COMPUTADOR
CPL LED ;INVERTE SAIDA DO LED
CLR RI ;LIMPA FLAG DE RECEPCAO SERIAL
INT_TX:
CLR TI ;LIMPA FLAG DE TRANSMISSAO SERIAL
RETI
;************************** MAIN ***************************************
INICGERAL:
; HABILITA ENTRADAS DO DRIVE MTA011 - TEM PORTA INVERSORA LS05 ENTRE 80C32 E MTA011
CLR ENABLE_INPUT_DRIVE_MTA011 ;QUANDO EM ZERO HABILITA DRIVE
;CONFIGURA SERIAL
MOV TMOD,#00100001B ;TIMER 1 NO MODO2 TIMER 0 MODO 1
MOV TH1,#232D ;VALOR DA RECARGA AUTOMÁTICA PARA BAUD RATE = 2400 @11,0592 MHz
SETB TR1 ;LIGO TIMER1
MOV A,PCON
SETB ACC.7 ;SETA BIT SMOD PARA TER BAUD RATE = 2400
MOV PCON,A
;MOV IE,#10010000B ;HABILITA INTERRUPÇÃO GERAL E SERIAL
MOV SCON,#01000000B ;MODO 1 DA SERIAL, DESABILITA RECEPÇÃO
; ENVIA MENSAGENS INICIAIS PELA SERIAL - COM AS INTERRUPCOES DESABILITADAS
MENSAGEM7:
MOV DPTR, #STRING07 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM1:
MOV DPTR, #STRING01 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM2:
MOV DPTR, #STRING02 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM3:
MOV DPTR, #STRING03 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM4:
MOV DPTR, #STRING04 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM5:
MOV DPTR, #STRING05 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM6:
MOV DPTR, #STRING06 ;carrega endereço da string
LCALL WRITESTRING
LCALL ENVIA_ENTER
LCALL ATRASO
MENSAGEM8:
MOV DPTR, #STRING08 ;carrega endereço da string
LCALL WRITESTRING
LCALL ATRASO
; FIM DAS MENSAGENS NO DISPLAY - HABILITA COMUNICACAO SERIAL
MOV IE,#10010000B ;HABILITA INTERRUPÇÃO GERAL E SERIAL
MOV SCON,#01010000B ;MODO 1 DA SERIAL, HABILITA RECEPÇÃO
LOOP:
LJMP LOOP
; ----------- SUB-ROTINAS DE ENVIO DE MENSAGENS ----------------
WRITESTRING:
MOV A, #0
MOVC A, @A + DPTR
CJNE A, #'$', WRITE_NEXT
SJMP FINIS_STRING
WRITE_NEXT:
MOV R1, A ;MOVE DADO DO ACUMULADOR PARA REGISTRADOR R1
LCALL TRANSMITE ;ENVIA CARACTERE PARA O COMPUTADOR
INC DPTR
SJMP WRITESTRING
FINIS_STRING:
RET
ENVIA_ENTER:
MOV A, #13 ;CR (Carriage Return) = “\r” = (char) 13
MOV R1, A ;MOVE DADO DO ACUMULADOR PARA REGISTRADOR R1
LCALL TRANSMITE ;ENVIA CARACTERE PARA O COMPUTADOR
RET
; *********** SUBROTINAS DE DELAY ****************************************
T5MS:
MOV TL0, #LOW(TEMPO)
MOV TH0, #HIGH(TEMPO)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
RET
ATRASO:
MOV R2, #10D
DENOVO:
MOV TL0, #LOW (TEMPO2)
MOV TH0, #HIGH(TEMPO2)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
DJNZ R2, DENOVO
RET
; *********** TRANSMISSAO SERIAL ****************************************
TRANSMITE:
MOV SBUF,R1 ;TRANSMITE DADO QUE ESTÁ EM R1
ESPERA:
JNB TI, ESPERA ;ESPERA TRANSMISSAO
CLR TI
RET
; MENSAGENS SALVAS NA FLASH - MEMORIA DE PROGRAMA
ORG STRING01
DB ' Microcontrolador$'
ORG STRING02
DB ' 80C32, LED e RS232$'
ORG STRING03
DB ' Freq 11.0592 MHz$'
ORG STRING04
DB ' 256 B RAM$'
ORG STRING05
DB ' 64 kB EPROM$'
ORG STRING06
DB ' 32 kB Ext RAM$'
ORG STRING07
DB 'Inicializando...$'
ORG STRING08
DB '8051 echo:>_ $'
;ENTER
;CR (Carriage Return) = “\r” = (char) 13
;LF (Line Feed) = “\n” = (char) 10
END
Figura 4 - Código em Assembly do programa 8051 Teste Serial.
Figura 5 - Apagando a memória EPROM com Luz Ultravioleta.
Figura 6 - Programando a memória EPROM com Minipro TL866 II plus.
Figura 7 - Placa 80C32 conectada ao computador pela porta serial.
Figura 8 - Mensagens iniciais enviadas do 80C32 para o computador.
Figura 9 - Frame da comunicação serial de 1 caractere medida com o osciloscópio.
Assista ao vídeo para ver como ficou nosso projeto:
Vídeo 1 - 80C32 EPROM - Projeto Teste Comunicação Serial com o 8051.
Referência:
NICOLOSI, D. E. C.; Laboratório de Microcontroladores: Treino de instruções, hardware e software. São Paulo: Érica, 2002.
Nenhum comentário:
Postar um comentário