Autor Tema: Ayuda con Programa 16f84a 8 juegos de luces y 4 velocidades  (Leído 4056 veces)

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

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Ayuda con Programa 16f84a 8 juegos de luces y 4 velocidades
« en: 23 de Febrero de 2009, 18:46:13 »
Hola,

Estoy haciendo un programa pero nose por donde cogerlo, el programa tiene que seleccionar entre 8 juegos de luces y 4 velocidades.
Actualmente el problema que tengo es que e puesto un contador para que cada 0x10 veces se produzca una rotacion de bits pero no me funciona, nose tambien me gustaria recibir alguna orientacion porque seguro que no estoy llendo por un buen camino.

Saludos

Código: [Seleccionar]
LIST    P=16F84A

estado EQU 03h
option_reg EQU 81h
intcon EQU 0Bh
porta EQU 05h
portb EQU 06h
tmr0 EQU 01h
modo EQU 0Dh
velocidad EQU 0Eh
pap EQU 0Fh
porta2 EQU 10h
contador EQU 11h
W EQU 00h
F EQU h'FF'
PCL EQU 02h

#DEFINE  Z estado,2

; ZONA DE CÓDIGOS ********************************************************************

ORG 0
goto Inicio
ORG .4
goto tmr0int
ORG .6
Inicio
bsf estado,5
clrf portb
movlw b'00000111'
movwf option_reg
bcf estado,2
bcf estado,5
movlw b'10100000'
movwf intcon
clrf portb
bsf portb,0
clrf tmr0
clrf contador
goto Programa
Guardar
movfw porta
movwf porta2
Leer
movfw porta2
xorwf porta, W
btfsc Z
goto Leer
Programa
movlw b'00000011'
andwf porta, W
addwf PCL,1
goto vel0
goto vel1
goto vel2
goto vel3
vel0
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
vel1
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
vel2
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
vel3
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
mod
movlw b'00011100'
andwf porta, W
movwf modo
rrf modo
rrf modo
goto Guardar


tmr0int
movlw 0x10
xorwf contador, W
btfss Z
goto Incrementar
clrf contador
movfw modo
addwf PCL,1
goto comb0
goto comb1
goto comb2
goto comb3
goto comb4
goto comb5
goto comb6
goto comb7
comb0
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb1
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb2
movfw velocidad
movwf tmr0
rrf portb,1
goto Fin
comb3
movfw velocidad
movwf tmr0
bsf portb,4
goto Fin
comb4
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb5
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb6
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb7
movfw velocidad
movwf tmr0
rlf portb,1
Fin bcf intcon,2
retfie
Incrementar
incf contador, F
goto Fin
;movlw .60
;movwf tmr0
;btfss pap,0
;goto as
;bcf pap,0
;rrf portb,1
;btfsc Salida
;fin
; bcf intcon,2
; retfie
;as
;bsf pap,0
;goto fin
END

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda con Programa 16f84a 8 juegos de luces y 4 velocidades
« Respuesta #1 en: 23 de Febrero de 2009, 19:02:14 »
A ver :

Lo primero que deberías hacer para que alguien te ayudase sería ponerle "textos" a cada línea de programa . Porque para el que hizo el programa sabe de que va, pero el resto no puede adivinar que tenía en mente el que lo creó.
Segundo: ANTES de hacer un programa debes hacerte un diagrama de flujo , para saber que hace el programa y cuales son las decisiones que toma . No sabes cuánto te ayuda esto a despejar todas las dudas.
He comprobado que si empiezo a programar sin hacer un diagrama de flujo me confundo, no se donde estoy, no se que toco, no se para donde ir. Me tiro 15 dias dando vueltas hasta que tengo que hacer el diagrama de flujo.
Si hago el diagrama de flujo me confundo, borro, tacho, me enfado, tardo 1 semana. Cuando está listo sólo es empezar a teclear el código y fluye como el agua. En un día más tengo el programa 95% funcionando con poquísimos errores.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Ayuda con Programa 16f84a 8 juegos de luces y 4 velocidades
« Respuesta #2 en: 23 de Febrero de 2009, 19:41:39 »
Además del exelente concejo que te acaba de dar PIBE, te recomiendo que utilizes la directiva Include P16f84.inc así te ahorras de definir los bit y registros, ahorrandote de un posible error. Solo te quedaría por darles nombres a las pociciones de memoria que vas a utilizar.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Re: Ayuda con Programa 16f84a 8 juegos de luces y 4 velocidades
« Respuesta #3 en: 23 de Febrero de 2009, 20:07:50 »
He comentado el codigo y bueno voy ha hacerme el diagrama de flujo haber si me aclaro, y asi me podeis entender mejor y echarme una mano.

Saludos y gracias por los consejos.

Código: [Seleccionar]
LIST    P=16F84A

estado EQU 03h
option_reg EQU 81h
intcon EQU 0Bh
porta EQU 05h
portb EQU 06h
tmr0 EQU 01h
modo EQU 0Dh
velocidad EQU 0Eh
pap EQU 0Fh
porta2 EQU 10h
contador EQU 11h
W EQU 00h
F EQU h'FF'
PCL EQU 02h

#DEFINE  Z estado,2

; ZONA DE CÓDIGOS ********************************************************************

ORG 0
goto Inicio
ORG .4
goto tmr0int
ORG .6
Inicio
bsf estado,5 ;accedo al banco1
clrf portb ;configuro puerto_b como salida
movlw b'00000111' ;configure el prescaler del timer0 en 256
movwf option_reg
bcf estado,2 ;Limpio el carry
bcf estado,5 ;Vuelvo al banco0
movlw b'10100000' ;Activo las interrupciones globales y el timer0
movwf intcon
clrf portb ;Limpio el puerto
clrf tmr0 ;Limpio el timer0
clrf contador ;Limpio la variable que me valdra para contar 10 timers
goto Programa ;Me salto el guardar y leer utilizado para solo cambiar la velocidad del timer0,
Guardar ; cuando el porta cambia de estado
movfw porta ;cargo porta en W
movwf porta2 ;guardo porta en porta2
Leer
movfw porta2 ;Cargo porta2 en W
xorwf porta, W ;Compruebo si ha habido algun cambio en porta
btfsc Z ;Si no a habido cambio voy a Leer para repetirlo si ha habido cambio continuo
goto Leer
Programa
movlw b'00000011' ;Cargo este valor para descartar los otros bits
andwf porta, W ;Aplico una and para descartar los bits
addwf PCL,1 ;Me muevo x veces segun el valor de Ra0 y Ra1
goto vel0
goto vel1
goto vel2
goto vel3
vel0
clrf portb ;Limpiar puerto b
bsf portb,0 ;Poner puerto_b a 0
movlw .0 ;Cargo 0 en W y lo guardo en velocidad para luego cargarlo en tmr0
movwf velocidad
goto mod ;Voy a mod
vel1
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
vel2
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
vel3
clrf portb
bsf portb,0
movlw .0
movwf velocidad
goto mod
mod
movlw b'00011100' ;Cargo este valor para descartar el resto de bits
andwf porta, W ;Aplico una and a porta para descartar el resto de bits me que don RA2,RA3,RA4
movwf modo ;Los cargo en modo que servira para elegir el juego de luces
rrf modo
rrf modo ;Corro dos veces los bits para la seleccion en una tabla
goto Guardar


tmr0int
movlw 0x10 ;Cargo las veces que quiero repetir el timer0 antes de que ocurra algo
xorwf contador, W ;Comparo si se a alcanzado el nivel
btfss Z ;Se alcanzado valdra 1 si no valdra 0
goto Incrementar ;Si no se a alcanzado va a incrementar
clrf contador ;Si se a alcanzado limpio el contador
movfw modo ;Tabla de seleccion del modo
addwf PCL,1
goto comb0
goto comb1
goto comb2
goto comb3
goto comb4
goto comb5
goto comb6
goto comb7
comb0
movfw velocidad ;Muevo la velocidad al timer0
movwf tmr0
rlf portb,1 ;ESto seria un juego de luces
goto Fin
comb1
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb2
movfw velocidad
movwf tmr0
rrf portb,1
goto Fin
comb3
movfw velocidad
movwf tmr0
bsf portb,4
goto Fin
comb4
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb5
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb6
movfw velocidad
movwf tmr0
rlf portb,1
goto Fin
comb7
movfw velocidad
movwf tmr0
rlf portb,1
Fin bcf intcon,2 ;Restablecer interrupcion
retfie
Incrementar
incf contador, F ;Incremento el contador
goto Fin ;Voy a fin para acabar la interrupcion
END


 

anything