TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: black_flowers en 25 de Febrero de 2007, 17:54:09
-
hola estoy programando pics pero todavía tengo algunas dudas básicas acerca de ellos, por ejemplo:
¿qué sucede si intento hacer una lectura en un puerto que está configurado como salida? ¿se estropea?
sl2
-
No se estropea.
Lo que realmente estas haciendo es leer la posicion de memoria asignado para el puerto. Y si el puerto o pin fue configurado como salida lo que obtendras es el ultimo valor enviado por el pin o puerto.
saludos.
-
Lo que realmente estas haciendo es leer la posicion de memoria asignado para el puerto. Y si el puerto o pin fue configurado como salida lo que obtendras es el ultimo valor enviado por el pin o puerto.
IIIC esto no siempre es así. Digamos que "depende" de que pic y de que registro estemos hablando.
Si uno lee los registros PORTx, no se lees la posición de memoria asignada al puerto, lees el hardware. Si lees un LATx entonces si lees la memoria.
black_flowers si están como salida no los dañarás pero si la tensión de los mismos no está estabilizada (no es un 0 ni un 1) por ser justo durante una transición puede que varíen su estado cuando lo vuelvas a escribir si es que esto se da en poco tiempo tu hardware está cargado y si funciona a muchos MHz.
Además esto es cierto para una 'escritura' . Si haces un bsf PORTx,3 , también se hace una lectura/modificación/escritura con lo cual estas todo el tiempo leyendo el hardware y es ahí donde hay que tener cuidado.
Saludos
-
Hola!
Si la memoria no me falla, algunos lenguajes de alto nivel configuran el pin como entrada automaticamente al leerlo.....asegurate que no pase eso.
Saludos! :mrgreen:
-
Gracias por la aclaración maunix.
-
hola
¿ y no funcionaria algo de este estilo: a = portb AND 0xFF ?
no se si me explico...
-
hola
¿ y no funcionaria algo de este estilo: a = portb AND 0xFF ?
no se si me explico...
Al incluir PORTB en la igualación, el compilador de seguro traduce eso a una lectura del puerto (en hardware).
Saludos
-
Hola!
Si la memoria no me falla, algunos lenguajes de alto nivel configuran el pin como entrada automaticamente al leerlo.....asegurate que no pase eso.
Saludos! :mrgreen:
Efectivamente, CCS hace esto si está configurado en modo STANDARD_IO, que es el modo por defecto. Yo siempre suelo poner FAST_IO para que no me haga cosas raritas.
-
Hola
Hay un "truco" que quizas pueda salvar los problemas:
Si el puerto esta programado como salidas es porque se usa para "escribir" en el, pues bien, creemos un espejo del puerto en cualquier posicion de memoria que quede libre, así todo dato que vaya a escribirse en el puerto lo copiamos en el espejo, y cuando queramos leer el puerto leemos en su lugar su espejo
-
Bueno fartet. Acabas de crear un LATx por tu cuenta :D
-
Hola
Hay un "truco" que quizas pueda salvar los problemas:
Si el puerto esta programado como salidas es porque se usa para "escribir" en el, pues bien, creemos un espejo del puerto en cualquier posicion de memoria que quede libre, así todo dato que vaya a escribirse en el puerto lo copiamos en el espejo, y cuando queramos leer el puerto leemos en su lugar su espejo
A esto se le llama "shadow register" o registro sombra.
Es lo que "se debe" hacer en los 16F cuando se trabaja con puertos para evitar todo tipo de problemas. . Remarco por si alguno dice que le anda bien sin usar los registros shadow, hay casos especiales en los que no.
Si el registro está como salida y lo cambiamos muy rápido, entonces el estado del registro de salida no será el esperamos por más que supongamos que la lógica dice que debiera ser así. En ese caso el registro shadow tendrá el valor "que debería tener" pero el puerto pudiera tener otro.
Ver este link: http://www.todopic.com.ar/foros/index.php?topic=11553.msg64901#msg64901
Saludos