fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Dudas sobre algunos...
 
Avisos
Vaciar todo

Dudas sobre algunos puntos en CCS

13 Respuestas
5 Usuarios
0 Reactions
5,937 Visitas
picodestroyer
Respuestas: 6
Topic starter
(@picodestroyer)
Active Member
Registrado: hace 16 años

Hola a todos , soy nuevo en esto de la robotica y tengo una par de dudas sobre el lenguaje de programacion c en el compilador CCS. Bien me descarge este codigo en CCS para mirar como funcionaba#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000)

#byte puerto_b = 06

void main( void )
{

set_tris_b( 0x01 ); // RB0 como entrada y lo demás del puerto B como salida
puerto_b = 0; // Limpia puerto B

DO{
if (!input (PIN_B0)){ // Si se presiona RB0
bit_set( puerto_b, 1 ); // enciende led conectado a RB2
}
else{ // Si no se presiona RB0
bit_clear( puerto_b, 1 ); // apaga led conectado a RB2
}
} while ( TRUE );
}

Pero la parte donde configura los puertos , el set_tris_b no entiendo como le indica que puertos son entrada y como salida a partir del numero hexadecimal.
Otra duda que me ronda la cabeza es la parte del if en la de bit_set en esa parte no entiendo absolutamente nada no se que le esta pasando, ni se porque al principio iguala el puerto_b a 0.

Muchas gracias por todo, la verdad es que me esta encantando esto de la robotica

Responder
12 respuestas
mif
Respuestas: 1095
 Mif
(@mif)
Noble Member
Registrado: hace 19 años

Entonces si en vez de poner el numero del puerto en hexadecimal lo pongo en binario no pasa nada no?

Eso no es el numero de puerto, es el parametro de configuración de entradas salidas como bien t han explicado, el puerto en tu caso será el B por la instruccion, nada más.

Responder
picodestroyer
Respuestas: 6
Topic starter
(@picodestroyer)
Active Member
Registrado: hace 16 años

Gracias a todos por contestar y ya por ultimo jejej

#byte puerto_b = 06

esta linea que indica?? es que en algunos codigos como este la incluyen pero en este por ejemplo que esta sacado de la pagina de ucontrol.com no

#include <16f877a> //PIC utilizado
#fuses XT,NOWDT,NOPROTECT,PUT //Configuramos los fuses
#use delay (clock=4000000) //Oscilador a 4Mhz
#use fast_io(b) //Optimizamos E/S del PORTB
//------Programa principal-----
void main(void)
{
set_tris_b(0xFE); //Salida RB0 como salida, el resto como entrada.
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
do{
output_low(PIN_B0); //Apago el LED
delay_ms(500); //Espero 500ms.
output_high(PIN_B0); //Enciendo el LED
delay_ms(500); //Espero 500ms.
}while(TRUE); //Repito el bucle
}

Responder
urriellu
Respuestas: 61
(@urriellu)
Trusted Member
Registrado: hace 18 años

Gracias a todos por contestar y ya por ultimo jejej

#byte puerto_b = 06

Página 92 del manual de CCS:
If the id (puerto_b) is already known as a C variable then this will locate the variable at address X (06). In this case the variable type does not change from the original definition. If the id is not known a new C variable is created and placed at address x with the type int (8 bit).

Warning: In both cases memory at x is not exclusive to this variable. Other
variables may be located at the same location. In fact when x is a variable,
then id and x share the same memory location.

Es decir, si no existe la variable "puerto_b" la crea como un entero de 8 bits y la almacena en la posición 06 de la memoria de datos. Básicamente es para poder acceder a PORTB fácilmente, como si fuese una variable normal.

Responder
picodestroyer
Respuestas: 6
Topic starter
(@picodestroyer)
Active Member
Registrado: hace 16 años

Bueno ya estoy aqui otra vez pero esta es para enseñaros el codigo.
En teoria, aun no tengo el pic, el led iria conectado al puerto de el pin 2 y con un reloj de 20 Mhz

#include <18F4550>
#use delay (clock=20000000)
#fuses HS,NOWDT,NOPUT,NOPROTECT

void main(void)
{
int bucle=1;
set_tris_d(00000000);//todas los pins del Puerto D como salida
do
{
ouput_low(PIN_D2);
delay_ms(500);
ouput_high(PIN_D2);
delay_ms(500);
}while(bucle==1);
}

Si tengo que corregir algo o algo no lo he hecho del todo bien o nada bien decidmelo porfavor. Muchas gracias

Responder
urriellu
Respuestas: 61
(@urriellu)
Trusted Member
Registrado: hace 18 años

Si lo que quieres es un bucle infinito (la variable "bucle" nunca cambia) podrías usar while(1){ ... }. Es más eficiente y limpio.

Responder
Página 2 / 3
Compartir: