Autor Tema: Ayuda con Programita de suma PIC16F874 (SOLUCIONADO)  (Leído 2338 veces)

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

Desconectado Tormentor100

  • PIC10
  • *
  • Mensajes: 3
Ayuda con Programita de suma PIC16F874 (SOLUCIONADO)
« en: 01 de Noviembre de 2010, 16:46:05 »
Hola amigos, soy nuevo en la programación de pics, necesito ayuda para un trabajo de la escuela, estuve buscando por internet pero no encontre solucion al programa que necesito hacer.. que debe de realizar esto:

"Leer 2 numeros por el puerto RB y Puerto RC que se sumen y muestre el resultado por el puerto RD. Poner 2 display de 7 segmentos a la salida para ver el resultado."

el programa es para el PIC16F874 en lenguaje C, estoy utilziando MPLAB con el CCS C, a continuacion les muestro el codigo que tengo.. y la imagen de lo que me da en la simulacion del proteus (solo muestra ceros), agradezco cualquier sugerencia, de antemano gracias y felizidades por su foro!  :)


Código: [Seleccionar]
#if defined(__PCM__)
#include <16F874.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP

#byte PORTB= 0X06
#byte TRISB= 0X86
#byte PORTC= 0X07
#byte TRISC= 0X87
#byte PORTD= 0X08
#byte TRISD= 0X88

#use Delay(Clock=4000000)

// *********************************
int x,y,z;
int muestra_bcd(int valor);

void main(){
z=x+y;
set_tris_b(0xFF);
    set_tris_c(0xFF);
    set_tris_d(0x00);
PORTB=x;
PORTC=y;
PORTD=z;
PORTD=muestra_bcd(z);
}

int muestra_bcd(int valor){
int unidades, decenas,resultado;
decenas=  valor/10;   //decenas=1
unidades= valor%10;   //unidades=0
resultado=decenas<<4;
resultado=resultado+unidades;
return(resultado);
}


« Última modificación: 01 de Noviembre de 2010, 18:25:42 por Tormentor100 »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con Programita de suma PIC16F874
« Respuesta #1 en: 01 de Noviembre de 2010, 17:00:36 »
Hola! Bienvenido! Has programado anteriormente en algún lenguaje descriptor de hardware? Por como escribiste el código o algunas partes  :mrgreen:

En realidad aquí hay que pensar que es secuencial, entonces cada linea se va ejecutando una a una. Si tu necesitas ahcer una suma leyendo los valores de los puertos debes hacer algo como esto:

Código: [Seleccionar]
x=PORTB;
y=PORTC;
z=x+y;

Luego hacer:

Código: [Seleccionar]
PORTD=muestra_bcd(z);

Ahora esto hay que incluirlo en un bucle infinito para que se ejecute continuamente:

Código: [Seleccionar]
while(1)
{
   x=PORTB;
   // ....

}

 ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Tormentor100

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda con Programita de suma PIC16F874
« Respuesta #2 en: 01 de Noviembre de 2010, 18:25:09 »
 :-/ ehh gracias por la ayuda!, aquí les dejo el código ya funcionando, con una toma del proteus  =P , como aporte para algun otro novatillo como yo que lo necesite

Código: [Seleccionar]
#if defined(__PCM__)
#include <16F874.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP

#byte PORTB= 0X06
#byte TRISB= 0X86
#byte PORTC= 0X07
#byte TRISC= 0X87
#byte PORTD= 0X08
#byte TRISD= 0X88

#use Delay(Clock=4000000)

// *********************************
int x,y,z;
int muestra_bcd(int valor);

void main(){
set_tris_b(0xFF);
    set_tris_c(0xFF);
    set_tris_d(0x00);
while(1){
x=PORTB;
y=PORTC;
z=x+y;
PORTD=muestra_bcd(z);
}
}

int muestra_bcd(int valor){
int unidades, decenas,resultado;
decenas=  valor/10;   //decenas=1
unidades= valor%10;   //unidades=0
resultado=decenas<<4;
resultado=resultado+unidades;
return(resultado);
}




 

anything