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,936 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
picodestroyer
Respuestas: 6
Topic starter
(@picodestroyer)
Active Member
Registrado: hace 16 años

Entonces a parte del bucle infinito no hay nada desastroso respecto a la configuracion del pic?

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

Por cierto buscando info para hacer mi primer robot visite la pagina de tarribot.es pero mirando en el apartado del codigo en C vi que utiliza una forma mas facil de programar. Asocia una variable a un pin y listos.Esto se puede hacer? porque si es asi es mucho mas facil. Os dejo el codigo por aqui.// *********************************
//
* TarriBot 1.0 - Bumpers
// * http://www.tarribot.com
//
* Francisco Reinoso "furri"
// * Julio 2006
//
*********************************

#include <16F84A>
#fuses XT,NOWDT
#use delay(clock=4000000)

#define md_ade PIN_A3
#define md_atr PIN_A2
#define mi_ade PIN_A1
#define mi_atr PIN_A0

#define s1 PIN_B0
#define s2 PIN_B1

#define ON output_high
#define OFF output_low

void main()
{

//apagamos los motores
off(md_ade);
off(mi_ade);
off(md_atr);
off(mi_atr);

while (true)
{
//ambos motores adelante
on(md_ade);
on(mi_ade);

// sensor derecho choca
if (input(s2) == 1) {
// apagamos ambos motores
off(md_ade);
off(mi_ade);
// ambos motores atras durante 1/2 segundo y paramos
on(md_atr);
on(mi_atr);
delay_ms(500);
off(md_atr);
off(mi_atr);
// motor derecho adelante durante 1/2 segundo (motor izq está parado)
on(md_ade);
delay_ms(500);
// y apagamos motor derecho
off(md_ade);
}

if (input(s1) == 1) {
off(md_ade);
off(mi_ade);
on(md_atr);
on(mi_atr);
delay_ms(500);
off(md_atr);
off(mi_atr);
on(mi_ade);
delay_ms(500);
off(mi_ade);
}

}

}

Responder
bastian
Respuestas: 384
(@bastian)
Ardero
Registrado: hace 17 años

Hola!

Lamento contradecirte, ... Asocia una variable a un pin y listos.Esto se puede hacer? porque si es asi es mucho mas facil... pero en realidad no está asociando ninguna variable.
Cuando Hace
#define md_ade PIN_A3

Está diciendole al compilador que cuando encuentre en el programa el texto "md_ade" lo sustituya por "PIN_A3", que es una referencia a un bit de la RAM del micro (en elguna parte habrá algo parecido a #define PIN_A3 0x05.3)
De todas formas si puede hacerse con variables (o algo parecido). Con la directiva #BYTE y #BIT podemos acceder a las posiciones de memoria RAM de los registros de los puertos (y por tanto a los pines de los mismos). Por ejemplo:

.
.
.
#BYTE TRISB 0x86
#BYTE PORTB 0x06
#BIT Salida PORTB.1
#BIT Entrada PORTB.4

Estas declaraciones, me permitirian hacer lo siguiente:

.
.
.
TRISB=0xF0; //PORTB=>Bits 0 a 3 Salidas y 4 a 7 entradas
Salida=Entrada; // Coloca el valor de RB4 en RB1
.
.
.

Tambien podrias trabajar con el puerto entero como un byte... PORTB=PORTB | 0x01; por ejemplo.

Salu2!

Responder
Página 3 / 3
Compartir: