TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ramirez en 05 de Mayo de 2009, 13:33:27
-
Buenas tardes a todos, estoy empezando a aprender a programar pic's en C. He comenzado con varios programas básicos de este foro y me surge la siguiente duda: que diferencia existe entre "char" y "signed char", ya que al cambiarlo en el siguinte programa la forma de actuar es muy difente:
#include <16f648a.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#use standard_io(B) //puerto B
///PROGRAMA
void main(void)
{
signed char i; //variable indice
int leds[4]={0b10000001,0b01000010,0b00100100,0b00011000}; //led's
set_tris_b(0x00); //portb como salida
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
do{ //bucle...
for(i=0;i<4;i++){ //led's on fuera-dentro
output_b(leds); //ilumino led's correspondientes
delay_ms(100);
}
for(i=3;i>-1;i--){ //led's on dentro-fuera
output_b(leds); //ilumino led's correspondientes
delay_ms(100);
}
}while(TRUE); //...infinito
}
para que funcione correctamente debe de ponerse "signed char" ¿porqué?
Gracias a todos de antemano
-
En CCS todos los tipos de variables son unsigned de forma predeterminada (int8 equivale a unsigned int8). Es necesario que pongas signed char para que abarque valores negativos.
char se crea como unsigned int8 (0 a 255)
signed char se crea como signed int8 (-128 a 127)
-
Y creo q la razon por la cual no funciona tu codigo esta aca:
for(i=3;i>-1;i--){ //led's on dentro-fuera
Si i esta expresado como unsigned char, entonces no se puede hacer la comparacion i>-1, ya que para esto el compilador resta ambos numeros, y un numero negativo se expresa de forma binaria a uno positivo (ya sea complemento a 2 o como quieran).
Las posibles soluciones serian:
for(i=3;i>=0;i--){ //led's on dentro-fuera
o
for(i=3;(signed char)i>-1;i--){ //led's on dentro-fuera
no lo he probado y no se si funciona, pero creeria q si
saludos!!!