Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: salvador en 13 de Febrero de 2016, 15:06:15
Título: Configuraciòn o fallo de programa, ayuda
Publicado por: salvador 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' 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
; 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
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'
Título: Re:Configuraciòn o fallo de programa, ayuda
Publicado por: KILLERJC 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
***** 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
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
; 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
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:
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
#defi... play 0x06,5
movlw 0x0
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
#defi... play PORTB,5
movlw 0x0
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
decfsz 22h,1
Por esto:
Código: ASM
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.
Título: Re:Configuraciòn o fallo de programa, ayuda
Publicado por: salvador 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
Título: Re:Configuraciòn o fallo de programa, ayuda
Publicado por: KILLERJC 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
;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;<- Esto
nop;<- Culpa de esto
goto interno ; Siemrpe toma el goto, entonces nunca sale de aqui
decfsz 21h,1
goto externo2
decfsz 20h,1
goto externo
RETURN
El DECFSZ salta una sola instruccion que es el NOP... Como recomendacion y por facilidad, Si queres crear demoras,, usa una herramienta online:
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
; Delay = 10 seconds
; Clock frequency = 4 MHz
; Actual delay = 10 seconds = 10000000 cycles
; Error = 0 %
cblock
d1
d2
d3
endc
Delay_10s
;9999995 cycles
movlw 0x5A
movwf d1
movlw 0xCD
movwf d2
movlw 0x16
movwf d3
Delay_10s_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_10s_0
;1 cycle
nop
;4 cycles (including call)
return
Observaras que el cblock le falta el numero, simplemente copia el d1 a d4 a tu cblock y listo.
Título: Re:Configuraciòn o fallo de programa, ayuda
Publicado por: salvador 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. :)