(Semaforo)no me funciona mi programa

Hola usuarios de forosdeelectronica
Tengo problemas con el siguiente programa, es un semaforo, el mplab me lo compila bien, pero cuando lo simulo en proteus no me hace nada. No se que problema sera, ayuda por favor



Código:
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;::                                                               ::
;::                  ..::PROGRAMA SEMAFORO::..       ::
;::                                                               ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

            List p=16f876
            include<p16f876.INC>
            radix hex
            
    

reg1        equ    20h
reg2        equ 21h
reg3        equ 22h
status      equ    03h
porta       equ    05h
trisa         equ    85h
portb       equ 06h
trisb         equ    86h
            
            org    0
            goto inicio
            org 5
        
        



;================Configuracion de puertos==============



            
            bcf        status,6    ;O en rp1
            bsf        status,5    ;1 en rp0
            movlw    00000011b     ;Palabra de configuracion
            movwf    trisa
            movlw    00000000b
            movwf    trisb
            bcf        status,5

inicio     btfsc      porta,0        ;Testeo del bit 0 de porta
            goto      inicio
            goto      prende    
prende   bsf        portb,0        ;Prende bit de porta
            bcf        portb,1
            bcf        portb,2
            call       delay_1
            bcf        portb,0
            bsf        portb,1        
            bcf        portb,2
            call       delay_2
            bcf        portb,0
            bcf        portb,1
            bsf        portb,2
            call       delay_1
            btfsc     porta,1
            goto     prende
            goto     apaga


        

delay_1        movlw    10110001b
            movwf    reg1
tres        movlw    40h
            movlw    reg2
dos            movlw    50h
            movwf    reg3    
uno            decfsz    reg3,1
            goto    uno
            decfsz    reg2,1
            goto    dos
            decfsz    reg1,1
            goto     tres
            return

delay_2     movlw    32h
            movwf    reg1
tres1        movlw    40h
            movlw    reg2
dos2        movlw    50h
            movwf    reg3    
uno3        decfsz    reg3,1
            goto    uno3
            decfsz    reg2,1
            goto    dos2
            decfsz    reg1,1
            goto     tres1
            return

apaga         bcf        portb,0
            bcf        portb,1
            bcf        portb,2

end


*Les adjunto el .asm y el archivo que proteus*



aqui les muestro la imagen en proteus
 

Adjuntos

  • ab.jpg
    ab.jpg
    310.3 KB · Visitas: 25
Última edición por un moderador:
Amigo, no tienes un problema, tienes como 100... jajajajajajjaja
Empezando, el programa inicia mal ya que en lugar de saltar (cuando dices org 5) a la configuración de puertos lo envías a yo no se donde. Debería ser así:

List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
errorlevel -302

org 0x00
goto Inicio ;Vector de reset
org 0x05

Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw 0x06
movwf ADCON1 ;Puerta A digital
movlw 0x03 ;b'00000011'
movwf TRISA ;Puerta A, dos primeros bit como entrada y los demás como salida
bcf STATUS,RP0 ;Selecciona banco 0

resto del programa...
END


En segundo lugar, no se para que usas el puerto B si en la conexión de proteus no lo usas.
En tercer lugar, debes usar etiquetas diferentes a inicio para direccionar el programa a otros sectores ya que "inicio" esta usandose para apuntar a la configuración de los puertos.

Me parece que debes revisar mejor la hoja de datos del pic que usas, y hacer las correcciones necesarias.
 
Hola hermano gracias, lo que pasa es que este es mi primer programa:LOL:

porque colocas esto?


errorlevel -302


y


movlw 0x06
movwf ADCON1 ;Puerta A digital


Saludos
 
Ayer hice un semáforo, está en lenguaje C.... Espero que te sirva

DESCRIPCION: La implementación es de un semáforo de un cruce de una avenida y una calle. El semáforo correspondiente a la avenida posee permiso de giro a la izquierda, le agregue una opción de luces amarillas intermitentes de precaución, el cual se activa una vez que han pasado por todos los estados las luces del semáforo.
Esta implementación no posee semáforos para peatones.

El Archivo incluye simulación en Proteus.
 

Adjuntos

  • Semáforo.rar
    36.3 KB · Visitas: 43
mi amigo tengo un semaforo de 3 vias echo dame tu correo y te lo envio la programacion en otro tipo de pic familia de ese en un 16f877a mi correo es












no te lo muestro aca porque no se como hacerlo



les recomiendo usen el pic 16f877a no es necesario usar el cristal solo lo hacen con un resonador de 4mhz y listo amigos yo saque 20pts en mi semaforo lo que si esta es un poco mas complejo pues tiene contadores con displays de 7 segmentos para cada color tambien tengo una alarma se las puedo facilitar este foro me ayudo mucho
 
Última edición por un moderador:
Hola, disculpa por la tardanza en responder, errorlevel -302 elimina los mensajes de advertencia a la hora de compilar el programa, de advertencia, no errores, simplemente es para eso.
movlw 0x06
movwf ADCON1
se usan para configurar las salidas del pic como digitales y no analógicas ya que el micro que usas tiene un convertidor analogo/digital y necesitas indicarle la configuración de los puertos, cuando colocas esta instrucción en el registro ADCON1 estas configurando los pines para trabajar con ellos digitalmente.
Te recomiendo que le heches un vistazo a la hoja de datos. Suerte.
 
Atrás
Arriba