TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: nitehack 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:
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ó