TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Tormentor100 en 01 de Noviembre de 2010, 16:46:05

Título: Ayuda con Programita de suma PIC16F874 (SOLUCIONADO)
Publicado por: Tormentor100 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);
}
(http://img220.imageshack.us/img220/939/21454118.jpg)

Título: Re: Ayuda con Programita de suma PIC16F874
Publicado por: Suky 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!
Título: Re: Ayuda con Programita de suma PIC16F874
Publicado por: Tormentor100 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);
}

(http://img261.imageshack.us/img261/5415/16766876.jpg)