PIC16F648A neposílá a nepřijímá přes UART, ASM bez přerušení

zdravím, sem s picy začátečník, tak bych poprosil o radu, proč mi to nechce posílat a přijímat přes UART, nechci to řešit přerušením, protože to používám v rozsáhlejším programu a tam by mi přerušení vadilo, díky za radu. posílám .asm, proměnný mám vytáhlý z jinýho programu, toto je jen testovací část

:arrow_right: administrator: přejmenováno z “neposílá a nepřijímá přes UART”
ctecka.asm (6.16 KB)

V takomto dlhom kode sa asi nebude chciet kazdy matlat. Ak si chces zvysit pravdepodobnost, ze ti niekto poradi s UARTom, tak ukaz minimalny program, ktory ukazuje tvoj problem s UARTom, lebo v takomto dlhom programe tych chyb moze byt vela.
Programu treba pisat “zospodu”, teda zacinas low level vecami, ako je obsluha periferii, az potom ides na spracovanie dat. Tym sa mozes vyhnut podobnycm chybam.

tak jsem se to snazil zjednodusit na minimum, je tam macro na odeslani a macro na prijem a nastaveni vysilani, plus nejaka prodleva a rozsviceni diod, díky předem za radu
ctecka2.asm (4 KB)
ctecka2.asm (4 KB)

Předělej si macra na CALL a RETURN, až je odzkoušiš, tak z nich udelej macra.

No asi tak ako pisal Honza3.
Rob to po kuskoch, dom sa tiez nestavia od strechy. Najprv si urob podporigram na odosielanie znaku z USART-u a otestuj ho. Dokolecka vysielaj nejaky znak, povedzme ‘A’, na vystup si pripoj osciloskop alebo MAX232 a to potom k PC a sleduj to na nejakom terminali, ci to funguje. Ked to funguje, tak skus urobit prijem, teda to co prijmes posles naspat atd… ten kod co si poslal je stale preplacany roznymi zbytocnostami.
Demonstracny UART kod v asm sa da napisat na 20 riadkov. Na forach malokto bude lustit dlhsie programy.

mám to vytáhlé z většího programu, kde mi odesílání chodilo, ale nešel mi příjem, tak sem do hodil do tohoto menšího abych to nějak rozchodil a nejede mi už ani odesílání, což jsem zkoušel odchytem na PC, jde mi spíš o to jestli nemám chybu v nastavení registrů UARTU a vstupů/výstupů a jestli správně testuju příznaky naplnění/vyprázdnění bufferů?

asi je spravny cas prejst na C-ko :smiley:
P.S. nenasam hexa cisla pre konfigurovanie registrov… preco nepouzivas BIN…skor je vidno co ktory byt nastavuje v registri, ked uz ich nenastavujes po jednom.

Zrušil bych vsechny BCF STATUS, RP1 BSF STATUS, RP0 a nahradil to banksel.
INIT procesoru bych udělal pořádne, máš tam 2x nastavení TRISx. Celý to máš divný. Macra bych přepsal na CALL a RETURN, abych měl jistotu, že ty macra fungují. Podle datasheetu bych si nastavil rychlost dle krystalu.

Že je někdo “línej” si program zkontrolovat a napsat pořádně sám ještě není důvod se otravovat s C .

S tímhle plně souhlasím. U nastavení registrů určitě