Aprendí un concepto que al cambiar el valor de bit del pin de E/S de un PIC, la PC primero leería el valor del puerto de E/S, cambiaría el valor y escribiría el valor cambiado en el registro.
Validé este argumento usando este circuito:
El código que escribí en mikroC para PIC:
void main() {
TRISB = 0;
PORTB.F0 = 1;
PORTB.F1 = 1;
while(1) ;
}
Aprendí que debido a que el LED D1 solo necesita 0.7 V, el voltaje de RB0 es de aproximadamente 0.7V. Cuando mi programa establece RB1 en 1, el PIC primero lee el valor del puerto B, obtiene 0000 0000. Y dado que RB0 está en 0.7V, se interpreta como bajo. Entonces después de cambiar el valor (establecer puerto B como 0000 0010), solo se enciende D2.
Así que conecté resistencias entre el LED y los pines de E/S, y cambié el código:
void main() {
TRISB = 0;
PORTB.F0 = 1;
Delay_ms(500);
PORTB.F1 = 1;
while(1) ;
}
Al comienzo de la simulación, el circuito actuaba como yo esperaba, el voltaje de RB0 era de 4.5V.
Sin embargo, después del retraso de 500ms, solo se enciende D2. Me parece extraño, pensé que D1 y D2 estarían encendidos al mismo tiempo. (La lectura debería obtener 0000 0001, entonces después de cambiar, el puerto B debería ser 0000 0011)