Problema con multiplicacion- pic18f452 CCS

Hola, estoy realizando un programa que calcula medias ponderadas y saca el resultado por los puertos B y D y he topado con un problema. No me calcula bien las medias, y he podido constatar que es por culpa de las multiplicaciones. Asi que he creado un codigo muy simple para hacer pruebas con multiplicaciones que es este:

#define compiler __PCWH__

#include "18F452.h"
#include "stdlib.h"

#fuses HS,NOWDT,NOPROTECT,NOLVP// fusibles deben activarse en el dispositivo cuando se programa. Watchdog desactivado por hardware
#use delay(clock=20000000) // frecuencia del procesador 4 Mhz


void main() //programa que prueba si va el micro

{


long valor0=20;
long cnt=2;
long valor1=0;


#DEFINE PORTA=0xF80;
#DEFINE PORTB=0xF81;
#DEFINE PORTD=0xF83;


setup_WDT(WDT_OFF); //desactivo el watchdog tb por software



set_tris_b(0x00); // puerto B salidas

set_tris_d(0x00); // puerto D salidas

//inicializo los puertos de salida a 0

output_B(0x00); //inicializo los puertos de salida a 0
output_D(0x00);


valor1=valor0*cnt;//multiplico las variables cnt y valor 0 y saco el resultado del producto por los puertos B y D

output_B(valor1>>8);//saco por el puerto B el valor
output_D(valor1&0xFF);//saco por el puerto D el valor


}


Cuando lo simulo me da bien el resultado, sin embargo cuando lo pruebo me da el resultado 0x4000 independientemente de los valores que multiplique (he probado cambiando a varios valores) No puede ser problema de la placa en la que lo pruebo ya que la he utilizado para probar las salidas, y los resultados de varias operaciones sin ningún problema. Así que algo me esta fallando en la multiplicación ¿Alguna idea? Había pensado en alguna libreria que me faltase pero no parece que sea necesario incluir ninguna más de las que tengo
 
Atrás
Arriba