Autor Tema: Xq no sale?  (Leído 1817 veces)

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

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Xq no sale?
« en: 11 de Noviembre de 2011, 12:56:46 »
Hola , estoy empezando en este maravilloso mundo y par empezar estoy practicando los ejercicios del libro Desarrollo de PRoyectos de Pic16F84A , pero al entrar a timer , hay una opcion que no encaja es la OPTION_REG , alguien m podria decir que hacer ,xq segun lei hay otra opcion en el pic que se llama OPTION x eso el autor lo ah modificado,al compilar en el MPLAB me sale de que no c encuentra en el banko 0 en fin ak les dejo el programa:


;    PULSACIÓN   DC (%)         SEMIPERIODO ALTO      SEMIPERIODO BAJO
;    ---------   -------      ----------------------   -----------------------
;    Inicial        0 %            0 µs =   0 x 100 µs   10000 µs = 100 x 100 µs
;    Primera        10 %        1000 µs =  10 x 100 µs    9000 µs =  90 x 100 µs
;    Segunda        20 %        2000 µs =  20 x 100 µs    8000 µs =  80 x 100 µs
;    Tercera        30 %        3000 µs =  30 x 100 µs    7000 µs =  70 x 100 µs
;    Cuarta      40 %       4000 µs =  40 x 100 µs    6000 µs =  60 x 100 µs
;    Quinta      50 %       5000 µs =  50 x 100 µs    5000 µs =  50 x 100 µs
;    Sexta      60 %       6000 µs =  60 x 100 µs    4000 µs =  40 x 100 µs
;    Septima       70 %      7000 µs =  70 x 100 µs    3000 µs =  30 x 100 µs
;   Octava      80 %      8000 µs =  80 x 100 µs    2000 µs =  20 x 100 µs
;   Novena      90 %      9000 µs =  90 x 100 µs    1000 µs =  10 x 100 µs
;   Décima      100 %      10000µs = 100 x 100 µs       0 µs =   0 x 100 µs   
;
; Al conectarlo por primera vez se genera un ciclo de trabajo de 0%, al presionar el pulsador
; cambia al 10%, al actuar una segunda vez cambia al 20%, y así sucesivamente.
; El módulo LCD visualiza el ciclo de trabajo vigente en cada momento.
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

   CBLOCK  0x0C
   CicloTrabajo               ; Ciclo de trabajo deseado.
   Timer0_ContadorA            ; Contador auxiliar.
   ENDC

TMR0_CARGA      EQU   d'256'-d'89'   ; El semiperiodo patrón va a ser de 100 µs.
INCREMENTO_DC   EQU   d'10'         ; Incremento de cada paso del ciclo de trabajo.
#DEFINE  Salida      PORTB,3
#DEFINE  Pulsador   PORTB,7

; ZONA DE CÓDIGOS ********************************************************************

   ORG    0
   goto   Inicio
   ORG   .4
   goto   ServicioInterrupcion

Mensajes
   addwf   PCL,F
Mensaje_DC
   DT "Duty Cycle: ", 0x00
Mensaje_TantoPorCiento
   DT "%  ", 0x00

Inicio   
   bsf      STATUS,RP0
   bcf      Salida
   bsf      Pulsador
   movlw   b'00001000'            ; TMR0 sin prescaler.
   movwf   OPTION_REG
   bcf      STATUS,RP0
   call   LCD_Inicializa
   call   DC_CeroPorCiento      ; Inicializa con un DC=0%, por tanto salida
   movlw   b'10001000'            ; en bajo permanentemente.
   movwf   INTCON               ; Habilita solo interrupción RBI.
Principal
   goto    Principal

; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
ServicioInterrupcion
   btfsc   INTCON,RBIF            ; ¿Interrupción por cambio en el Puerto B?
   call   Pulsador_Interrupcion
   btfsc   INTCON,T0IF            ; ¿Interrupción por desbordamiento del TMR0?
   call   Timer0_Interrupcion
   bcf      INTCON,RBIF            ; Limpia flags de reconocimiento.
   bcf      INTCON,T0IF
   retfie

; Subrutina "Pulsador_Interrupcion" -----------------------------------------------------
;
; Subrutina de atención a la interrupción por cambio en la línea RB7 donde se ha
; conectado un pulsador.
; Incrementa el registro (CicloTrabajo), desde 0 (que corresponde a un DC = 0%
; hasta d'100' (que corresponde a un ciclo de trabajo del 100%).
;
Pulsador_Interrupcion
   call   Retardo_20ms
   btfsc   Pulsador            ; Si no es la línea del pulsador sale.
   goto   Fin_PulsadorInterrupcion
   bsf      INTCON,T0IE            ; En principio habilita interrupciones TMR0.
   movlw   INCREMENTO_DC         ; Se le va a sumar al ciclo de trabajo
   addwf   CicloTrabajo,W         ; (W) = (CicloTrabajo) + INCREMENTO_DC
   movwf   CicloTrabajo         ; Guarda resultado.
   sublw   .100               ; Si DC ha llegado al 100% la salida pasa a
   btfsc   STATUS,Z            ; alto permanentemente.
   goto   DC_100PorCiento
   btfsc   STATUS,C            ; Si pasa de 100, lo inicializa.
   goto   Visualiza
DC_CeroPorCiento
   bcf      Salida               ; Pone la salida siempre en bajo.
   clrf   CicloTrabajo         ; Inicializa el ciclo de trabajo a 0%.
   goto   InhabilitaInterrupcionTMR0
DC_100PorCiento
   bsf      Salida               ; Pone la salida siempre en alto.
   movlw   .100               ; Está al máximo, DC=100%.
   movwf   CicloTrabajo
InhabilitaInterrupcionTMR0
   bcf      INTCON,T0IE
Visualiza
   call   VisualizaCicloTrabajo   ; Visualiza el ciclo de trabajo seleccionado.
EsperaDejePulsar
   btfss   Pulsador
   goto   EsperaDejePulsar
Fin_PulsadorInterrupcion
   movf   CicloTrabajo,W         ; Carga todos los contadores.
   movwf    Timer0_ContadorA
   movlw    TMR0_CARGA
   movwf    TMR0
   return

; Subrutina "Timer0_Interrupcion" -------------------------------------------------------
;
; Mantiene la salida en alto un tiempo igual a 100µs x (CicloTrabajo)
; y en bajo un tiempo igual a 100µs x (100-CicloTrabajo).
;
Timer0_Interrupcion
   movlw    TMR0_CARGA
   movwf    TMR0
   decfsz    Timer0_ContadorA,F      ; Decrementa el contador.
   goto    Fin_Timer0_Interrupcion
   btfsc    Salida               ; Testea el anterior estado de la salida.
   goto    EstabaAlto
EstabaBajo
   nop
   bsf      Salida               ; Estaba bajo y lo pasa a alto.
   movf   CicloTrabajo,W         ; Repone el contador nuevamente con el tiempo en
   movwf    Timer0_ContadorA      ; alto.
   nop
   goto    Fin_Timer0_Interrupcion
EstabaAlto
   bcf    Salida               ; Estaba alto y lo pasa a bajo.
   movf   CicloTrabajo,W         ; Repone el contador nuevamente con el tiempo
   sublw   .100               ; en bajo.
   movwf    Timer0_ContadorA
Fin_Timer0_Interrupcion
   return

; Subrutina "VisualizaCicloTrabajo" -----------------------------------------------------
;
; Visualiza el ciclo de trabajo en el visualizador LCD. Se hace de manera tal que cuando
; haya que visualizar un número mayor de 9, las decenas siempre se visualicen aunque sean
; cero. Y cuando sea menor de 99 las decenas no se visualicen si es cero.
;
VisualizaCicloTrabajo
   call   LCD_Linea1            ; Visualiza el ciclo de trabajo seleccionado.
   movlw   Mensaje_DC
   call   LCD_Mensaje
   movf   CicloTrabajo,W
   call   BIN_a_BCD            ; Lo pasa a BCD.
   movf   BCD_Centenas,W         ; Visualiza las centenas.
   btfss   STATUS,Z            ; Si son cero no visualiza las centenas.
   goto   VisualizaCentenas
   movf   CicloTrabajo,W         ; Vuelve a recuperar este valor.
   call   BIN_a_BCD            ; Lo pasa a BCD.
   call   LCD_Byte            ; Visualiza las decenas y unidades.
   goto   VisualizaTantoPorCiento
VisualizaCentenas
   call   LCD_Nibble            ; Visualiza las centenas.
   movf   CicloTrabajo,W         ; Vuelve a recuperar este valor.
   call   BIN_a_BCD            ; Lo pasa a BCD.
   call   LCD_ByteCompleto      ; Visualiza las decenas (aunque sea cero) y
VisualizaTantoPorCiento            ; unidades.
   movlw   Mensaje_TantoPorCiento   ; Y ahora el simbolo "%".
   call   LCD_Mensaje
   return

   INCLUDE  <LCD_MENS.INC>
   INCLUDE  <LCD_4BIT.INC>
   INCLUDE  <RETARDOS.INC>
   INCLUDE  <BIN_BCD.INC>
   END

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Xq no sale?
« Respuesta #1 en: 11 de Noviembre de 2011, 15:50:03 »
No existe tal cosa. Si bajas el datasheet del PIC, y lo revisas, veras que no existe.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Xq no sale?
« Respuesta #2 en: 11 de Noviembre de 2011, 16:48:15 »
No contesto mensajes privados, las consultas en el foro

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Xq no sale?
« Respuesta #3 en: 11 de Noviembre de 2011, 16:49:58 »
Vamos a ver, si miramos el datasheet del 16f84a tenemos que en el banco 1 en la dirección 81h tenemos el registro OPTION, ahora si miramos el archivo "P16F84A.INC" vemos que a ese registro lo han definido como OPTION_REG, esto es debido a que algunos pic tienen una instrucción llamada "option" y por eso le cambian el nombre al registro.

Y sobre tu pregunta, ¿es este el "error" que te sale?
Citar
Message[302] C:\aa.ASM 29 : Register in operand not in bank 0.  Ensure that bank bits are correct.


Ya que si es esto no es un error sino una advertencia para que te asegures que estas trabajando en el banco 1 y no en el 0.

Un saludo

Desconectado electronic182

  • PIC10
  • *
  • Mensajes: 36
Re: Xq no sale?
« Respuesta #4 en: 16 de Noviembre de 2011, 08:48:14 »
gracias !
de grandisima ayuda.. nos vemos