Autor Tema: leds  (Leído 2271 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sandra_rcb2000

  • PIC12
  • **
  • Mensajes: 92
leds
« en: 02 de Agosto de 2004, 13:44:00 »
;***************************************************************************
;*Programa: Counter.asm      Revision: 2.0      Junio 5 del 2000   *
;*Descripcion: Manda datos al puerto b como un contador binario, despues   *
;*inicia otra secuencia de luces                  *
;***************************************************************************
;********************************IGUALDADES*********************************
      LIST   P=16F84      ;Pic a usar
STATUS      EQU   3      ;Direccion del registro de estado
PORTB      EQU   6      ;Dir.del puerto B
TRISB      EQU   6      ;Registro de configuracion E/S
CONTADOR1   EQU   0Ch      ;Direccion del contador1 p/retardo
CONTADOR2   EQU   0Dh      ;Direccion del contador2 p/retardo
DATO      EQU   0Eh      ;Datos a mandar por PORTB
CICLO1      EQU   0Fh      ;Indica el fin de luces1
CICLO2      EQU   10h      ;Indica el fin de luces2
w      EQU   0      ;Destino w
f      EQU   1      ;Destino el propio registro
;*************************PROGRAMA PRINCIPAL********************************
      ORG   00h      ;Inicio del ensamblado desde addr 00
      GOTO   INICIO      ;Salto a la primera instruccion
      ORG   05h      ;Ensamblar desde la localidad 05h
INICIO      BSF   STATUS,5   ;Selecciona la pagina 1 de datos
      CLRF   TRISB      ;Programa portb como salida
      BCF   STATUS,5   ;Selecciona la pagina cero de datos
      ;Inicio de luces1
INICIO2      MOVLW   01      ;Veces que se repite luces1
      MOVWF   CICLO1      ;carga las veces a ciclo1
      CLRF   DATO      ;El registro dato se pone en ceros
OTRO      MOVF   DATO,w      ;Carga dato en w
      MOVWF   PORTB      ;Manda el contenido de w a PORTB
      MOVLW   0B0h      ;Carga w con B0 para el retardo
      CALL   RETARDO      ;Llama a un retardo
      INCFSZ   DATO,f      ;Incrementa en uno a dato
      GOTO   OTRO      ;Incrementa al puerto en uno
      DECFSZ   CICLO1,f   ;Recorrio todo el sentido?
      GOTO   OTRO      ;No, continua
      ;Si, inicio de luces2
      MOVLW   05h      ;Veces que se repite luces2
      MOVWF   CICLO2      ;Carga las veces a ciclo2
INI      MOVLW   80h      ;Pone en uno el bit7 de w
      MOVWF   PORTB      ;Manda el dato al puerto
      BCF   STATUS,0   ;Borra posible carry
      MOVLW   0E0h      ;Carga w con E0
      ;Inicio de luces2 en sentido derecha
MAS      CALL   RETARDO      ;Llama al retardo
      RRF   PORTB,f      ;Recorre el bit a la derecha
      BTFSS   STATUS,0   ;Verifica el acarreo
      GOTO   MAS      ;Recorre de nuevo el bit a la der
      MOVLW   01h      ;Pone a uno el bit 0 de w
      MOVWF   PORTB      ;Lo pasa al puerto b
      MOVLW   0E0h      ;Carga w con E0
      ;Inicio de luces2 en sentido izquierda
      BCF   STATUS,0   ;Borra posible carry
MAS1      CALL   RETARDO      ;Llama al retardo
      RLF   PORTB,f      ;Recorre el bit a la izquierda
      BTFSS   STATUS,0   ;Verifica el acarreo
      GOTO    MAS1      ;Recorre de nuevo el bit a la izq
      DECFSZ   CICLO2,f   ;Termino recorrido?
      GOTO    INI      ;No, sigue el recorrido
      GOTO   INICIO2      ;Si, repite todo
;*******************************RETARDO*************************************
RETARDO      MOVWF   CONTADOR1   ;Se cargan los contadores con el
LOOP2      MOVWF   CONTADOR2   ;valor inicial de w
LOOP1      DECFSZ   CONTADOR2,f   ;Termino de decrementar?
      GOTO   LOOP1      ;No, sigue decrementando
      DECFSZ   CONTADOR1,f   ;Termino de decrementar?
      GOTO   LOOP2      ;Regresa a decrementar contador2
      RETURN         ;Regresa al programa principal
;***************************************************************************
      END         ;Fin del programa
;***************************************************************************



 

anything