Autor Tema: Problema con la instrucción RLF y RRF en PIC 12F683  (Leído 2167 veces)

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

Desconectado nitehack

  • PIC10
  • *
  • Mensajes: 3
Problema con la instrucción RLF y RRF en PIC 12F683
« en: 19 de Julio de 2012, 09:02:26 »
Buenas a todos!
Soy nuevo en esto y he empezado con el PIC12F683 con el leguaje ensamblador. He cogido este porque era el que tenia :P
Bueno el caso es que estaba haciendo un programa con dos leds que haga que se encienda un led y cuando se apague se encienda el  otro y asi sucesivamente.
He utilizado la instruccion RLF para desplazar el bit al otro pin donde tengo conectado el otro led y luego hago un bucle.

El caso es que el pic lo que hace es que pone en el pic 000001 y cuado ejecuta RLF pone todos los pines a 000000 en vez de 000010.
¿Donde esta el problema?
Os dejo el codigo del programa:

Código: [Seleccionar]
list      p=12F683        ; list directive to define processor
#include <p12F683.inc>    ; processor specific variable definitions

errorlevel  -302          ; suppress message 302 from list file

__CONFIG   _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT





;------------mapa de memoria---------

CONTADOR1 equ 0x20
CONTADOR2 equ 0x21
;------------------------------------
;-----------Oscilador interno--------
bsf STATUS,RP0
call 3FFh
movwf OSCCON;
bcf STATUS,RP0
;------------------------------------



;____________PROGRAMA______________________
;Configuracion de puertos
bsf STATUS,RP0 ;Va al Banco 1
clrf TRISIO ; Pone todos como salida
bcf STATUS,RP0 ; Vuelve al Banco 0
;--------------------------------------
Inicio
movlw b'000010'
movwf GPIO ; Enciende el led1
call RETARDO ;
call RETARDO
rlf GPIO,1 ;Apaga el 1º led y enciende el otro: 000100
call RETARDO
call RETARDO

goto Inicio ;Repite el bucle del parpadeo d elos dos led


;___________________________________________




;------------------------------------------
;Retardo subrutina
RETARDO
MOVLW 25h ; Guardamos el numero de retardo en el registro W
MOVWF CONTADOR1; Lo guardamos en los dos contador
MOVWF CONTADOR2;
;Empieza el 1º retardo
Bucle1
DECFSZ CONTADOR1,1 ; Restamos 1 a 255.
goto Bucle1
MOVWF CONTADOR1;
;Comienza el 2º retardo
DECFSZ CONTADOR2,1
goto Bucle1 ; Volvemos al inicio de nuestro bucle
            ; Este retardo cuenta hacia atrás ...
            ; ...desde 255 a 0, 255 veces.
RETURN

;------------------------------------------
org 0x3FF
retlw 0x20

end      ; se acabó


 

anything