Debbo lavorare con degli atmega 8, programmando in assembler. Lavorando con degli st62, tempo fa, mi sono imbattuto in un problema (peraltro descritto nel manuale) sulla gestione delle porte.
Mi spiego: Negli st62, ci sono 3 registri per porta, direzione, opzioni e dati. Mentre i registri di direzione ed opzione, una volta programmati, mantengono il valore scritto, il registro dati, che influisce sui pin in ingresso consentendo di selezionare se pull-up o no, modificandone la configurazione ogniqualvolta si attiva o si disattiva un bit in uscita, in quanto in quel tipo di processori, il settaggio di un pin, viene eseguita tramite la rilettura dell'intero byte, per cui il valore dei pin in ingresso, vanno a sovrascrivere la programmazione stessa di quel registro. Il manuale, dice esplicitamente che in caso di uso misto dei pin di una porta, come ingresso ed uscita, di usare un registro immagine, in cui agire con il set/reset dei bit e di scrivere tutto in una volta il nuovo valore sul registro dati.
DO NOT USE READ-MODIFY-WRITE INSTRUC- TIONS (SET, RES, INC and DEC) ON PORT DATA REGISTERS IF ANY PIN OF THE PORT IS CONFIGURED IN INPUT MODE. These instructions make an implicit read and write back of the entire register. In port input mode, however, the data register reads from the input pins directly, and not from the data register latch- es. Since data register information in input mode is used to set the characteristics of the input pin (in- terrupt, pull-up, analog input), these may be unin- tentionally reprogrammed depending on the state of the input pins.
La mia domanda é la seguente: Dovendo usare delle porte con ingressi ed uscite in contemporanea, gestite a bit singolo (sia in ingresso che in uscita), esiste il problema di avere la riprogrammazione errata dei pin?