[8051] Efeito supermáquina

Código testado no AT89S8252.

Simula o efeito super-máquina.

Código Fonte

ORG 0000H

;ROTACIONA BIT PARA ESQUERDA
RODA_INI: MOV A,#0000001B ;Inicia Acumulador Com O Primeiro Bit Setado
RODA: MOV R7,A ;Guarda Valor Do Acumulador Em R7
CPL A ;Inverte Os Bits Do Acumulador
MOV P2,A ;Move Conteudo Do Acumulador Para P2
MOV A,R7 ;Retorna R7 Para Acumulador
RL A ;Rotaciona Os Bits Para A Esquerda
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
CJNE A,#01H,RODA ;Se Acumulador É Igual A 01h Continua, Se Não For Volta Para Roda

;ROTACIONA BIT PARA DIREITA
RODA2_INI: MOV A,#1000000B ;Inicia Acumulador Com O Ultimo Bit Setado
RODA2: MOV R7,A ;Guarda Valor Do Acumulador Em R7
CPL A ;Inverte Os Bits Do Acumulador
MOV P2,A ;Move Conteudo Do Acumulador Para P2
MOV A,R7 ;Retorna R7 Para Acumulador
RR A ;Rotaciona Os Bits Para A Direita
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
CJNE A,#01H,RODA2 ;Se Acumulador É Igual A 01h Continua, Se Não For Volta Para Roda2

;PISCA-PISCA TODO PORT
PISCA_INI: MOV A,#04H ;Armazena Quantas Piscadas Serão Realizadas(4 Vezes)
PISCA: MOV P2,#0FFH ;Desliga Todos Os Leds
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
MOV P2,#0H ;Liga Todos Os Leds
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
DEC A ;Decrementa Acumulador
CJNE A,#00H,PISCA ;Se Acumulador É Igual A 00h Continua, Se Não For Volta Para Pisca
;EFEITO SUPERMAQUINA
MOV R6,#05H ;Quantidade De Repetições Do Efeito
EFEITO_INI: MOV R4,#80H ;Inicia Registrador R4 Com 80h
MOV R5,#01H ;Inicia Registrador R5 Com 01h
MOV A,R5 ;Coloca Valor De R5 No Acumulador
ORL A,R4 ;Realiza A Função OR Entre Acumulador E Registrador R4 E Guarda Valor No Acumulador
MOV R7,A ;Guarda Valor Do Acumulador Em R7
CPL A ;Inverte Os Bits Do Acumulador
MOV P2,A ;Grava Valor Do Acumulador No PORT P2
MOV A,R7 ;Retorna R7 Para Acumulador
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
EFEITO: MOV A,R4 ;Coloca Valor De R4 No Acumulador
RR A ;Rotaciona Bits A Direita No Acumulador
MOV R4,A ;Guarda Valor Do Acumulador Em R4
MOV A,R5 ;Coloca Valor De R5 No Acumulador
RL A ;Rotaciona Bits A Esquerda No Acumulador
MOV R5,A ;Guarda Valor Do Acumulador Em R4
ORL A,R4 ;Realiza A Função OR Entre Acumulador E Registrador R4 E Guarda Valor No Acumulador
MOV R7,A ;Guarda Valor Do Acumulador Em R7
CPL A ;Inverte Os Bits Do Acumulador
MOV P2,A ;Grava Valor Do Acumulador No PORT P2
MOV A,R7 ;Retorna R7 Para Acumulador
CALL T_1S ;Chama A Rotina De Delay De 1 Segundo
CJNE A,#81H,EFEITO ;Verifica Se Valor No Acumulador É 81h, Se Sim Continua, Caso Contrario Volta Para Efeito

MOV A,R6 ;Coloca Valor De R6 No Acumulador
DEC A ;Decrementa Acumulador
MOV R6,A ;Guarda Acumulador Em R6

CJNE A,#00,EFEITO_INI ;Verifica Se Acumulador Está Com O Valor 0h, Se Sim Continua, Caso Contrario Vai Para Efeito_ini

LJMP RODA_INI ;Volta Para O Inicio Do Programa

;TEMPO DE 1 SEGUNDO
;R0=08 R1=250 R2=250
T_1S: MOV R0,#02
VOLTA2: MOV R1,#250
VOLTA1: MOV R2,#250
DJNZ R2,$
DJNZ R1,VOLTA1
DJNZ R0,VOLTA2
RET

END

Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[8051] Efeito supermáquina
Tags:         

Deixe uma resposta

%d blogueiros gostam disto: