Autor Tema: adjunto programa con 16f84a  (Leído 1574 veces)

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

Desconectado picecillo

  • PIC10
  • *
  • Mensajes: 4
adjunto programa con 16f84a
« en: 13 de Febrero de 2004, 16:29:00 »
hola, el siguiente es un programita para mover un piston ajustando los ciclos de operacion y el tiempo de duracion de cada ciclo, si a alguien le sirve pues aqui esta.

;======================================piston===========================18/dic/03==================
;                           proyecto piston
;==================================================================================================

                           list       p=16f84a
                           radix      hex
                           __config   h"3ff1"

;===================================================================================================

;                           cpu    igualdades
                        
                           status   equ      0x03
                           porta   equ      0x05
                           portb   equ      0x06
                            optionr   equ      0x81
                           intcon   equ      0x0b
                           conta   equ      0x0c
                           contb   equ      0x0d
                           contc   equ      0x0e
                           contd   equ      0x0f
                           conte   equ      0x10
                           contf   equ      0x11
                           contg   equ      0x12
                           conth   equ      0x13
                           trisa   equ      0x85
                           trisb   equ      0x86
                              z   equ      2
                             rp0   equ      5
;===================================================================================================

                           org      0x00
                           goto   inicio

                  inicio      bsf      status,5      ;seleccionar banco 1
                           movlw   b"00000000"      ;poner en w
                           movwf   trisb           ;decirle a puerto b
                           movlw   b"00011111"      ;poner en w
                              movwf   trisa         ;decirle a puerto a
                                   bsf      optionr,7      ;deshabilitar resistencias pull up
                           bcf      status,5      ;seleccionar banco 0
                        
                  ini         clrf   porta         ;limpiar
                           clrf   portb         ;limpiar
                           clrf   conta         ;limpiar
                           clrf   contb         ;limpiar
                           clrf   contc         ;limpiar
                           clrf   contd         ;limpiar
                           clrf   conte         ;limpiar
                           clrf   contf         ;limpiar
                           clrf   contg         ;limpiar
                           movlw   0x05         ;poner en w
                           movwf   conte         ;poner en cont e
                           movlw   0x02         ;poner en w
                           movwf   contf         ;poner en contador f
                           movwf   contg         ;poner en cont. g
                        

;=====================================================================================================


                                 ;LUCES

                           bcf      portb,4         ;apagar led verde
                           bsf      portb,5         ;encender led rojo

                                 ;INICIO

                  iniciar      btfsc   porta,0         ;esta oprimida la tecla?
                           goto   iniciar         ;no, no esta, regresarse
                           bcf      portb,5         ;apagar led rojo
                           call   tiempo         ;llamar a tiempo
                           bsf      portb,4         ;encender led verde

                                 ;PISTONEO

                  seleccion1   btfsc   porta,1         ;dar mas pistoneo?
                           goto   seleccion2      ;ir a seleccion 2
                           clrf   conte         ;limpiar conte
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;llamar a tiempo
                           bsf    portb,4         ;encender led verde
                  candado1    bcf      portb,3         ;poner un cero
                        aumentar   btfsc   porta,2         ;incrementar valor?
                           goto   redulix         ;no, brincarse
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;llamar a tiempo
                           bsf      status,2      ;poner un uno
                  full      btfss   status,2      ;esta lleno?
                           goto   rexal         ;ir a rexal
                           incf   conte         ;no, incrementar contador e
                                   bsf      portb,4         ;encender led verde
                           call   tiempo         ;ir
                           movf   conte,w         ;poner en w
                           xorlw   0x78         ;comparar con este valor fa
                           btfss   status,2      ;comparar con status,2
                           goto   candadear      ;ir
                               bsf      portb,5         ;encender led rojo
                           bcf      status,2      ;poner un cero
                           goto   full         ;ir a full
                  rexal      call   tiempo         ;ir a tiempo
                           bcf      portb,5         ;apagar led rojo
                           call   tiempo         ;ir
                           bsf      portb,5         ;encender led rojo
                           goto   reducix         ;ir
                  redulix      bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde
                           btfss   portb,3         ;hay un uno?
                           goto   valorar         ;ir
                           goto   reducix         ;ir
                  valorar      movlw   0x03         ;poner en w
                           movwf   conte         ;poner en contador e
                  reducix      btfsc   porta,3         ;reducir valor?
                           goto   seleccion1      ;ir
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;llamar a tiempo4
                           bsf      status,2      ;poner en status,2
                  empty      btfss   status,z      ;poner en status,2
                           goto   seleccion1      ;ir a selecc
                           decf   conte         ;decrementar contador g
                           bsf      portb,4         ;encender led verde
                           movf   conte,w         ;mover valor de cont.e a w
                           xorlw   0x0a         ;comparar con este valor
                           btfss   status,z      ;hay un uno?
                           goto   tempis         ;ir
                           bcf      portb,5         ;apagar led rojo
                  tempis      call   tiempo         ;ir
                             movf   conte,w         ;poner en w
                           xorlw   0x02         ;comparar con este valor
                           btfss   status,z      ;es igual?
                           goto   reducix         ;ir
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde
                           call   tiempo         ;ir
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde   
                           bcf      status,2      ;poner un cero
                           goto   empty          ;ir
                           
                                 ;RAPIDEZ

                  seleccion2   btfsc   porta,2         ;dar mas  rapidez?
                           goto   accion         ;ir
                           clrf   contf         ;limpiar contador f
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde
                  candado2   bcf      portb,2         ;poner un cero
                  aumentare   btfsc   porta,3         ;incrementar valor?
                           goto   reducile      ;no, brincarse
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;llamar a tiempo 3
                           bsf      status,2      ;poner un uno
                  lleno      btfss   status,z      ;si no hay incremento, brincar
                           goto   relucire      ;irse
                           incf   contf         ;si, incrementar contador e
                           incf   contg         ;increm
                           bsf      portb,4         ;encender led verde
                           call   tiempo         ;ir
                           movf   contf,w         ;poner f en w
                           xorlw   0x78         ;comparar este valor con w 64
                           btfss   status,z      ;comparar con z y escapar
                           goto   candadeare      ;ir
                           bsf      portb,5         ;encender led rojo
                           bcf      status,z      ;poner un cero
                           goto   lleno         ;irse a lleno
                  relucire   call   tiempo         ;ir
                           bcf      portb,5         ;apagar led rojo
                           call   tiempo           ;ir
                           bsf    portb,5         ;encender led rojo
                           goto   redaile         ;ir
                  reducile   bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde
                           btfss   portb,2         ;hay un uno?
                           goto   valorare      ;ir
                           goto   redaile          ;ir
                  valorare   movlw   0x03         ;poner en w
                           movwf   contf         ;poner en contador f
                   redaile      btfsc   porta,1         ;reducir valor?
                           goto   seleccion2      ;ir
                           bcf      portb,4         ;apagar led verde
                            call   tiempo         ;llamar a tiempo
                           bsf      status,z      ;poner un uno
                  vacio      btfss   status,z      ;si no hay decremento escapar
                           goto   seleccion2      ;irse
                            decf   contf         ;decrementar contador f
                           decf   contg         ;decrementar
                           bsf      portb,4         ;encender led verde
                           movf   contf,w         ;poner el valor de contf en w
                           xorlw   0x0a         ;comparar con esre valor
                           btfss   status,z      ;hay un uno?
                           goto   tyampi         ;ir
                           bcf      portb,5         ;apagar led rojo
                  tyampi      call   tiempo         ;tyampa
                           movf   contf,w         ;poner en w
                           xorlw   0x02         ;compar este valor con w
                           btfss   status,z      ;comparar con z y escapar
                            goto   redaile         ;ir
                            bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir a tiempo
                           bsf      portb,4         ;encender led verde
                           call   tiempo         ;ir
                           bcf      portb,4         ;apagar led verde
                           call   tiempo         ;ir
                           bsf      portb,4         ;encender led verde   
                           bcf      status,z      ;poner un cero
                           goto   vacio         ;ir

                                 ;MOVIMIENTO

                  accion       btfsc   porta,3         ;iniciar ciclo?
                           goto   seleccion1      ;no,regresarse a seleccion
                  accione       bsf      portb,6         ;no,energizar solenoide 1
                           call   tiempo          ;ir a tiempo
                           bcf      portb,6         ;desenergizar solenoide 1
                           call   retardo          ;ir a  retardador
                           bsf      portb,7         ;energizar solenoide 2                     
                           call   tiempo         ;ir a tiempo
                           bcf      portb,7         ;desenergizar solenoide 2
                           call   retardo         ;ir a retardador
                           decfsz   conte         ;decrementar contador g
                           goto   accione         ;ir a retardador
                           goto   ini            ;ir a ini

                                 ;CANDADEOS   

                  candadear   bsf      portb,3         ;poner un uno
                           goto   aumentar      ;ir a aumentar
                  candadeare   bsf      portb,2         ;poner un uno
                           goto   aumentare      ;ir

                                 ;TIEMPO

                  tiempo      movlw   0x1c         ;poner en w 1c
                           movwf   conta         ;poner en contador B
                  delra       movlw   0xff         ;poner en w ff
                           movwf   contb         ;poner en contador C
                  delri      movlw   0x16         ;poner en w 16
                           movwf   contc         ;poner ne contador D
                  decra      decfsz   contc         ;decrementar
                           goto   decra         ;ir
                           decfsz   contb         ;decrementar
                           goto   delri         ;ir
                           decfsz   conta         ;decrem
                           goto   delra         ;ir
                           movlw   0x1a         ;poner en w 1a
                           movwf   contd         ;poner ne cont d
                  dect      decfsz   contd         ;decrem
                           goto   dect         ;ir a dect
                           nop                  ;nop
                            return               ;regresar

                                 ;RETARDO

                  retardo       movlw   0x1c         ;no,poner en w 1c
                           movwf   conta         ;poner en contador B
                  dtfcl      movlw   0xff         ;poner en w ff
                           movwf   contb         ;poner en cont b
                  dtfcil      movlw   0x16         ;poner en w 16
                           movwf   contc         ;poner en cont c
                  dtfrel      decfsz   contc         ;decrementar
                           goto   dtfrel         ;ir
                           decfsz   contb         ;decrem
                           goto   dtfcil         ;ir
                           decfsz   conta         ;decrem
                           goto   dtfcl         ;ir
                           movlw   0x00         ;poner en w
                           movwf   contd         ;poner en contd
                             incf   contd         ;increm
                           movf   contd,w         ;poner
                           subwf   contf         ;restar de cont f
                           btfss   status,z      ;escapar si es uno
                           goto   retardo       ;ir a retardo
                           movf   contg,w         ;poner en w el valor de g
                           addwf   contf         ;sumar el valor de g a f
                           return                ;regresa



                           end
                  



                           

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: adjunto programa con 16f84a
« Respuesta #1 en: 13 de Febrero de 2004, 18:55:00 »
prodrias esplayarte un poco mas sobre el codigo que pusistes arriba, desde ya saludos

gabriel


 

anything