uControl
Septiembre 02, 2014, 06:16:28 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: ayuda con un semaforo pic16f628a  (Leído 4196 veces)
0 Usuarios y 2 Visitantes están viendo este tema.
JORGE271
PIC10F
*
Desconectado Desconectado

Mensajes: 2


« : Enero 22, 2012, 04:07:58 »

Hola que tal a todos, he soy nuevo por aqui y tambien en la programacion en electronica, se algo pero me falta mucho y me gustaria conocer un poco mas de esto, no se si me podrian hechar una mano porfavor, miren la cuestion es la siguiente, me he aventurado a ciegas sobre un semaforo por curiosear rolleyes2, encontre este codigo en ensamblador para un pic 16f628a, he utilizado el MPLAB y si corre, he utilizado tambien proteus 7.6 y no entiendo por que solo prenden dos led el tercero no Huh?, SE QUE DEBEN ESTAR CONECTADAS UNAS RESISTENCIAS, PERO COMO ES PURA SIMULACION, LO HE DIBUJADO SIN ELLAS, les adjunto una imagen del intento de semaforo.
y de antemano les agradesco por sus respuestas!

Código:
;-----------------------------------------------
;(NO A LA SOPA)
;Fecha:20/01/2012
;PICF16F628A
;Velocidad del Reloj; 4MHz
;nombre: Semaforo
;-----------------------------------------------
 List p = PIC16F628A;
;-----------------------------------------------
;------------------------------------------------
;Registros
;-----------------------------------------------
w         equ 00h
status                 equ 0x03
portb                 equ 0x06
cmcon               equ 0x1f
_np_tiempo       equ 0x20
_np_tiempo1     equ 0x21
_np_tiempo2     equ 0x22
_np_tiempo3     equ 0x23
trisb                  equ 0x86
;-----------------------------------------------
;Declaración De Bits
;-----------------------------------------------
rp0                   equ 5 ; registrer banck select bit
rp1                   equ 6 ; registrer banck select bit
;-----------------------------------------------
;inicio
;------------------------------------------------
reset                  org 0
                           goto paso2
;-------------------------------------------------
;Comienzo del programa principal
;-------------------------------------------------
paso2
movlw b'00000000'    ;  configura el puerto b como ssssssss
    bsf status,rp0              ;  cambia al banco 1
    bcf status,rp1
  movwf trisb
bcf status,rp0              ; cambiar al banco 0
  bcf status,rp1
movlw 0x07                ; pasa a utilizar el puerto A
  ; como entradas o salidas discretas
movwf cmcon
movlw b'00000001'    ; configura el puerto b como sssssssse
bcf status,rp0 ;cambia al banco 0
bcf status,rp1 ;cambia al bnaco 0
movwf portb
paso4
;temporizador 45 seg
bcf status,rp0 ;cambia al banco 0
bcf status,rp1 ;cambia al banco 0
movlw .45
call tiempo_1_255_seg ; fin del temporizador de 45 segundos
; escribir en el puerto b
movlw b'00000010'
movwf portb
    movlw .5
call tiempo_1_100_ms_1  ; fin del temporizador de 5 seg
 ;escribir en el puerto b
movlw b'00000100'
movlw portb  ;temporizador 45 seg
movlw .45
call tiempo_1_255_seg   ; fin del temporizador de 45 seg
goto paso4    ; cierra ciclo
;-------------------------------------------------
;subrutinas
;-------------------------------------------------
tiempo_1_255_seg
movwf _np_tiempo
goto tiempo_1_255_seg_1
tiempo_1_255_seg_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_1_255_seg_1
movlw .01
movwf _np_tiempo1
tiempo_1_255_seg_bucle1
nop
nop
nop
movlw .99
movwf _np_tiempo3
tiempo_1_255_seg_bucle0
nop
nop
nop
movlw .200
movwf _np_tiempo3
tiempo_1_255_seg_bucle
nop
nop
decfsz _np_tiempo3,1
goto tiempo_1_255_seg_bucle
nop
nop
nop
decfsz _np_tiempo2,1
goto tiempo_1_255_seg_bucle0
nop
nop
nop
decfsz _np_tiempo1,1
goto tiempo_1_255_seg_bucle1
decfsz _np_tiempo,1
goto tiempo_1_255_seg_bucle2
return

tiempo_1_100_ms_1
movwf _np_tiempo
goto tiempo_1_100_ms_1
tiempo_1_100_ms_bucle1
nop
nop
nop
nop
nop
nop
nop
tiempo_1_100ms_1
movlw .246
movwf _np_tiempo1
tiempo_1_100_ms_bucle2
nop
    decfsz _np_tiempo1,1
goto tiempo_1_100_ms_bucle2
nop
nop
nop
nop
nop
decfsz _np_tiempo,1
goto tiempo_1_100_ms_bucle1
return
End




Editado para incrustar el código y la inmagen.
HJ

* AYUDA SEMAFORO.png (150.98 KB - descargado 3162 veces.)
« Última modificación: Enero 22, 2012, 02:52:33 por HJ » En línea
VelazquezBio
"...La Felicidad solo es completa, cuando es compartida..."
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1459


Alea Iacta Est...


« Respuesta #1 : Enero 22, 2012, 06:18:13 »

Hola Jorge271, Bienvenido al Foro de ucontrol!

Cuando insertas codigo por favor utiliza el boton adecuado. Gracias

ASM no se.

Falta el Reset en el pin MCLR.



Luego, hay que ver el codigo.

Saludos!
En línea

No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.
Siberian Labs
Visitante
« Respuesta #2 : Enero 22, 2012, 10:37:15 »

Idem, ASM ni ahí pero te sugiero que le pongas las R a los leds ( total no necesitas comprarlas ) calculo que con una R de 330 ohms no se van a quemar los LEDS  Grin

Saludos!!
En línea
juan50
PIC10F
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #3 : Enero 22, 2012, 01:17:24 »

Un saludo
por lo poco que leido el codigo he visto que los leds los activas atraves de RB0-RB1-RB2

RB0 solo se activa al inicio del programa, pues cuando acaba la rutina de encender los led´s llamas a la etiqueta paso4

en ella no se encuentra la activacion de RB0 y por ello solo se encienden dos led´s

  movlw b'00000001'    ; configura el puerto b como sssssssse
   bcf status,rp0   ;cambia al banco 0
   bcf status,rp1    ;cambia al bnaco 0
   movwf portb      ;activa RB0
paso4
         ;temporizador 45 seg
   bcf status,rp0   ;cambia al banco 0
   bcf status,rp1    ;cambia al banco 0
   movlw .45   
   call tiempo_1_255_seg ; fin del temporizador de 45 segundos
         ; escribir en el puerto b
   movlw b'00000010'
   movwf portb                ;activa RB1
    movlw .5
   call tiempo_1_100_ms_1  ; fin del temporizador de 5 seg
           ;escribir en el puerto b
   movlw b'00000100'
   movlw portb     ;temporizador 45 seg activa RB2
   movlw .45
   call tiempo_1_255_seg      ; fin del temporizador de 45 seg
   goto paso4        ; cierra ciclo


Espero sea de ayuda

P.D.     Te aconsejo que siempre tengas encuenta en que banco esta trabajando el programa, pues si hay que leerlo
es un poco engorroso y tienes mas lineas escritas, que podrias ahorrar

En línea
juan50
PIC10F
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #4 : Enero 23, 2012, 03:58:48 »

Simulando el programa con MPLAB, cuando esta efectuando el tiempo con el segundo led (RB1)
se queda colgado en este goto

tiempo_1_100_ms_1
   movwf _np_tiempo
   goto tiempo_1_100_ms_1

si que el registro se queda cargado con el valor asignado, pero al estar la instruccion goto se queda en un bucle infinito

Revisa el codigo pues RB1 siempre esta encendido
En línea
remramon2007
Amigo de uControl
PIC18F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1044



« Respuesta #5 : Enero 23, 2012, 08:03:16 »

Hola ... te doy un consejo para todo programa que realices... de entrada arma el diagrama de flujo de como trabajaría el programa... no se si sabes hacer uno, pero por internet tenes mucha info o si necesitas algo con gusto te ayudare dentro de lo que este a mi alcance.

Con respecto a la lógica del programa...

todos los led's apagados
  demora 10 segundo

Inicio

apago el led verde
enciendo el led rojo
demora 10 segundos

apago el led rojo
enciendo el led amarillo
demora 10 segundos

apago el led amarillo
enciendo el led verde
demora 10 segundos

apago el led verde
enciendo el led amarillo
demora 10 segundos

ir a Inicio

para el ej. de la secuencia del programa puse 10 segundos... ese tiempo se cambia obvio...

y como decís juan50 se queda encerrado en ese goto... muchas veces es preferible armar un código de cero y no utilizar una de otra persona... para mi al menos... te rompes menos la cabeza... y más en ASM...
descarga las revistas de uControl que son gratuitas y vas a perder menos tiempo que modificando este código... aparte lo que quieres realizar es sencillo y.. si o si tiene que ser en ASM?
En línea
JORGE271
PIC10F
*
Desconectado Desconectado

Mensajes: 2


« Respuesta #6 : Enero 24, 2012, 01:01:45 »

hola, gracais pòr su ayuda la verdad, si me ha sido de gran ayuda  laugh, pues me estuve rompiendo la cabeza cabezaso a la pared, aparte de tener por ahi una falta de sitaxis al principio del programa, obte por leer mas y a sus consejos principalmente, ya logre salir de la telaraña que no entablaba comprender, en ensamblador si no se mucho, apenas mastico el C y un poco el VHDL, llevo muy poco tiempo en esto, por cierto la practica era mas para conocer el lenguaje y de verdad tienen razon es mejor crear sus propios programas, que entrar al mundo de otro y copiar solamente, les agradesco mucho y espero no darles tanta lata  proximamente Grin,
En línea
juan50
PIC10F
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #7 : Enero 24, 2012, 07:01:30 »

Espero no entrar en una filosofia si es mejor hacer uno el programa o ir copiando de los demas
Cuando cojo el programa realizado por otra persona, siempre le pongo el comentario, a cada linea, para asi saber
que es lo que se hace con ella
JORGE271 te animo a que sigas con este programa y lo hagas funcionar como tu deseas, acabando con la publicacion del codigo ya definitivamente funcionando
Si te quedas travado en algun recodo estamos para poder ayudarte y tambien nos ayudaras a nosotros, pues si otra persona tiene
la intencion de aprender, vera en donde tropezamos Cry

Un saludo
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.047 segundos con 29 consultas. (Pretty URLs adds 0.01s, 3q)
loggkey