jueves, 31 de marzo de 2016

Ejercicio Nº1


;    Ejercicio 01:
;   Contador Binario: Por el puerto B mostrar los códigos del 0 al 255 en binario.
;   Los leds encendidos deberán de apagarse durante 200 ms antes de mostrar el siguiente
;   incremento.

;  Solución:  (Se utiliza un microcontrolador pic16f877a, pero puede utilizar cualquier otro)


; Bits de configuración para el pic16f877a:

    __config _CP_OFF & _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF 
    ; _HS_OSC : si OSC >= 4MHZ  
    ; _XT_OSC : si OSC <= 4MHZ


; OBSERVACIÓN: Si utliza otro microcontrolador, los bits de configuración podrian variar. 
; Revisar datasheet. Por ejemplo para un pic16f84a, puede utilizar:
;  __config _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_OFF
;  OJO: _XT_OSC si utiliza un cristal de 4MHZ o menor. Si utiliza uno de mayor valor asegúrese 
; que el microcontrolador lo soporte. En ese caso utilizar _HS_OSC.

; Para este programa,en la subrutina de retardo se consideró OSC=20MHZ    

    list    p=16f877a  ; Cambie aquí si utiliza otro uC
    include    <p16f877a.inc> ; Cambie aquí si utiliza otro uC
 
    cblock    0x20 ; A partir de esta dirección es la memoria RAM del usuario (Banco-0)
    VDelay0         ; Si utiliza otro uC revise datasheet y verique a partir de que dirección es
    VDelay1         ; la memoria RAM del usuario. Por ejemplo para un pic16f84a, ésta comienza
    endc               ; en la dirección 0x0C.

    ORG        0x00
    bcf        STATUS,RP1
    bsf        STATUS,RP0    ; Acceso banco 1
    clrf        TRISB        ; Todo puerto B config como salidas
    bcf        STATUS,RP0    ; Acceso banco 0
    Inicio:   
    clrf        PORTB
    Principal:
    call       delay_200ms
    incf       PORTB,f        ; OBS: Si PORTB=255 --> PORTB+1 = 0
    goto      Principal

; Subrutina de retardo:   
    delay_200ms:
    movlw    .156     
    movwf    VDelay0  
    movlw     .213     
    movwf    VDelay1    
    nop            
    goto       $+1        
    decfsz    VDelay1,f
    goto       $-3  
    decfsz    VDelay0,f
    goto       $-
    goto       $+1    
    nop             
    return             
   
    END

CIRCUITO EN PROTEUS:

Si desea armar el circuito en una protoboard, conectar un diodo led a cada uno de los pines RB<0:7> con su respectiva resistencia serie a tierra (330ohm)

(Hacer click en la imagen para agrandar)

 

No hay comentarios:

Publicar un comentario

Deja tus dudas, comentarios aquí.