Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1646
djfreeman
Mensajes: 269
Meta
Mensajes: 254
spiderman
Mensajes: 198
residente
Mensajes: 164

Autor Tema: ayuda con programa  (Leído 265 veces)

Desconectado logix0000

  • Nuevo fichaje
  • *
  • Mensajes: 1
ayuda con programa
« en: Julio 16, 2012, 04:59 »
tengo un programa de control de motor dc con pic 16f84a que funciona con finales de carera necesito agregarle control PWM les dejo el programa por si alguien puede ayudarme por favor es urgente.


list p=16F84a
   include p16F84a.inc
   __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
   
;---------------------DEFINIR VARIABLES------------------------------------------------

   #define GirarAdelante PORTA,0        ; pulsador de partida de motor hacia adelante           
   #define LlegoAdelante PORTA,1        ; final de carrera de motor hacia adelante
   #define GirarAtras     PORTA,2        ; pulsador de partida de motor hacia atras
   #define LlegoAtras     PORTA,3        ; final de carrera de motor hacia atras

;--------------------RESET------------------------------------------------------------

   org 0x00                             ; cada vez que ocurra un reset el programa vuelve a esta direccion

;-------------------ASIGNACION DE PUERTOS---------------------------------------------
   
   bsf STATUS,RP0                       ; se raliza cambio del banco 0 al banco 1
   movlw 0xFF                           ; se carga W con valor 255= 11111111
   movwf TRISA                          ; carga el registro TRISA con 11111111 (RA0,RA1,RA2,RA3,RA4 como entradas)
   movlw 0xE0                           ; se carga W con valor 224 = 11100000
   movwf TRISB                          ; carga el registro TRISB 11100000 (RB0,RB1,RB2,RB3,RB4 como salidas)
   bcf STATUS,RP0                       ; se realiza cambio de banco 1 al banco 0
   clrf PORTB                           ; se borra el contenido del registro PORTB
;-----------------PROGRAMA------------------------------------------------------------

principal
   btfss   GirarAdelante                ; SI RA0 es 0 la instruccion que sigue se ejecuta normalmente sino
   goto   revisar_1                    ; la ignora y se produce un salto
   goto   Girar_Adelante
revisar_1
   btfss   LlegoAdelante                ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
   goto   revisar_2                    ; la ignora y se produce un salto
   goto    Parar
revisar_2
   btfss   GirarAtras                   ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
   goto   revisar_3                    ; la ignora y se produce un salto
   goto   Girar_Atras
revisar_3
   btfss   LlegoAtras                   ; si RA1 es 0 la instruccion que sigue se ejecuta normalmente sino
   goto   principal                    ; la ignora y se produce un salto
   goto   Parar      
   goto   principal

Girar_Adelante
   movlw   b'00001101'                  ; carga W con el numero binario 00001101
   movwf   PORTB                        ; mueve el valor de W al registro PORTB
   goto   principal                    ; salta a principal
Girar_Atras
   movlw   b'00010110'                  ; carga W con el valor binario 00010110
   movwf   PORTB                        ; mueve el valor de W  a PORTB
   goto   principal                    ; salta a principal
Parar
   bcf      PORTB,2                      ; pone a 0 RB2
    bcf     PORTB,3                      ; pone a 0 RB3 cuando se detiene motor hacia adelante
    bcf     PORTB,4                      ; pone a 0 RB4 cuando se detiene motor hacia atars
   goto   principal                    ; salta a principal

   end