Creas solamente el retardo t,
Lo demas es entrar 1,2,3,4,5,4,3,2 veces al retardo..
Lo podes hacer cargando esos numeros en una tabla.. e implementar un contador.. que vaya de 0 a 7, si detectas el bit4 (8 en binario) reseteas el contador y comenzas del 0 nuevamente.
Otra es hacer una tabla que tenga solo los valores 1,2,3,4,5 y luego tener 2 variables, un contador y un indicado que te de el sentido que se desplaza. Mas complicado y no tiene sentido ya que el otro es mucho mas simple de implementar.
Tabla
Valores tabla
Inicio
Configuro todo
Contador = 0
Puerto en 1
Loop Principal
Leo boton, no: vuelvo al loop principal
Si:
LLamo delay tantas veces lo diga mi tabla
Roto el puerto
Reviso carry por si el bit 7 del port se fue al carry, y activo el bit 0 en ese caso
incremento mi contador
bit 4 contador = 1?
Si: Contador = 0
Vuelvo al loop principal.
Disculpa KILLERJC por la demora de contestar, he tenido algunos exámenes el día de ayer y hoy.
Agradezco la respuesta, solo que tengo un problema de como insertar la tabla en el contador ó en el llamado del retardo.
El programa lo modifique tantito y agregué la tabla en el programa, si me pudieras explicar la manera correcta de como hacerlo te lo agradecería, disculpa la molestia
; Elaborar un programa que genere un corrimiento hacia la derecha de un bit
; entre cambio de bit y bit debe haber un retardo de tiempo t
; cada que se presione un push button conectado al microcontrolador, el
; tiempo de retardo se va a incrementar por un tiempo t: se presiona una
; vez, el retardo seria 2t, se presiona otra vez, el retardo seria 3t, y
; así hasta tener un retardo de 5t. si se vuelve a presionar el push button
; el retardo se va decrementando por un tiempo t: 4t,3t,2t hasta tener solo t.
; una vez el tiempo de retardo llega a t, entonces se vuelve nuevamente a
; incrementar con cada presion del push button.
;*******************************************************************************
LIST P = 18f45K50 ;Microcontrolador a utilizar
#include<p18f45K50.inc>
;****************Sección de bits de configuración inicial***********************
CONFIG WDTEN=OFF ;Deshabilita el Watchdog
CONFIG MCLRE=ON ;Habilita MCLEAR
CONFIG DEBUG=OFF ;Deshabilita Debug mode
CONFIG LVP=OFF ;Deshabilita programacion bajo voltaje
CONFIG FOSC=INTOSCIO ;Habilita oscilador interno
;****************Declaración de variables en la memoria de datos****************
AUX1 EQU 0x00
AUX2 EQU 0x01
Delay1 EQU 0x02
Delay2 EQU 0x03
CONTADOR EQU 0x04
Cont1 EQU 0x05
Cont2 EQU 0x06
#DEFINE PULSADOR PORTB,RB7
ORG 0
;*******************************************************************************
Start:
MOVLB 0x0F ;carga valorr a BSR
CLRF ANSELA,1 ;Entradas puertos A y B como digitales
CLRF ANSELB,1
CLRF TRISA ;PORTA como salidas
SETF TRISB ;PORTB como entradas
MOVLW b'01010011'
MOVWF OSCCON ;Frecuencia a 4MHz
CLRF CONTADOR
;***************************programa principal**********************************
MainLoop:
BCF PORTA,0 ;Limpia pin RA0=0
BTFSS PULSADOR ;Prueba si fue presionado
GOTO MainLoop ;regresa a MainLoop
BTFSS PULSADOR ;verifica si se dejo de presionar
CALL ROTACION ;Llamada a subtutina ROTACION
;***************************subrutina de Rotacion*******************************
ROTACION:
MOVLW 0x01
MOVWF PORTA ;Enciende PIN RA0
ciclo
RRNCF PORTA ;Rotacin de bits a la derecha
CALL Delay ;retardo
BTFSS PORTA,0 ;verifica si pin RA0 esta encendido, salta si es asi
GOTO ciclo ;Bucle
RETURN ;Regresa programa principal
;*****************************Subrutina de Retardo*****************************
Delay:
DECFSZ Delay1,1 ; Decrementa Aux1 en 1, salta siguiente instrucción
; si Aux1 es 0 (256 - 0 )
GOTO Delay
DECFSZ Delay2,1
GOTO Delay
RETURN ; Regresa al programa principal
;*******************************************************************************
TABLA:
RETLW b'0000'
RETLW b'0001'
RETLW b'0010'
RETLW b'0011'
RETLW b'0100'
RETLW b'0101'
RETLW b'0111'
RETLW b'1000'
;*******************************************************************************
END ;Fin de programa