Ciao a tutti, dopo aver terminato con i vari problemi hardware relativi alla programmazione del PIC16F84A, volevo chiedere un parere sulla parte software. Devo pilotare 4 display a 7 segmenti con un numero che prendo da un convertitore A/D. Per farlo ho usato tutti i pin di PORTB. I primi 4 (Rb0-Rb3) sono per il valore da visualizzare e gli altri 4 sono per la selezione del display. Ho usato un decoder per display esterno per risparmiare linee di I/O. Questa è la funzione che ho scritto per far visualizzare un numero sul display. Nei commenti ho scritto decine, unità ecc. perchè sul mio display le prime due cifre a sx le considero parte intera e le altre parte decimale. La funzione verrà sempre chiamata con un numero a 4 cifre intero. Ho provato a chiamarla dal main in questo modo: visualizza(1234); ed ha funzionato ma, chiamandola con questo: visualizza(2609); già non và più... mi viene fuori un altro numero... Secondo voi sbaglio nel ragionamento? Come devo fare?
Ecco la funzione:
void visualizza(int num) { char a, i=0, dis=0b11110000, resto; //decine a = num / 1000; resto = num % 1000; PORTB = a; PORTB = PORTB | (dis - (16