Autor Tema: Ayuda programa en ASM par pic 16f84a  (Leído 2129 veces)

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

Desconectado guillefern

  • PIC10
  • *
  • Mensajes: 1
Ayuda programa en ASM par pic 16f84a
« en: 05 de Octubre de 2013, 20:02:54 »
Hola, soy nuevo en esto de programar pics, soy autodidacta, estudio a través de un libro que encontré en la red, me sirve de mucho pero también me deja muchas dudas debido al lenguaje técnico que no domino, bueno el tema es que me puse a hacer un programa sencillo  para manejar un lavar-ropas automático con el pic 16f84a, como no conozco a nadie que me pueda aconsejar o corregir acudo al foro para que me ayude.
Bueno la configuración de las entradas y salidas del pic es la siguiente, PortA como entradas y PortB como salidas, los tres primeros bits del Porta los uso para selección de programa, o sea el bit 0, el 1 y el 2; el bit 3 lo asigno al presostato, el bit 4 no lo utilizo. En las salidas: bit 0 electrovalvula, bit 1 Motor derecha, bit 2 Motor izquierda, bit 3 bomba de agua y bit 4 motor centrifugado el 5,6 y 7 no los utilizo.
Les dejo el Código de lo que voy haciendo hasta ahora, del programa y de las librerías y espero correcciones, consejos y toda la ayuda que me puedan brindar, porque en realidad me gusta mucho esto y quisiera saber si voy bien o si no entendí nada y estoy haciendo cualquier cosa, bueno desde ya muchas gracias

ya lo termine al program aqui lo dejo completo

;*****************************************Programador de Lavarropas*************************************
;
;                               Tabla de seleccion de programas
;
;                                0 0 0 ---> Apagado (stand by)                                                           *
;                                0 0 1 ---> Lavado largo                       
;                                0 1 0 ---> Lavado medio                                           
;                                0 1 1 ---> Lavado corto
;                                1 0 0 ---> Enjuage
;                                1 0 1 ---> Desagote
;                                1 1 0 ---> Centrifugado
;                                1 1 1 ---> Pausa
;
;
;
;                                                                                                                 *
;********************************************************************************************************

;********************************************ZONA DE DATOS***********************************************

   __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC;Configuracion del grabador
   
   LIST   P=16F84A   ;Procesador.
   INCLUDE<P16F84A.INC>;Definicion de los operandos utilizados.
   INCLUDE<carga.INC>
   
;**********************************************ZONA DE CODIGOS********************************************
      CBLOCK    0x0c
      Contador1
      Contador2
      Contador3
      ENDC
      ORG      0                 ;El programa comienza en la dir. 0.
Inicio   bsf      STATUS,RP0         ;Pone a 1 el bit 5 del STATUS, Acceso al banco 1.
      clrf   TRISB            ;El puerto B se configura como salidas.
      movlw   b'11111111'         ;b'11111111--->(W)
      movwf   TRISA            ;(W)------>(TRISA),El puerto A se configura como entradas.
      bcf      STATUS,RP0         ;Pone a 0 RP0 de STATUS. Acceso al banco 0.
      
Principal
      movf   PORTA,W            ;(PORTA)--->(w)
      andlw   b'00000111'         ;(w)AND b'00000111' Esto es para quedarse con el valor de lo 3 primeros bits
      call   TablaDeVerdad      ;Llama a TablaDeVerdad
      END                         ;Final del programa.
TablaDeVerdad
      addwf   PCL,f
      call   StandBy
      call   LavadoLargo
      call   LavadoMedio
      call   LavadoCorto
      call   Enjuage
      call   Desagote
      call   Centrifugado
      call   Pausa
      return
StandBy
      sleep
      return
LavadoLargo
      call   carga            ;Llama a la subrutina carga.
      call   PrimerLavado

Desagote
      call   desagote      
SegundoLavado
      movlw   d'3'
      movwf   Contador3
      call   carga
      decfsz   Contador3
      call   PrimerLavado
centrifugado
      call   Centrifugado
      return
      
      
LavadoMedio
      movlw   d'2'
      movwf   Contador3
      call   carga
      call   PrimerLavado
      call   desagote
      decfsz   Contador3
      goto   LavadoMedio
      call   centrifugado
      return
      
      
LavadoCorto      
      movlw   d'1'
      movwf   Contador3
      call   carga
      call   PrimerLavado
      call   desagote
      decfsz   Contador3
      goto   LavadoMedio
      call   centrifugado
      return   
      
Enjuage   
      call    carga
      call   PrimerLavado
      call   desagote   
      call   centrifugado
      return
      
Desagote
      call    desagote
      return
      
Centrifugado
      call   centrifugado      
      return
      
Pausa   
      sleep
      return         
      

Y esta es la libreria

;************************************Libreria lavarropas .inc**************************************

carga
      #DEFINE   electrovalvula   PORTB,0   ;Asigna a la etiqueta "electrovalvula" el bit 0 del puertob
      movf   PORTA,W               ;(PORTA)--->(W)
      andlw   b'00001000'            ;(W)+B'00001000'--->(W) me quedo solo con el estado del bit3 del portA
      bsf      electrovalvula         ;me pone a 1 el bit 0 del portB, activa la electrovalvula
      sublw   b'00001000'            ;(W)-b'00001000 si esta operacion da 0 el reg Z de status cambia a 1
      btfss   STATUS,Z            ;si Z=1 salta una linea
      goto   carga               ;salta a carga
      clrf   PORTB               ;apaga la electrovalvula
      return
         

MotorDerecha
      movlw   b'00000010'         ;00000010--->(W)
      movwf   PORTB            ;(W)--->(PORTB)
      call   Retardo5s         ;
      clrf   PORTB            ;pone a cero el portb
      return
      
MotorIzquierda
      movlw   b'00000100'
      movwf   PORTB
      call   Retardo5s
      clrf   PORTB
      return      
      
deasagote
      movlw   b'00001000'         ;} b'00001000'--->(W)
      movwf   PORTB            ;}(W)--->(PORTB) Estas dos ultimas instrucciones activan la bomba de agua
      movf   PORTA,W            ;*
      andlw   b'00001000'         ;*Estas instruccionan controlan la señal del presostato
      sublw   b'00001000'         ;*
      btfsc   STATUS,Z         ;*
      goto   Desagote         ;
      clrf   PORTB            ;Apaga la bomba de agua
      return
      
      
centrifugado
      call   desagote
      movlw   b'00001100'         ;activa la bomba de agua y motor ala izquierda
      movwf   PORTB            
      call   Retardo10s         ;mantiene activado la bomba y el mot izq por 10 seg
      clrf   PORTB            ;apaga bomba y mot izq
      call   Retardo5s         ;se detiene por 5 seg
      movlw   b'00001010'         ;Activa bomba y mot der
      movwf   PORTB
      call   Retardo10s         ;mantiene bomba y mot der por 10 seg
      clrf   PORTB            ;apaga bomba y mot der
      call    Retardo5s
      movlw   b'00010010'         ;activa bomba y centrifugado
      movwf   PORTB
Retardo      
      movlw   d'24'
      movwf   Contador3
      call   Retardo20s
      decfsz   Contador3
      goto   Retardo
      clrf   PORTB
      return   
      
PrimerLavado
      call   Retardo5s         ;Despues de la carga espera 5seg
      movlw   d'30'            ;d'30-->(W) carga el contador
      movwf   Contador1         ;
      call   MotorIzquierda      ;Llama a la subrutina Motor Izquierda
      call   Retardo5s
      call   MotorDerecha      ;   "  " "       "      "   Dererecha
      decfsz   Contador1         ;Decrementa el contador, cuando llega a 0 salta una instruccion
      goto   PrimerLavado      ;Mientras Contador1 sea diferente de 0 salta a PrimerLavado
remojo
      movlw   d'30'
      movwf   Contador2
      call   Retardo20s
      decfsz   Contador2
      goto   remojo
      return         
« Última modificación: 06 de Octubre de 2013, 03:25:30 por guillefern »

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: Ayuda programa en ASM par pic 16f84a
« Respuesta #1 en: 06 de Octubre de 2013, 00:25:15 »
Déjame hecharle un vistazo y estaremos en contacto.

Un saludo.


 

anything