Esercizi di programmazione assembler con scheda 8051

 

  1. Esercitazione sui registri: Esempio di riempimento di blocco di memoria

        org 8200h
    ;Azzeramento di un blocco di memoria
        mov r1,#30
        mov r0,#2
    ciclo1:
        mov @r0,#0
        inc r0
        djnz r1,ciclo1
        end


  2. Esercitazione sui banchi di registri
       
    org 8200h
    ;Uso dei registri R e relativi banchi
    ;-----Banco 0
        clr rs0
        clr rs1
        mov r0,#1
        mov r1,#2
        mov r2,#3
        mov r3,#4
        mov r4,#5
        mov r5,#6
        mov r6,#7
        mov r7,#8
    ;-----Banco 1
        setb rs0
        clr rs1
        mov r0,#1
        mov r1,#2
        mov r2,#3
        mov r3,#4
        mov r4,#5
        mov r5,#6
        mov r6,#7
        mov r7,#8   
    ;-----Banco 2
        clr rs0
        setb rs1
        mov r0,#1
        mov r1,#2
        mov r2,#3
        mov r3,#4
        mov r4,#5
        mov r5,#6
        mov r6,#7
        mov r7,#8
    ;-----Banco 3
        setb rs0
        setb rs1
        mov r0,#1
        mov r1,#2
        mov r2,#3
        mov r3,#4
        mov r4,#5
        mov r5,#6
        mov r6,#7
        mov r7,#8
        end


  3. Un semplice semaforo con tre LED


        org 8200h
    ;----Semaforo-------------------------------------------------
    Rosso  = p1.0
    Giallo = p1.1
    Verde  = p1.2

        setb Rosso
        setb Verde
        setb Giallo
    ciclosem:
        clr Rosso ;Accende rosso
        mov r4,#10 ;aspetta 10 secondi
        call ritsecs

        setb Rosso ;Spegne rosso
        clr Verde ;Accende verde
        mov r4,#7
        call ritsecs

        clr Giallo ;Accende giallo
        mov r4,#3
        call ritsecs

        setb Verde ;Spegne verde
        setb Giallo ;Spegne giallo
        jmp ciclosem
    ;-----------------------------------------------------------------
    ritsecs:
    lrs2:
        mov r5,#0
        mov r6,#0
        mov r7,#4
    lrs1:
        djnz r5,lrs1
        djnz r6,lrs1
        djnz r7,lrs1
        djnz r4,lrs2
        ret
        end
     


  4.                                 
    Con l'hardware dato nello schema in figura realizzare un programma in assembler 8051 in grado di commutare lo stato del Led (Acceso/Spento) ad ogni pressione del pulsante prevenendo il problema dei 'rimbalzi'
    .

    ;Esercizio Nro 1
    ;Accensione spegnimento LED da pulsante
    Led	= p1.0
    Puls	= p1.1
    
    	org 8200h
    	setb Led
    	setb Puls	
    noprem:
    	jb Puls,noprem
    	cpl Led
    	call antirimb
    prem:
    	jnb Puls,prem
    	call antirimb
    	jmp noprem
    
    antirimb:
    	mov r0,#02
    lrit	djnz r0,lrit
    	ret
    	end

  5. Modificare funzionalitą descritto nell' esercizio 4 aggiungendo l'automatismo che se il Led rimane acceso si spenga automaticamente dopo 5 secondi.
    ;Esercizio Nro 2
    ;Accensione spegnimento LED da pulsante e spegnimento automatico dopo 5 secondi
    Led	= p1.0
    Puls	= p1.1
    Cont	= 0
    
    	org 8200h
    	setb Led
    	setb Puls
    
    noprem:
    	call spegled
    	jb Puls,noprem
    	cpl Led
    	jb Led,spento
    	mov Cont,#5
    spento:
    	call antirimb
    prem:
    	jnb Puls,prem
    	call antirimb
    	jmp noprem
    
    antirimb:
    	mov r0,#02
    lrit	djnz r0,lrit
    	ret
    
    ;----------------------------------------------------------------------------
    spegled:
    	jb Led,USpeLed
    	mov a,r0
    	jnz dcsec
    	setb Led
    	ret
    dcsec:
    	dec r0
    	call ritsec
    USpeLed:
    	ret
    ;----------------------------------------------------------------------------
    ritsec:
    	mov r5,#0
    	mov r6,#0	
    	mov r7,#4
    lrs1:
    	jnb Puls,Ers 
    	djnz r5,lrs1
    	djnz r6,lrs1
    	djnz r7,lrs1
    Ers:
    	ret
    	end