Bueno, gente de Foros de Electrónica. ¿Qué tal?
La cosa es así.
Lo que pasa es que estoy realizando un programa en ccs de un sumador de datos.
El ejercicio es este:
Lea un dato por el puerto C y otro dato por el puerto B.
Realice la suma de los 8 bits (tomados como números con signo) y visualice el resultado en una LCD solamente cuando se presione un pulsador conectado en A1.
En el LCD se muestra el mensaje “Sumador PIC” centrado en el segundo renglón, mientras que el primer renglón muestra la operación matemática con los signos adecuados, por ejemplo “45 + 134 = 179” ó “-23 + 40 = 17”, considerando que cada dato puede ser positivo ó negativo.
El programa que he realizado es este:
El hecho es que, %d va con un rango desde -128 hasta 127 y como son dos datos, si quiero sumar -128+(-96) da un error porque sobrepasa el rango de datos en %d, igualmente pasa si quiero sumar positivos 127+8= da un número que no es.
Una solución que me dieron fue esta:
En los casos de sobrepasar el limite de un entero sin signo o con signo, el resultado debe guardarse en una variable de mayor cantidad de bits int16 por ejemplo (el rango es mucho más amplio) y para mostrar el resultado se usa %lu (entero largo sin signo) ó %ld (entero largo con signo).
Lo que pasa es que no sé como hacer la variable int16 y si escribo %ld en ccs me aparece error.
Adjunto dos imágenes de la simulación con error tanto negativo como positivo.
Ojala que me hayan entendido y me puedan ayudar.
Gracias.
La cosa es así.
Lo que pasa es que estoy realizando un programa en ccs de un sumador de datos.
El ejercicio es este:
Lea un dato por el puerto C y otro dato por el puerto B.
Realice la suma de los 8 bits (tomados como números con signo) y visualice el resultado en una LCD solamente cuando se presione un pulsador conectado en A1.
En el LCD se muestra el mensaje “Sumador PIC” centrado en el segundo renglón, mientras que el primer renglón muestra la operación matemática con los signos adecuados, por ejemplo “45 + 134 = 179” ó “-23 + 40 = 17”, considerando que cada dato puede ser positivo ó negativo.
El programa que he realizado es este:
Código:
#include <16f877A.h>
#use delay (clock=4Mhz)
#fuses XT,NOWDT
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#include <lcd.c> //DISPLAY EN PUERTO D
void main(){
lcd_init();
set_tris_c(0xff); //DATOS 1
set_tris_b(0xff); //DATOS 2
set_tris_a(0x02); //ENTRADA PULSADOR
while(true){
int dato_1 = input_c();
int dato_2 = input_b();
int pulsador=input(pin_a1);
if(pulsador==1){
lcd_gotoxy(4,2);
printf(lcd_putc,"Sumador PIC");
lcd_gotoxy(2,1);
printf(lcd_putc,"%4d",dato_1);
lcd_gotoxy(6,1);
printf(lcd_putc,"+",);
lcd_gotoxy(7,1);
printf(lcd_putc,"%4d",dato_2);
lcd_gotoxy(11,1);
printf(lcd_putc,"=");
lcd_gotoxy(12,1);
printf(lcd_putc, "%4d",(dato_1+dato_2));
}
}
}
Una solución que me dieron fue esta:
En los casos de sobrepasar el limite de un entero sin signo o con signo, el resultado debe guardarse en una variable de mayor cantidad de bits int16 por ejemplo (el rango es mucho más amplio) y para mostrar el resultado se usa %lu (entero largo sin signo) ó %ld (entero largo con signo).
Lo que pasa es que no sé como hacer la variable int16 y si escribo %ld en ccs me aparece error.
Adjunto dos imágenes de la simulación con error tanto negativo como positivo.
Ojala que me hayan entendido y me puedan ayudar.
Gracias.
Adjuntos
Última edición por un moderador: