terça-feira, 20 de abril de 2021

80C32 + EPROM 27C512 - O primeiro projeto 8051 Pisca LED 1 Hz

 Transformando uma placa de sucata  em um Kit de Desenvolvimento 8051: Microcontrolador 80C32 com memória de programa externa EPROM 27C512.


Projeto 8051 Pisca LED a 1 Hz no Port P1.4.

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 para o primeiro projeto 8051 Pisca LED 1 Hz.



 ;############ PISCA LED 1 HZ ###############

; MICROCONTROLADOR 8051 
; COMPILADOR ASM51 ou Keil
; MAIO/2013  M.R.G. original placa desenvolvimento  aT89s82
; MARC/2021  M.R.G. adaptado para placa 80c32 + EPROM 27C512
; PINO 5, P1.4 = LED


$MOD51

; *************** DEFINE CONSTANTES   ************** 
		TEMPO10MS			EQU 	9210
		LED				EQU	P1.4
		ENABLE_INPUT_DRIVE_MTA011	EQU	P3.5
		
;*************** VETOR DE RESET ****************************************

		ORG	000H

		LJMP INICIO

;************************** MAIN ***************************************
		ORG	100H

INICIO:	

;CONFIGURA TIMER0

		MOV	TMOD,#00000001B				;TIMER 0 MODO 1 - 16 BITS



; HABILITA ENTRADAS DO DRIVE MTA011 - TEM PORTA INVERSORA LS05 ENTRE 80C32 E MTA011
               CLR ENABLE_INPUT_DRIVE_MTA011	                ;QUANDO EM ZERO HABILITA DRIVE



LOOP:
		MOV R0, #50D			                ;50 X 10 MS = 500 MS
DELAY10MS:							  	
		MOV TL0, #LOW (65535-TEMPO10MS)	                ;CARREGA VALOR PARA TIMER 0
		MOV TH0, #HIGH(65535-TEMPO10MS)
		SETB TR0					;LIGA TIMER 0
		JNB TF0, $					;AGUARDA FIM DA CONTAGEM
		CLR TR0						;LIMPA FLAG
		CLR TF0
		DJNZ R0, DELAY10MS				;DECREMENTA E VERIFICA SE TERMINOU OS 50 LOOPS

		CPL LED						;INVERTE SAIDA PARA O LED
		LJMP LOOP

		
	END	

Figura 4 - Código em Assembly do programa 8051 Pisca LED 1Hz.



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 rodando o programa. LED piscando a 1 Hz




Assista ao vídeo para ver como ficou nosso projeto:

Vídeo 1 - 80C32 EPROM - O primeiro projeto 8051 Pisca LED 1 Hz.




Referência:

NICOLOSI, D. E. C.; Laboratório de Microcontroladores: Treino de instruções, hardware e software. São Paulo: Érica, 2002.




80C32 + EPROM 27C512 - Projeto Testando a Comunicação Serial do 8051

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.