Estoy aprendiendo a programar un PIC10F220. Estoy usando un programador PICkit 3 y ejecutando experimentos físicos, así como también ejecutando el simulador en MPLABX.
Una cosa que quiero hacer es establecer el nivel adecuado para un cierre de salida de puerto antes de que el triple estado (TRIS) cambie al modo de salida. Este diagrama sugiere que debería ser posible, y que las rutas de entrada y salida son separables:
Heescritoestetrozodemontaje:
; !GPWU=0: enable wakeup on pin change
; !GPPU=0: enable weak pullup on GP0,1,3
; T0CS=0: timer 0 internally clocked
; T0SE=0: ignored
; PSA=0: prescaler assigned to timer 0
; PS=111: 1:256 prescaler
movlw b'111'
option
; ANS1=0: GP1 digital
; ANS0=1: GP0 analog in
; CHS=00: channel GP0/AN0
; GO=0: not converting yet
; ADON=1: ADC is enabled
movlw b'01000001'
movwf ADCON0
; We can write to the GP2 latch even if it's still in input mode;
; this ensures no glitch between clearing TRIS and sending the GP2 output.
; (but this doesn't work in the simulator)
btfsc GPIO, GP1 ; Check GP1 status (negative logic)
goto gp1_off
gp1_on: ; if it's clear, port 1 is on
bsf GPIO, GP2 ; turn GP2 on
goto gp2_done
gp1_off: ; if it's set, port 1 is off
bcf GPIO, GP2 ; turn GP2 off
gp2_done:
movlw b'1011' ; only GP2 output, others input
tris GPIO
Como en los comentarios, en la vida real esto funciona, pero en el simulador de MPLABX los intentos de modificación a GP2 no tienen efecto. ¿Por qué sería esto? ¿Han fallado en modelar el latch de escritura como funcional incluso cuando el bit TRIS correspondiente todavía está alto (entrada)?
Esto parece pertinente:
PUERTOS DE E / S BIDIRECCIONALES
Algunas instrucciones operan internamente según lo leído seguido por operaciones de escritura. Las instrucciones BCF y BSF, para Por ejemplo, lea todo el puerto en la CPU, ejecute el Operación de bit y reescribir el resultado. La precaución debe ser utilizado cuando estas instrucciones se aplican a un puerto donde se usan uno o más pines como entradas / salidas. por ejemplo, una operación BSF en el bit 2 de GPIO causará los ocho bits de GPIO que se leerán en la CPU, el bit 2 a establecer y el valor GPIO que se escribirá en la salida pestillos Si se utiliza otro bit de GPIO como bidireccional. Pin de E / S (por ejemplo, bit 0) y se define como una entrada en este tiempo, la señal de entrada presente en el pin mismo sería Lea en la CPU y vuelva a escribir en el cierre de datos de este Pin particular, sobrescribiendo el contenido anterior. Tan largo como el pin permanece en el modo de entrada, no se produce ningún problema. Sin embargo, si el bit 0 se cambia al modo de salida más adelante, el contenido del cierre de datos ahora puede ser desconocido.