Autor Tema: Cinco pulsadores y tres lelevadores 16f628a  (Leído 2221 veces)

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

Desconectado YAESUFT80

  • PIC10
  • *
  • Mensajes: 2
Cinco pulsadores y tres lelevadores 16f628a
« en: 15 de Julio de 2010, 19:51:15 »

En hora buena, amigos

les escribo para que me ayuden a depejar mis dudas y la verdad es que soy nuevo en la programacion de microcontroladores.  :oops:
tengo un programa que me ayudaron hacer, ya lo compile y lo cargue en el 16f628a pero no ejecuta las funciones que requiero y son las siguientes:

Necesitó que el pic al energizarlo por defecto tenga  tres salidas altas, Por ejemplo.  (RB1, RB2, RB3,  ON)

Si  RA0 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = OFF, RB2 = ON,   RB3 = ON
Si  RA1 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = ON,  RB2 = OFF,  RB3 = ON
Si  RA2 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = ON,  RB2 = ON,   RB3 = OFF
Si  RA3 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = OFF, RB2 = ON,   RB3 = OFF
Si  RA4 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = ON,  RB2 = OFF,  RB3 = OFF
Si  RA5 recibe un pulso, las salidas deveran cambiar al siguiente estado   RB1 = ON,  RB2 = ON,   RB3 = ON     (ENCIENDE LAS TRES SALIDAS)

NOTA 1: AL ENERGIZAR EL CIRCUITO QUE SUS SALIDAS POR DEFECTO SEAN ALTAS.
NOTA 2: EL PULSO QUE LLEGA A LAS ENTRADAS ES MOMENTANEO
NOTA3:  DE PREFERENCIA PROGRAMAR EN UN PIC16F628A

ESTE ES ELPROGRAMA QUE TENGO PERO NO CORRE

__CONFIG _CP_OFF&_MCLRE_ON&_WDT_OFF&_INTOSC_OSC_NOCLKOUT      
LIST            P=16F628A
      INCLUDE         <P16F628A.INC>
      ORG          0X00
      GOTO         INICIO
      ORG            0X05

INICIO   BSF   STATUS,RP0
      MOVLW B'00000000'
      MOVWF TRISB
      MOVLW B'11111111'
      MOVWF TRISA
      BCF STATUS,RP0
      MOVWF B'11111111'
      MOVWF PORTB
leer: BTFSC PORTA,0    ; bit 0 del puerto B esta en nivel bajo, salta 1 linea
        CALL  led1      ;salta a encender LED1
        BTFSC PORTA,1
        CALL  led2
        BTFSC PORTA,2
        CALL  led3
        BTFSC PORTA,3
      CALL  led4
        BTFSC PORTA,4
      CALL  led5
      GOTO  leer    

led1:  MOVLW   b'00001100'
        MOVWF   PORTB
        BTFSC   PORTA,0
      goto    led1
      clrf PORTB
      RETURN

led2:  MOVLW   b'00001010'
        MOVWF   PORTB
      BTFSC   PORTA,1
      goto    led2
      clrf PORTB
        RETURN

led3:  MOVLW   b'00000110'
        MOVWF   PORTB
      BTFSC   PORTA,2
      goto    led3
      clrf PORTB
        RETURN
led4:  MOVLW   b'00000010'
        MOVWF   PORTB
      BTFSC   PORTA,3
      goto    led4
      clrf PORTB
        RETURN
led5:  MOVLW   b'11111111'
        MOVWF   PORTB
      BTFSC   PORTA,4
      goto    led5
      clrf PORTB
        RETURN
      END

SI ALGUIEN ME PUEDE AYUDAR SE LO VOY AGRADECER BASTANTE,
GRACIAS POR SU ATENCION
« Última modificación: 15 de Julio de 2010, 19:54:23 por YAESUFT80 »

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Cinco pulsadores y tres lelevadores 16f628a
« Respuesta #1 en: 15 de Julio de 2010, 20:34:52 »
Hola YAESUFT80 ,hace mucho que no programo pero mirando tu codigo veo que usas el porta como entradas digitales
y no declaras en el inicio esto? creo que te falta deshabilitar los comparadores del puerto con el registro CMCON
INICIO   MOVLW    7
   MOVWF    CMCON   
                BSF           STATUS,RP0
                BCF           STATUS,RP1
                MOVLW      B'00000000'
                MOVWF      PORTB
                MOVLW      B'11111111'
                MOVWF      PORTA
                BCF           STATUS,RP0
                BCF           STATUS,RP1
                MOVLW      B'11111111'
                MOVWF      PORTB

Luego sigue tu programa....
a fijate tambien la palabra de configuracion de los fuse creo que tambien podrias agregar   _PWRTE_ON
Saludos a Todos!


Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Cinco pulsadores y tres lelevadores 16f628a
« Respuesta #2 en: 16 de Julio de 2010, 06:50:56 »
Hola!

Feliz cumple para mi !!!  :-/ :-/

Aqui te dejo tu rutina modificada y funcionando a la perfección , simulada en proteus.




;Necesito que el pic al energizarlo por defecto tenga  tres salidas altas, Por ejemplo.  (RB1, RB2, RB3,  ON)

;Si  RA0 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = OFF, RB2 = ON,   RB3 = ON
;Si  RA1 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = ON,  RB2 = OFF,  RB3 = ON
;Si  RA2 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = ON,  RB2 = ON,   RB3 = OFF
;Si  RA3 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = OFF, RB2 = ON,   RB3 = OFF
;Si  RA4 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = ON,  RB2 = OFF,  RB3 = OFF
;Si  RA6 recibe un pulso, las salidas deBeran cambiar al siguiente estado   RB1 = ON,  RB2 = ON,   RB3 = ON     (ENCIENDE LAS TRES SALIDAS)

; SI USAS MCLR NO PUEDES USAR RA5. POR LO TANTO, MEJOR USAS RA6. SINO AL LLEVAR RA5 A TIERRA LO RESETEARÁS AL PULSAR.-
; LA OTRA ALTERNATIVA ES CAMBIAR LA CONFIG _MCLRE_ON POR _MCLRE_OFF PARA PODER USAR EL RA5 COMO ENTRADA.


;NOTA 1: AL ENERGIZAR EL CIRCUITO QUE SUS SALIDAS POR DEFECTO SEAN ALTAS.
;NOTA 2: EL PULSO QUE LLEGA A LAS ENTRADAS ES MOMENTANEO
;NOTA3:  DE PREFERENCIA PROGRAMAR EN UN PIC16F628A

;ESTE ES ELPROGRAMA QUE TENGO PERO NO CORRE

__CONFIG _CP_OFF&_MCLRE_ON&_WDT_OFF&_INTOSC_OSC_NOCLKOUT      
LIST            P=16F628A
      INCLUDE         <P16F628A.INC>

PDel0 equ 0x20 ; variables para demora antirrebotes
PDel1 equ 0x21


      ORG          0X00
      GOTO         INICIO
      ORG            0X05

INICIO   BSF   STATUS,RP0
      MOVLW B'00000000'
      MOVWF TRISB
      MOVLW B'11111111'
      MOVWF TRISA
      BCF STATUS,RP0
      MOVLW    07h
        MOVWF    CMCON  
      MOVLW B'11111111' ; ANTES ERA "MOVWF". ERROR PORQUE ESTABAS MOVIENDO EL "DATO" DE LA DIRECCION FF (11111111) EN LUGAR DE UN VALOR FF AL ;ACUMULADOR
      MOVWF PORTB



leer:    BTFSS PORTA,0    ; bit 0 del puerto B esta en nivel bajo, salta 1 linea
        CALL  led0      ;salta a encender LED1
        BTFSS PORTA,1
        CALL  led1
        BTFSS PORTA,2
        CALL  led2
        BTFSS PORTA,3
         CALL  led3
        BTFSS PORTA,4
         CALL  led4
      BTFSS PORTA,6
      CALL  led5
      call  DEMORA; demora antirrebotes pulsadores 40ms
         GOTO  leer    

led0:  MOVLW   b'00001100'
        MOVWF   PORTB
        RETURN

led1:  MOVLW   b'00001010'
        MOVWF   PORTB
        RETURN

led2:  MOVLW   b'00000110'
        MOVWF   PORTB
        RETURN

led3:  MOVLW   b'00000100'
        MOVWF   PORTB
       RETURN

led4:  MOVLW   b'00000010'
        MOVWF   PORTB
        RETURN

led5:  MOVLW   b'11111110'
        MOVWF   PORTB
        RETURN

DEMORA  movlw     .93       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .71       ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL3  goto PDelL4         ; 2 ciclos delay
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

      END



También te adjunto el archivo de imágen del proteus para que veas el esquema.

Un abrazo
« Última modificación: 16 de Julio de 2010, 06:58:42 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything