TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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! :)
#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)
-
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:
x=PORTB;
y=PORTC;
z=x+y;
Luego hacer:
PORTD=muestra_bcd(z);
Ahora esto hay que incluirlo en un bucle infinito para que se ejecute continuamente:
while(1)
{
x=PORTB;
// ....
}
;-)
Saludos!
-
:-/ 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
#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)