Holas de nuevo, aqui estoy comiendome la cabesa con los simuladores
si no es uno es otro
os hago un resumen de lo que hace el programa:(vaya ser que sea eso)
primero pone los pines 0 1 2 de PORTD a cero, asi elige el canal 1 del multiplexador ,
seguido lee canal 1 (AN0) hace la conversion A/D, copia ADRESH en GUARDA,
lo divide entre dos,y lo resta con el registro del potenciometro si no da cero salta a copiar el nuevo dato en el reg POTE1 y a la rutina ENVIA que manda los datos por la usart, si fueron iguales cambia al AN1 repite con POTE2asi repite hasta que completa 32 POTES cambiando entre los ocho canales de los multiplexores y los cuatro A/D AN0/1/2/4 y vuelve a empezar. Todo seria muy bonito si no fuese por que en el simulador se queda pillao con poner un valor diferente a cero , parece que no pone a uno el bit Z de STATUS si la resta que hace entre GUARDA y POTEX no es entre 0 y 0
eso en proteus y en picsimulator se queda dando vueltas en el envio de la usart cosa que en isis no sucede(estoy que me tiro de los pelos) he repasado el codigo un millon de veces y como en el simulador funcionan unas cosas y en otras no os voy a poner ese pedacito de programa que os he descrito , por si vosotros lo hariais de otra forma
bcf STATUS,5
movlw b'00000000'
movwf PORTD clrf CONTROLADOR ;limpia el registro del numero del controlador 0-32
movlw b'00000101'
movwf ADCON0
dato1 btfsc ADCON0,2 ;bucle que testea hasta que termina la conversion AD
goto dato1
movf ADRESH,w
movwf GUARDA RRF GUARDA,F
MOVF GUARDA,W
subwf POTE1,0 ;aqui en proteus si no es 0-0 no da cero nunca la resta, rarisimo con cualquier valor siempre salta a enviar cosa que no pasa en picsimulator movf GUARDA,w ;esta parte la pondria dentro de la rutina envio pero ya la he probado aqui y alli. Y da igual el prog hace lo mismo
movwf POTE1 ;si fue igual deja lo mismo y si no otro btfss STATUS,2 ;si esta a uno el resultado fue igual que el anterior
call envio ;si es diferente salta a enviar los datos por la usart y pone a cero el bit Z por si aca no lo hacia retfie ;y va a por el pote2 cambiando el canal analogico a convertir cuando a leido los cuatro cambia la salida de portc a 001 y vuelve a convertir el canal uno pote5 canal1 pote6.......hasta 32
bcf STATUS,5
movlw b'00000001'
movwf PORTD
incf CONTROLADOR..........
etc etc etc...............POTE5--------------------------------------------------------------------------
envio bsf STATUS, 5 ;pagina 1
bsf TXSTA,5 ;activo el emisor
bcf STATUS, 5 ;pagina 0
bcf STATUS,2
bcf INTCON,7 ;deshabilita las interrupciones
movf GUARDA,w ;señal de timming clock
movwf TXREG ; Movemos lo que queremos transmitir de w a TXREG
bsf STATUS, 5 ;pagina 1
FIN btfss TXSTA, 1 ; Compruebo si el bit TMRT del registro esta
; a '1' o a '0'.
; Si esta a '0' es que esta lleno TMRT y no
; ha terminado de transmitir,
; para ello TRMT tiene que estar a 1, hasta
goto FIN ; entonces esperamos.
aqui se queda pillao en picsimuator volviendo a FIN continuamente bsf INTCON,7 ;activa las interrupciones
goto salida
he copiado las rutinas una detras de otra, quitando las instrucciones de CALL para que no pierda leerlas aun asi adjunto el asm por si pueden simularlo ustedes y aclarame que estoy haciendo mal
gracias y un saludo
a ver si tengo un rato y voy a la tienda por material pa clavarle unos voltios al pic y ver que pasa