Autor Tema: Configuraciòn o fallo de programa, ayuda  (Leído 2411 veces)

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

Desconectado salvador

  • PIC10
  • *
  • Mensajes: 3
Configuraciòn o fallo de programa, ayuda
« en: 13 de Febrero de 2016, 15:06:15 »
Hola a todos, en otro tiempo e andado de incógnito leyendo por aquí la maravilla del foro, con pena solicito un jalón de orejas, que estoy haciendo mal? programe un pic16f627A y nada me ignora totalmente, el código, la configuración no se, se compila bien ya revise y todo parece en regla, como prueba solo deje una parte del código y no, no pasa nada!
Saludos y que el jalón no duela mucho!  :D


 ;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PIC16F627A. This file contains the              *
;   basic code building blocks to build upon.                         *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014).          *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:        xxx.asm                                         *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required: P16F627A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;**********************************************************************
   
    list      p=16F627A           ; list directive to define processor
    #include <p16F627A.inc>       ; processor specific variable definitions
;    errorlevel  -302              ; suppress message 302 from list file


   __CONFIG _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.

;***** VARIABLE DEFINITIONS (examples)
#define   key      0x06,2
#define   sensor   0x06,3
#define   ptt      0x06,4
#define   play           0x06,5
#define   fmsg           0x06,6
#define   ce      0x06,7


#define   a6      0x05,7         ; para direccionar mensajes en ci audio
#define   a4      0x05,1         ; para direccionar mensajes en ci audio
#define   led      0x05,6
; example of using Shared Uninitialized Data Section
;INT_VAR        UDATA_SHR     
;w_temp         RES     1        ; variable used for context saving
;status_temp    RES     1        ; variable used for context saving

;**********************************************************************
;RESET_VECTOR    CODE    0x0000    ; processor reset vector
   org   0x00

      goto    inicio             ; go to beginning of program


INT_VECTOR      CODE    0x0004    ; interrupt vector location

;INTERRUPT

;    movwf   w_temp            ; save off current W register contents
;    movf    STATUS,w          ; move status register into W register
;    movwf   status_temp       ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

;    movf    status_temp,w     ; retrieve copy of STATUS register
;    movwf   STATUS               ; restore pre-isr STATUS register contents
;    swapf   w_temp,f
;    swapf   w_temp,w           ; restore pre-isr W register contents
;    retfie                                 ; return from interrupt
;***********************************************************
;retardo 10 segundos
diez   movlw   d'100'
      nop
          nop
      movwf   20h
externo
      movlw   d'100'
      movwf   21h
externo2
      movlw   d'249'
      movwf   22h
interno
      nop
      decfsz   22h,1
      nop
      goto           interno
      decfsz   21h,1
      goto           externo2
      decfsz   20h,1
      goto           externo
      RETURN
;*****************************************************************
paromotor
      bcf      a4
      bcf      a6   ;direccion cero menaje de paromotor
      bsf      ptt      ;activa radio
      bcf      ce
      movlw   0x07
      movwf   0x20
ppp      decfsz   0x20,1
      goto           ppp
      bsf      ce      ;comienza mensaje
mmm   btfsc           fmsg      ;fin de mensaje?
      goto           mmm
      
      bcf      ptt      ;apaga radio y espera 10 segundos
      RETURN
      
;***********************************************************************
;mensaje de restablecimiento de servicio
siesarm
      bsf      a4
      bsf      a6   
      bsf      ptt
      bcf      ce
      movlw   0x07
      movwf   0x20
abc      decfsz   0x20,1
      goto   abc
      bsf      ce      ;comienza mensaje
bcd      btfsc   fmsg      ;fin de mensaje?
      goto   bcd      
      bcf      ptt      ;apaga radio y espera 10 segundos
      nop
      RETURN


; rutina para transmitir que alarma esta activada
 
;******************************************************************
;MAIN_PROG    CODE

inicio
      clrf          PORTA
      movlw   0x07
      movwf   CMCON
      bcf      STATUS,RP1
      bsf      STATUS,RP0   ;banco 1   
      movlw   0x6f
      movwf   TRISB      ;pto B
      movlw   0x3d
      movwf   TRISA      ;pto A
      bcf      STATUS,RP0   ;regreso a banco 0

      bsf      ce         ;ci audio deshabilitado
      movlw   0x0
      movwf   0x05      ;ci audio inicio de mensages direccion 0
      call           diez
dis      bcf      led         ;led de alarma apagado
llave          btfsc          key
      goto          llave
      bsf      led         ;led de armado

chk      btfss          key
      goto          chk
      goto          dis


 

        END                       ; directive 'end of program'

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Configuraciòn o fallo de programa, ayuda
« Respuesta #1 en: 13 de Febrero de 2016, 15:47:03 »
Bueno veo que has buscado o realmente estas usando las directivas del MPASM o tal ves sea el template que lo trajo consigo.
Sobre tiron de orejas no.. creo que hay unas cosas que te estas equivocando.

Esto:
Código: ASM
  1. ***** VARIABLE DEFINITIONS (examples)
  2. #define   key      0x06,2
  3. #define   sensor   0x06,3
  4. #define   ptt      0x06,4
  5. #define   play           0x06,5
  6. #define   fmsg           0x06,6
  7. #define   ce      0x06,7
  8.  
  9.  
  10. #define   a6      0x05,7         ; para direccionar mensajes en ci audio
  11. #define   a4      0x05,1         ; para direccionar mensajes en ci audio
  12. #define   led      0x05,6

No son variables, es decir un lugar donde puedas guardar valores, sino que lo unico que haces es decirle al compilador que cuando encuentre "led" lo reemplaze por 0x05,6 (igual a poner PORTA,6 )
Algo que personamente a mi no me gusta. Por que tenes que estar muy interiorizado en el programa para que otra persona lo entienda, sino uno deberia tener una copia de ese codigo para poder revisar todo lo demas. Si uno quiere definir una variable lo hace con:

Código: ASM
  1. ; example of using Shared Uninitialized Data Section
  2. INT_VAR        UDATA_SHR      
  3. w_temp         RES     1        ; variable used for context saving
  4. status_temp    RES     1        ; variable used for context saving
  5. mi_variable     RES     1        ; Mi variable

En este caso el mismo compilador ( en realidad el linker ) va a acomodar esas varaibles donde el desee. Pero para alguien que recien comienza, lo mejor al comenzar a programar seria hacer algo asi:

Citar
   CBLOCK 0x20
   my_var      ;0x20
   temp1      ;0x21
   temp2      ;0x22
   temp3      ;0x23
   ENDC

Asi controlas un poco el lugar donde estan las variables. El 0x20 por que apartir de ahi es la memoria del usuario, lo anterior son registros del micro.

Y de paso no tenes que estar recordando donde pones las cosas.. sino que usas nombres! por ejemplo en esos DECFSZ 22h,1 podrias haber puesto DECFSZ temp2, F, con el CBLOCK de arriba

Lo que si te voy a tironear de orejas es por esto:
Código: ASM
  1. #defi...    play  0x06,5
  2.  
  3.       movlw   0x0
  4.       movwf   0x05      ;ci audio inicio de mensages direccion 0

Por que hacer eso, cuando tenes el .inc y que le da nombre a todos los registros? es decir la direccion 0x05 si estas en el banco 0, equivale a PORTA (fijate en memory organization del datasheet)
Entonces lo de arriba hubiera quedado mas comodo y facil de leer asi:

Código: ASM
  1. #defi...    play  PORTB,5
  2.  
  3.       movlw   0x0
  4.       movwf   PORTA      ;ci audio inicio de mensages direccion 0

Otra cosa mas, usa F y W en ves de 1 y 0:

Es decir esto:
Código: ASM
  1. decfsz   22h,1
Por esto:
Código: ASM
  1. decfsz   22h, F


No puedo decirte si lo que estas haciendo esta bien o mal por que no se exactamente que estas tratando de hacer. Pero lo de arriba seria bueno que lo aplicaras.

Desconectado salvador

  • PIC10
  • *
  • Mensajes: 3
Re:Configuraciòn o fallo de programa, ayuda
« Respuesta #2 en: 13 de Febrero de 2016, 17:45:39 »
Aceptado todo lo relacionado al como se debe escribir y como dices si otro lo lee va a ser difícil, :oops:  por algún tiempo e tenido la costumbre de programar sin usar las directivas, en el caso que refieres del espacio para registros de usuario no e tenido problemas, debo usar el escribir como si fuera otro el que va a leer y que no ande descifrando jeroglifos así lo haré, gracias.
En esta prueba en exclusiva trato de monitorear una entrada y no hace nada, creí que tal vez sea una falla en la configuracion etc, recorte el programa y compile el que aquí publico para saber si tengo una falla y porque no esta leyendo, se deshabilita el WDT igual que el
MCLRE, que en su momento creí que estaban habilitadas y era que no hacia nada.
El código de aquí abajo supone debe encender un led al detectar un cero en el pin de referencia y después apagarlo al detectar un 1 y el asunto es que no pasa nada, pensando en que el micro estuviera mal prove con tres más y sigue sin funcionar lo que me dice que algo hago mal  :?
Agradezco tu respuesta.


inicio
      clrf          PORTA
      movlw   0x07
      movwf   CMCON
      bcf      STATUS,RP1
      bsf      STATUS,RP0   ;banco 1   
      movlw   0x6f
      movwf   TRISB      ;pto B
      movlw   0x3d
      movwf   TRISA      ;pto A
      bcf        STATUS,RP0       ;regreso a banco 0

      bsf            PORTB,7        ;ci audio deshabilitado
      movlw      0x0
      movwf      PORTA          ;ci audio inicio de mensajes dirección 0
      call           diez
dis     
          bcf      PORTA,6        ;led de alarma apagado
llave         
           btfsc          PORTB,2     ;monitorea si es cero o uno, si es cero prende un led que idica armado el sistema
           goto          llave
           bsf             PORTA,6         ;enciende led de armado

chk      btfss          PORTB,2    ; si PORTB,2 es uno apagaría el led
           goto          chk
           goto          dis

        END                     
« Última modificación: 13 de Febrero de 2016, 17:48:05 por salvador »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Configuraciòn o fallo de programa, ayuda
« Respuesta #3 en: 13 de Febrero de 2016, 18:47:08 »
Tu problema esta en el retardo que hiciste.. Te lo voy a señalar para que veas cual es el problema:

Código: ASM
  1. ;retardo 10 segundos
  2. diez  
  3.         movlw   d'100'
  4.         nop
  5.         nop
  6.         movwf   20h
  7. externo
  8.         movlw   d'100'
  9.         movwf   21h
  10. externo2
  11.         movlw   d'249'
  12.         movwf   22h
  13. interno
  14.         nop
  15.         decfsz   22h,1   ;<- Esto
  16.         nop                  ;<- Culpa de esto
  17.         goto    interno     ; Siemrpe toma el goto, entonces nunca sale de aqui
  18.         decfsz   21h,1
  19.         goto    externo2
  20.         decfsz   20h,1
  21.         goto    externo
  22.         RETURN

El DECFSZ salta una sola instruccion que es el NOP... Como recomendacion y por facilidad, Si queres crear demoras,, usa una herramienta online:

http://www.piclist.com/techref/piclist/codegen/delay.htm

Elegi los segundos, o cantidad de ciclos, pone cuantos son. Elegi la frecuencia del oscilador, Tilda "generar rutina" y pone generar codigo. Y te sale algo asi :

Código: ASM
  1. ; Delay = 10 seconds
  2. ; Clock frequency = 4 MHz
  3.  
  4. ; Actual delay = 10 seconds = 10000000 cycles
  5. ; Error = 0 %
  6.  
  7.         cblock
  8.         d1
  9.         d2
  10.         d3
  11.         endc
  12.  
  13. Delay_10s
  14.                         ;9999995 cycles
  15.         movlw   0x5A
  16.         movwf   d1
  17.         movlw   0xCD
  18.         movwf   d2
  19.         movlw   0x16
  20.         movwf   d3
  21. Delay_10s_0
  22.         decfsz  d1, f
  23.         goto    $+2
  24.         decfsz  d2, f
  25.         goto    $+2
  26.         decfsz  d3, f
  27.         goto    Delay_10s_0
  28.  
  29.                         ;1 cycle
  30.         nop
  31.  
  32.                         ;4 cycles (including call)
  33.         return

Observaras que el cblock le falta el numero, simplemente copia el d1 a d4 a tu cblock y listo.

Desconectado salvador

  • PIC10
  • *
  • Mensajes: 3
Re:Configuraciòn o fallo de programa, ayuda
« Respuesta #4 en: 13 de Febrero de 2016, 21:33:39 »
Gracias! Dada la observación del como escribí me di a la tarea de revisar y reescribir y efectivamente encontré el problema, en este momento venia decir de la solución y me encuentro conque ya  KILLERJC publico la solución.  :oops:  :oops:
La prisa en muchas ocasiones  no hace perder tiempo, bien dice por ahí "Despacio que voy de prisa"
Gracias!
Le echo un ojo al link que sugieres.  :)


 

anything