Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/04/2010 #1

Avatar de sdel

pic 16f84a subrutina binario a bcd
Hola como estan, bueno como veran soy nuevo en el foro, y tambien en la electronica. Estoy empezando con el tema de los pics programando el 16f84. tengo un problema y es que no puedo hacer andar una subrutina que convierte un valor binario a un bcd, el problema no es el codigo, de hecho el programa anda, lo que no anda es cuando pego la rutina en un archivo inc y despues la llamo desde mi programa:

se genera problema cuando dentro de la libreria uso las variables de esta forma:

cblock
var1
var2
var3
endc

por lo que tengo entendido y por logica no se pueden direccionar posiciones concretas.

ahora bien, si yo uso cblock y endc la subrutina hace cualquier cosa (en el simulador no se reconocen las variables del bloque y el contador de programa se carga con cualquier valor), y si pego la subrutina en el programa y a esas variables las direcciono directamente el programa anda bien, a que se debe esto? aclaro que en el archivo inc el unico codigo que hay es el del bloque de variables y el codigo, no puse la etiqueta end al final, lo hago en el programa.
espero haber sido claro, saludos.
24/04/2010 #2
Moderador

Avatar de Chico3001

Respuesta: pic 16f84a subrutina binario a bcd
posiblemente estas definiendo una direccion erronea para el cblock, que hace que comienze a asignar variables en localidades ocupadas o que se salga del area de registros generales...
25/04/2010 #3

Avatar de sdel

Respuesta: pic 16f84a subrutina binario a bcd
hola mira te pego el codigo por favor si ves algo de lo que no me doy cuenta avisame:

Código:
LIST		P=16F84A
INCLUDE	<P16F84A.INC>

__CONFIG	_CP_OFF	&	_WDT_OFF	&	_PWRTE_ON	&	_XT_OSC
			


		bsf	STATUS,RP0	
		movlw	b'00011111'
		movwf	TRISA
		movlw	b'00000000'
		movwf	TRISB
		bcf	STATUS, RP0

	inicio						
		movf	PORTA, 0
		call	BIN_a_BCD   ;llama a subrutina
		movwf	PORTB
		goto	inicio

INCLUDE	<D:\Pic16f84A\librerias\BIN_BCD.INC>

_______________en el archivo inc________________________
                          CBLOCK					
		BCD_Centenas			
		BCD_Decenas		
		BCD_Unidades	
		ENDC


	BIN_a_BCD
		clrf	BCD_Centenas				
		clrf	BCD_Decenas				
		movwf	BCD_Unidades			
	BCD_Resta10
		movlw	d'10'					
		subwf	BCD_Unidades,W		
		btfss	STATUS,C				
		goto 	BIN_BCD_Fin			
	BCD_IncrementaDecenas
		movwf	BCD_Unidades			
		incf	BCD_Decenas,F				
		movlw	d'10'					
		subwf	BCD_Decenas,W		
		btfss	STATUS,C				
		goto	BCD_Resta10			
	BCD_IncrementaCentenas			
		clrf	BCD_Decenas				 
		incf	BCD_Centenas,F			
		goto	BCD_Resta10			
	BIN_BCD_Fin
		swapf	BCD_Decenas,W		
		addwf	BCD_Unidades,W		
		return
donde puede estar el problema?saludo
25/04/2010 #4
Moderador

Avatar de Chico3001

Respuesta: pic 16f84a subrutina binario a bcd
EEEfectivamente... en el CBLOCK no estas asignando una direccion de inicio y de seguro el compilador esta mandando las variables a donde se le pega la gana...

En el PIC16F84 la memoria de uso general comienza en la direccion 0x0Ch asi que si no usas otras variables en tu programa princpial debes colocar el CBLOCK de esta forma

CBLOCK 0x0C

Si estas usando mas variables entonces vas a tener que ajustar el CBLOCK para que no interfiera con tus otras variables...

Saludos...
26/04/2010 #5

Avatar de tecnogirl

Respuesta: pic 16f84a subrutina binario a bcd
Esssooo essss!!. Una consecuencia derivada de usar archivos include con CBLOCKS. La mejor metodologia es empezar los CBLOCKS en el programa principal y dejar los CBLOCKS sin iniciar (como hizo sdel) en los include.

Aunque lo mejor es dejar todo el codigo en un solo programa, asi no pasan estas cosas.
Saludos
27/04/2010 #6

Avatar de sdel

Respuesta: pic 16f84a subrutina binario a bcd
haaaa k bien gracias o sea que en el programa principal tengo que hacer asi?

CBLOCK 0x0C

ENDC


o esto lo hago en el archivo inc?

gracias tecogirl y chico3001 saludo
27/04/2010 #7

Avatar de tecnogirl

Respuesta: pic 16f84a subrutina binario a bcd
1. En el principal inicializas CBLOCK, ej CBLOCK 0x0C
2. En los include no los inicializas, solo los declaras, ej:
CBLOCK
var1
var2
....
ENDC

Pero no te hagas un lio, pon todo el codigo en uno solo archivo.
Saludos
27/04/2010 #8

Avatar de sdel

Respuesta: pic 16f84a subrutina binario a bcd
bien, gracias tecnogirl, si, usando todo en un solo codigo anda bien, lo que pasa es que queria armar una libreria de las funciones que pueda usar en otros programas, saludos y gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.