Configurar un pin PIC para entrada y salida

4

Estoy trabajando en un proyecto que utiliza un mcu PIC24FJ64GA002. Estoy trabajando en una función de comunicación en serie de bit banged que usará un cable para enviar datos y luego cambiar al modo de recepción para recibir datos en el mismo pin. Se utilizará un pin separado para el reloj, que siempre será controlado por una placa diferente (siempre una entrada). Me pregunto si hay una manera de configurar el pin para la operación de colector abierto para que pueda usarse como entrada y salida o ¿tengo que cambiar la configuración del pin cada vez que voy de la lectura a la escritura?

    
pregunta PICyourBrain

2 respuestas

6

Cambia la configuración del pin cada vez. Es el registro TRIS que controla si es una entrada (1) o una salida (0). Y, cuando cambia de dirección, tiene que esperar un momento (verifique la hoja de datos) como un ciclo o dos antes de usar ese pin. una pareja Nop (); lo hará bien.

Y, asegúrese de escribir en el registro LAT y leer del registro R

.

por ejemplo para el puerto D, pin 0.

//output
_TRISD0 = 0;
Nop();
Nop();
_LATD0 = 1;
_LATD0 = 0;


//input
_TRISD0 = 1;
Nop();
Nop();
int i = _RD0;
    
respondido por el ArielP
3

Si desea simular un colector abierto, escriba un cero en el registro de retención. Luego haces el resto con el registro TRIS. Cuando un cero va al bit TRIS, el bit se convierte en una salida y la línea se reduce. Luego, si escribe un uno en el bit TRIS, la línea se convertirá en una entrada y el pull up hará que la línea se eleve a menos que un dispositivo externo lo esté bajando. La línea también estará en un estado de entrada en ese momento. Puede leer el puerto en cualquier momento y mostrará el estado de bus adecuado porque cuando el bit TRIS es 0, el bus será bajo y eso es lo que se leerá y si el bit TRIS es alto, será una entrada y luego lo que sea en el autobús se leerá también.

Algunos pines también tienen la capacidad de habilitar un pullup débil en ellos y también puedes habilitar la interrupción de cambio de pines en algunos de los pines.

//init
_LATA0 = 0;


//drive low
_TRISA0 = 0;

// let pull up bring pin high.
_TRISA0 = 1;

// read bit
in = _RA0;
    
respondido por el Rex Logan

Lea otras preguntas en las etiquetas