Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hasta ahora programaba el puerto serie por software, pero si me cambio a un micro pic con UART me pregunto si podré programarlo para coger datos digitales a 125khz.
Mi idea es usar uno que consuma poco, un 12F1823 o similar.
Saludos
Para leer y escribir por las dos uarts he hecho este trozo de código:
while(1)
{
if (!U1STAbits.UTXBF) { U1TXREG=bufferTX1[countTX1--]; }
if (!U2STAbits.UTXBF) { U2TXREG=bufferTX2[countTX2--]; }
if (U1STAbits.URXDA) { bufferRX1[countRX1++]=U1RXREG; }
if (U2STAbits.URXDA) { bufferRX2[countRX2++]=U2RXREG; }
...
}
La pregunta es si después de escribir he de resetear el flags: U1STAbits.UTXBF=1
Y si después de leer también: U1STAbits.URXDA=0
(y lo mismo para la segunda UART)
Para leer y escribir por las dos uarts he hecho este trozo de código:
while(1)
{
if (!U1STAbits.UTXBF) { U1TXREG=bufferTX1[countTX1--]; }
if (!U2STAbits.UTXBF) { U2TXREG=bufferTX2[countTX2--]; }
if (U1STAbits.URXDA) { bufferRX1[countRX1++]=U1RXREG; }
if (U2STAbits.URXDA) { bufferRX2[countRX2++]=U2RXREG; }
...
}
La pregunta es si después de escribir he de resetear el flags: U1STAbits.UTXBF=1
Y si después de leer también: U1STAbits.URXDA=0
(y lo mismo para la segunda UART)
Si te fijas en el "Family Reference Manual" del 30F, verás que el bit/flag UTxBF es "read only".
Puedes darle un vistazo al bootloader y a su código fuente para ver como hace las lecturas y escrituras:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en530200 " onclick="window.open(this.href);return false;
Vaya, ahora he visto que yo te hablo del dspic y tu usas un 16F1823. Pero eso no me cuadra con el código que has puesto, que vendría a ser de un dspic. En cambio en el 16F1823, usa unos registros diferentes y sólo tiene 1 puerto serie. Así que me quedo un poco descolocado.
Es correcto, estoy con el dspic30, perdona 🙂