TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: js401721@gmail.com en 18 de Febrero de 2020, 14:38:26
-
Buen dia amigos soy nuevo en foro, quisiera hacerles una consulta, resulta que estoy realizando un proyecto en mikrobasic para el corrimiento de led usando un pic 16f628a y el registro de desplazamiento 74hc164, el problema es que no encuentro como comparar 2 bytes y que el resultado de cada comparacion con la mascara 0 o 1 salga por una salida del puertoX, he estado investigando y encontre una instruccion "output bit" en leguaje C, lo que entendi es que esta instruccion funciona como una compuerta and y el resultado 0 o 1 lo manda al puerto, la pregunta es como migrar esta intruccion del C. A Mikrobasic, gracias.
-
Creo entender que te refieres a lenguaje C de CCS, correcto?
Si es así, entonces output_bit(pin,value) es una función de CCS que no pertenece al ansi C.
Esa función simplemente lo que hace es colocar en lato o en bajo el pin de cualquier puerto. POr lo tanto una equivalencia en MikroC podría ser simplemente accesando al nombre del bit en particular.
Supongamos que el pin en cuestion es el pin 0 del puerto B.
Entonces en CCS sería:
output_bit(PIN_B0,0); //Coloca un 0 en el pin 0 del puerto B
output_bit(PIN_B0,1); //Coloca un 1 en el pin 0 del puerto B
En MikroC sería:
RB0_bit = 0; //Coloca un 0 en el pin 0 del puerto B
RBO_bit = 1; //Coloca un 1 en el pin 0 del pierto B
Así de simple.
elreypic.
-
Gracias, siendo asi es corecto esto ya que lo que busco es hacer una mascara y que el resultado de la operacion and salga por el puerto rb0, lo voy a poner en basic;
Dato1=%01010101
Const mascara as byte (8)=(1,2,4,8,16,32,64,128)
For i=0 to 7
Portb.0 = (dato1 AND mascara <<i)
Next i
End
///\\\\ la idea es que el valor de dato1 salga de forma serial por el puero rb0 y lo represente de forma paralela con el registro de desplazamiento 74hc164.
-
Eso que intentas hacer no es posible de esa manera, porque lo que estás haciendo es asignar completamente un byte (8 bits) a un solo bit.
Creo que sería mucho más fácil si solo realizas el corrimiento a la izquierda o derecha dependiedno de cual bit necesites sacar primero.
A la ziquierda si quieres el el MSB salga primero o a la derecha si quieres que el LSB salga primero.
Según tu ejemplo pareciera que quieres sacar primeramente el MSB, por lo que pudieras hacer esto:
Dato1 = %01010101
Dato1 = Dato1<<1
If STATUS.0 = 0 Then 'Shifted bit is in Carry Bit of Status Register
Portb.0 = 1 'Put bit data on output
Else
Portb.0 = 0
End If
elreypic.