Hola a todos
Pues ya le di uso a la función rand() que me recomendó Pocher.
Hice el programa del dado electrónico que está en el foro de AVRs pero ahora con PIC y en C. :]
Hay que hacer un cambio a la librería stdlib.h. Al valor RANDOM_MAX hay que ponerle el número máximo (más uno) que uno espera entregue la función rand();.
Les agrego el programa. Luego le mando el DSN de proteus a Modulay. Ah y en el programa pueden ahorrarse líneas de programación.
Ah y la idea de hacer un dado electrónico se la copié a Carlete.
//Programa que genera la salida de un dado electrónico con PIC
//migsantiago@tutopia.com
//dado electrónico
//B0 B1 B2 B3 B4 B5 B6 B7
//1 2 3 4 5 6 7 NC
// _______
// 1|O 4 O|5
// 2|O O O|6
// 3|O O|7
// -------
#include <16F84.h>
/*Para random de 6 modifique stdlib.h*/
//RANDOM_MAX=6
#include <D:santiagoPICsprogramasc_dadoSTDLIB-dado.H>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#use fast_io(B)
#byte portb = 0x06
#byte porta =0x05
void main()
{
int x_numero;
set_tris_b(0b00000000); /*PtoB salida*/
set_tris_a(0xff); /*PtoA entrada*/
output_b(0x00); /*Limpio puerto*/
while(1){
if (input(PIN_A0)==1)
{
x_numero=rand(); /*Saca un random 0 a 5 en x*/
if(x_numero==0) /*Cayó 1*/
{
portb=0x08; /*Prende 4*/
delay_ms(1000);
}
if(x_numero==1) /*Cayó 2*/
{
portb=0x41; /*Prende 1 7*/
delay_ms(1000);
}
if(x_numero==2) /*Cayó 3*/
{
portb=0x49; /*Prende 1 4 7*/
delay_ms(1000);
}
if(x_numero==3) /*Cayó 4*/
{
portb=0x55; /*Prende 1 3 5 7*/
delay_ms(1000);
}
if(x_numero==4) /*Cayó 5*/
{
portb=0x5d; /*Prende 1 3 4 5 7*/
delay_ms(1000);
}
if(x_numero==5) /*Cayó 6*/
{
portb=0x77; /*Prenden todos menos el 4*/
delay_ms(1000);
}
}
}
}