Ir ao conteúdo
  • Cadastre-se

Outro programação em Assembly LEDs


Posts recomendados

Oi, boa tarde membros. 
Eu tô querendo fazer um programa em assembly para o microcontrolador 8051. A minha ideia é a seguinte. 
Eu vou colocar 7 leds enfileirados e desejo fazer uma comunicação serial assim.: 
Apertando "L" - Todos os LEDs ligam. ( Essa parte ok )
Apertando "D" - Todos os LEDs desligam. ( Essa parte ok ) 
Apertando "R" - Os LEDs vão acendendo de um por um na direção da  direita. ( Essa parte ok )

Apertando "E" - Os LEDs vão acendendo de um por um na direção da  esquerda. ( Essa parte ok )
Apertando " + " - O acendimento deles deslocam pra direta/esquerda mais rápido ( Essa parte eu tô com dúvida)
Apertando " -  " - O acendimento deles deslocam pra direta/esquerda mais devagar. ( Essa parte eu tô com dúvida) 
Pode usar interrupção, timers e comunicação serial. 
Quem souber o programa completo agradeço desde já, quem souber a parte do " + " e do " - " agradeço também. Tenham um ótimo domingo. 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ahhhh,,, assembly? Mesmo assim, pra motivar melhor alguém a te ajudar, publique seu fonte mostrando as...

7 horas atrás, Matheusc6 disse:

parte ok

e identificando as que estás ...

7 horas atrás, Matheusc6 disse:

 com dúvida

 

7 horas atrás, Matheusc6 disse:

Quem souber o programa completo

isso não é nada motivador

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sabes programar os timers?

estou colocando aqui um exemplo em ASM que fiz em 2007.
Espero que ajude.

;******************************************************
;*******  PROGRAMA DE CONTROLE DE ILUMINAÇÃO   ********  
;*******     PARA PISCINAS - RGB-W_CONTROL      *******
;*******  Francisco B O L       -   29/01/2007  *******
;******************************************************
;
L_D         equ p3.2                           ;liga/desliga
AUT_MAN     equ p3.3                           ;auto/manual ou tempo/cor
PISCA       equ p3.4
 
org 0
reset:  ljmp      inicio
org 0bh   
ljmp timer0
org 30h
;
inicio:     mov   sp,#68h
            mov   tmod,#11h
            MOV   IE,#0
            clr   rs0  ;banco 0
            clr   rs1

;valores de inicialização 
            MOV   P1,#0FH
            MOV   08H,#0FFH         ;PISCA COMEÇA LIGADO
            mov   09h,#0            ;conta até 100mS
            mov   0ah,#0            ;inc a cada 100mS
            mov   0bh,#0            ;inc a cada segundo
            mov   0fh,#0            ;inc a cada 1mS para contagens diversas
            mov   30h,#0            ;1 seg obtido através da tabela em 770h
            mov   31h,#0ffh         ;sem piscar
            mov   32h,#0ffh         ;automatico
            mov   r1,#50h           ;primeira sequencia

;armazena sequencia na RAM
            mov   dptr,#500h       ;endereço tabela sequencia fabrica
            mov   r0,#50h           ;armazena tabela na RAM
jump0:      clr   a
            movc  a,@a+dptr
            cjne  a,#0FFh,jump1
            mov   @r0,a             ;indicador de fim  
            sjmp  jump2
jump1:      mov   @r0,a
            inc   dptr
            inc   r0
            sjmp  jump0
jump2:      lcall tempos            ;lê o tempo e retorna em r4
            ljmp  DESLIG
LIGADO:     mov   th0,#0FEh         ;reseta contador 1mS
            mov   tl0,#0Ch
            clr    tf0 
            setb   tr0
            setb  ea      
            setb  et0
loopCOM:    JB     L_D,S01          ;ver se Desliga
            lcall  D200MS           ;ver se pulso maior que 200ms
            jb    L_D,S01
            ljmp  DESLIG
S01:        jb    PISCA,S02         ;ver se pisca
            lcall D200MS
            jb    PISCA,S02
            lcall D200MS
            LCALL D200MS
            LCALL D200MS
            mov   a,31h
            cpl   a
            mov   31h,a
S02:        jb    AUT_MAN,loopCOM         ;verifica automatico/manual ou tempo/cor


TEMPCOR:    MOV    A,32H  ;INCREMENTA TEMPO OU MUDA COR
            CJNE   A,#0,MUTEM 
            INC    R1                     ;muda cor
            MOV    A,@R1
            CJNE   A,#0FFH,DTEM
            MOV    R1,#50H
DTEM:       LCALL D200MS
            LCALL D200MS
            LCALL D200MS
            LCALL D200MS
            ljmp   loopCOM

MUTEM:      INC    30H                    ;muda tempo
            mov   r1,#50h                 ;reinicia sequencia
            MOV   A,30H
            ANL   A,#07
            MOV   30H,A
            lcall tempos
            mov   0bh,#0                  ;zera contagem
            CLR   TR0
            MOV   A,30H
            INC   A
            MOV   R2,A
INDAU:      MOV   P1,#0FH           ;indica tempo auto em piscadas
LOOPIN:     LCALL DEL_300
            MOV   P1,#0FFH
            LCALL DEL_200
            MOV   P1,#0FH
            DJNZ  R2,INDAU
            LCALL DEL_500
            SETB  TR0
            LJMP  loopCOM


DESLIG:
            MOV   IE,0
            clr   tr0
            clr   tf0
            MOV   P1,#0FH
            lcall DEL_500
            lcall DEL_500
            lcall DEL_500
            
loodes:     MOV   P1,#0FH
            jb    L_D,loodes_1
            mov   32h,#0ffh           ;se ligado através do botão esquerdo, automático
            mov   p1,#1fh
            lcall del_500
            mov   p1,#2fh
            lcall del_500
            mov   p1,#4fh
            lcall del_500
            mov   p1,#8fh
            lcall del_500
            mov   p1,#0fh
            lcall del_500
            mov   r1,#50h     ;primeira cor
            ljmp  LIGADO
loodes_1:   MOV   P1,#15d
            jb    AUT_MAN,loodes
            mov   p1,#0ffh
            lcall del_500
            lcall del_500
            lcall del_500
            mov   32h,#00           ;se ligado através do botão meio, parado
            ljmp  ligado

tempos:     mov  dptr,#530h           ;tabela de tempos
            mov   a,30h
            anl   a,#07
            movc  a,@a+dptr
            mov   r4,a                  
            ret
del_300:    mov       1DH,#6d             ;6 x 50mS                     
DEL3:       mov       th1,#9Eh           ;contador 50mS = 65536-25000=40536d=9E58h
            mov       tl1,#58h
            setb      tr1
            jnb       tf1,$
            clr       tr1
            clr       tf1
            djnz      1DH,DEL3
            ret


del_500:    mov       1DH,#10d             ;10 x 50mS                     
DEL:        mov       th1,#9Eh           ;contador 50mS = 65536-25000=40536d=9E58h
            mov       tl1,#58h
            setb      tr1
            jnb       tf1,$
            clr       tr1
            clr       tf1
            djnz      1DH,DEL
            ret

DEL_200:    mov       1DH,#4d      ;delay 200ms com int desligada                 
DEL2:       mov       th1,#9Eh           ;contador 50mS
            mov       tl1,#58h
            setb      tr1
            jnb       tf1,$
            clr       tr1
            clr       tf1
            djnz      1DH,DEL2
            ret


D200MS:     mov  0fh,#0             ;delay 200ms com interrupção ligada
            mov  a,#200d
            cjne a,0fh,$
            ret

org       300h
timer0: mov   th0,#0Feh     ;reseta contador 1mS = 500x2uS --> 65536-500=65036=FE0Ch
        mov   tl0,#0ch
        clr    tf0 
        setb   tr0
        push   psw
        push   a
        push   dph
        push   dpl
        inc    0fh                  ;atrasos diversos incrementado a cada 1ms
        inc    09
        mov    a,09
        cjne   a,#100d,retin
        mov    09,#0
        mov    a,08
        cpl    a
        mov    08,a
        mov    a,32h               ;ver se parado
        cjne   a,#0ffh,retin  
        inc    0ah                  ;inc a  cada 100mS
        mov    a,0ah  
        cjne   a,#10d,retin
        mov    0ah,#0
        inc    0Bh
        mov    a,r4 
        cjne   a,0bh,retin       ;0b=r3 no banco 1   
        mov    0BH,#0 
        inc    r1                 ;muda sequencia
        mov    a,@r1
        cjne   a,#0ffh,retin
        mov    r1,#50h
retin:  mov    a,31h
        orl    a,08                ;08=pisca
        JNZ    MOVR1
        MOV    P1,#0FH
        SJMP   RETIN1
MOVR1:  MOV    A,@R1
        ORL    A,#0FH
        mov    p1,a    
RETIN1: pop dpl
        pop dph
        pop   a
        pop   psw      ;restaura banco e status
        reti
                                    
org 500h
db 01000000b      
db 01100000b
db 00100000b 
db 00110000b
db 00010000b
db 01010000b
db 01110000b
db 10000000b
db 11000000b      
db 11100000b
db 10100000b 
db 10110000b
db 10010000b
db 11010000b
db 11110000b
db 11100000b
db 11000000b
db 0ffh ;fim
org 530h
db 1,5,10d,30d,60d,120d,180d,240d  ;tempos

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!