Entrada/Salida Datos CSS

Hola quiero hacer un circuito sensillo para una clase de progra que tengo mi idea es el siguiente

con un PIC16F877A tiene muuchaos pines de puertos jeje bueno mi idea es esta digamos cuando en el puerto B0 reciva 1 logico(5V) en el puerto A0 entrege un byte por ejemplo 0000 0001
y asi osea uedri algo asi

Entrada 1 en puerto ----------/---------- Salida en puerto A0
B0 ---------------------------------------------0001 0001
B1 ---------------------------------------------0001 0010
B2 ---------------------------------------------0001 0011
B3 ---------------------------------------------0001 0100
B4 ---------------------------------------------0001 0101
B5 ---------------------------------------------0001 0110
B6 ---------------------------------------------0001 0111
B7 ---------------------------------------------0001 1000





claro esos no son los valores pero lo puse solo como ejemplo


se me ocurrio este codigo, es mi primero codigo en CSS jeje asi que no me regañen



Código:
#include <pic16f877a>
# use delay (clock=20000000)


void main (){
while (1){
	if(input(pin_b0)){
		write (1);
	}
	if(input(pin_b1)){
		write (2);
	}
	if(input(pin_b2)){
		write (3);	
	}
	if(input(pin_b3)){
		write (4);		
	}
	if(input(pin_b4)){
		write (5);	
	}
	if(input(pin_b5)){
		write (6);	
	}
	if(input(pin_b6)){
		write (7);	
	}
	if(input(pin_b7)){
		write (8);
	}

}}

void write (int puerto){
	switch(puerto){
		case 1:output_b(0b10001); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 2:output_b(0b10010); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 3:output_b(0b10011); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 4:output_b(0b10100); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 5:output_b(0b10101); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 6:output_b(0b10110; //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 7:output_b(0b10111); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
		case 8:output_b(0b11000); //escribe en el puerto B
		delay_ms(100);
		output_b(0);     //escribe en el puerto B
		break;
	}
}



no se que mas le falta al codigo, quiero poner eso de que puede reescribir el pic osea que no se blokee y asi gracias

sugerencias y correcciones las acepto jeje
 
Hola:

Me suena algo parecido a esto.
Código:
/*                                EJEMPLO 3-3
                        Autor: Mikel Etxebarria
                        Orozko-Bizkaia, Julio 2010

Entradas/salidas digitales: Programa combinacional

Programa combinacional. Según el estado de los interruptores RA0 y RA1, activar
los leds RB0-RB7 conectados a la puerta B, conforme a la siguiente tabla de
la verdad:

RA1 RA0  RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
--- ---  --- --- --- --- --- --- --- ---
 0   0    1   0   1   0   1   0   1   0
 0   1    0   1   0   1   0   1   0   1
 1   0    0   0   0   0   1   1   1   1
 1   1    1   1   1   1   0   0   0   0
*/

#include <16f886.h>

/* Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades */

#fuses     NOLVP,PUT,NOWDT,EC_IO,NOFCMEN,NOBROWNOUT    //Palabra 1 de configuración
#fuses    NOWRT,BORV40                                //Palabra 2 de configuración

/* Con estas directivas las funciones "input" y "output_bit" no reprograman
 el pin de la puerta cada vez que son utilizadas. Si no se indica el
modo fast_io se asume por defecto standard_io el cual reprograma el pin
siempre antes de ser utilizadas estas funciones. */

#use fast_io (A)
#use fast_io (B)

main()
{
      output_b(0x0);                    //Borra las salidas
    setup_adc_ports(NO_ANALOGS);    //Puertas A y B digitales
      set_tris_a(0x3F);                //Puerta A entrada
      set_tris_b(0x00);                //Puerta B salida

      while(true)
    {
            switch(input_a() & 0b00000011)// Máscara para RA0 y RA1
        {
              case 0: 
                output_b(0b10101010); 
                break;

              case 1: 
                output_b(0b01010101); 
                break;
        
              case 2: 
                output_b(0b00001111); 
                break;

              case 3: 
                output_b(0b11110000); 
                break;
    
            default:;
        }
    }
}

Saludo.
 
no osea la cosa es que el puerto B tiene 8 patitas (pin) y el puerto A tiene 5 (yo solo usare 1)

entonces
cuando en el B0 este un 1(logico), por el puerto A0 me va a entregar el byte 00010001
cuando en el B1 este un 1(logico), por el puerto A0 me va a entregar el byte 00010010
cuando en el B2 este un 1(logico), por el puerto A0 me va a entregar el byte 00010011
cuando en el B3 este un 1(logico), por el puerto A0 me va a entregar el byte 00010100
cuando en el B4 este un 1(logico), por el puerto A0 me va a entregar el byte 00010101
cuando en el B5 este un 1(logico), por el puerto A0 me va a entregar el byte 00010111
cuando en el B6 este un 1(logico), por el puerto A0 me va a entregar el byte 00010110
cuando en el B7 este un 1(logico), por el puerto A0 me va a entregar el byte 00011001


nose si me explique?
 
Buenas:

¿Te refieres que por cada pulso del botón RA0 cambie la secuencia de bits del puerto B que tienes señalado?

Saludo.



no mira como es un PIC16F877A el puerto B tiene 8 patitas(pines) y el puerto A tiene 5 o 6 no recuertdo, asi osea


si la patita B0 recive 5 volts,entonces en la patita A0 saldra 00010001
si la patita B1 recive 5 volts,entonces en la patita A0 saldra 00010010
si la patita B2 recive 5 volts,entonces en la patita A0 saldra 00010011
si la patita B3 recive 5 volts,entonces en la patita A0 saldra 00010100
si la patita B4 recive 5 volts,entonces en la patita A0 saldra 00010101
si la patita B5 recive 5 volts,entonces en la patita A0 saldra 00010110
si la patita B6 recive 5 volts,entonces en la patita A0 saldra 00010111
si la patita B7 recive 5 volts,entonces en la patita A0 saldra 00011000

y nesesito que sea solo en A0 la salida por que despues esa informacion alguien mas la interptretara pero tiene que llegarle el byte entero en un solo canal me explico?
 
No mucho.

si la patita B0 recive 5 volts,entonces en la patita A0 saldra 00010001
(No puede salir en la A0 esos bits ya que es un sólo bit), la A0 como salida es 1 o un 0.

¿Me entiendes?


Saludo.
 
No mucho.

si la patita B0 recive 5 volts,entonces en la patita A0 saldra 00010001
(No puede salir en la A0 esos bits ya que es un sólo bit), la A0 como salida es 1 o un 0.

¿Me entiendes?


Saludo.
aaaaa y nu puede salir 0 luego 0 luego 0 luego 1 luego 0 luego 0 luego 0 luego 1?


tambien lei algo de TX o alg asi no s puede con eso?
 
Última edición:
Así si, me lo imaginaba.

¿A qué frecuencia quiere que salga así?
Te dejo claro uan cosa, a usar retardos en cada bits de salida.
Si se puede hacer lo que dices.
http://electronica-pic.blogspot.com.es/2012/02/retardos-para-pic12f-16f-y-18f.html

Un saludo.




y por ejemplo si conecto la salida A0 a un pic que lea el byte digamos en su puerto B0 lo va a recivir como 00010001? esque la idea es que por un solo cable se trasmita un byte jeje


que es eso de TX, ley que con eso se mandan datos o algo asi
 
Hola:

Necesitas un protocolo de comunicación aunque sea un estandar como el RS232 o el tuyo propio.

Un saludo.
 

Adjuntos

  • Area de practicas del Tema 8.pdf
    1.7 MB · Visitas: 53
Atrás
Arriba