mam na Vas dotaz ohledne USARTu. Mam 2 MCU (pic16f648a) a chtel bych se naucit synchronni seriovou komunikaci. Z datasheetu jsem vycetl nejaka moudra, ktera ale nejak nefunguji. Naprogramoval jsem zatim jen Mastera TX a po odeslani dat, ktere nacpu do registru TXREG by se melo vyvolat preruseni, ale nevyvola viz. kod.
Jeste dodam, ze ty piny co se pouzivaji na komunikaci nejsou zapojene. Slo mi jen o to otestovat, zda se ty data odeslou a vyhodi se preruseni.
administrator: přejmenováno z “2x PIC16F648A - USART” usart.txt (1.07 KB)
Vzhledem k tomu, ze jeste nikdo neodpovedel, tak bych to zkusil vzit z jineho konce a to tak, zda jsem podle datasheetu spravne pochopil jak se nastavi MCU do rezimu TX Synchronous Master Mode. Na strane 84 je napsane:
Takto jsem to pochopil, ze bych mel stavit registry, je to tak? No o podle posledniho 8. bodu staci do registru TXREG ulozit byte, ktery se asi automaticky odesle, ale v tomto si nejsem jisty.
Nee, ja vim co znamena to X. Jen se snazim umele vyvolat preruseni. Vim, ze flag musim nulovat, ale abych nemusel casovac zapinat, tak jsem to nastavil primo. Slo mi jen o to, aby ukazal, ze v pripade casovace preruseni nastavim a funguje, ale v pripade prenosu po seriove lince TXIF se nastavi zhdy kdyz se uvolni TXREG. Ale toto preruseni mi proste nefunguje.
Tak se mi to podarilo nakonec nejak rozchodit, ale tak nejak nevim jak a kdy mam presne pouzit ten TRMT. Ten by mel po zapsani dat do registru TXREG spadnout na 0 a pak po kompletnim odeslani dat nahodit na 1. Je to tak? Vyuzivate tento bit nejak?
Pozor na chybu v čipu. Jakakoliv zmena na TXEN a SPEN vynuluje TRISB:2 (coz je RX), ktery je potreba po teto instrukci znovu nastavit jako vstup. Teprve pote povolit USART jako takovy. Trapil jsem se tu s tim dobre dva dny… :-/
To sice jo, ale zrovna tohle je docela užitečná informace… já to třeba nevěděl, a teď zrovna se mi to bude brzo hodit. Ještě by mě zajímalo, jestli se ta chyba týká jen toho 16F648A, nebo všech PIC16F (nebo nedejbože všech PIC )…?