Stránka 1 z 1

nefunkční program - záhadná chyba v kódu

Napsal: 26 bře 2008, 17:16
od kony2807
Dobrý den , prosím neukamenujte mě za to , že to bude určitě absolutní prkotina , ale nemůžu tomu už dvě hodiny přijít na kloub , v aplikaci to prostě neběží :( ...

podprogram Del - zpoždění cca 50ms .
podprogram INPORT - přečtení matice klávesnice (s obsluhou pos . reg. 4017)
podprogram send - měl by odeslat po UART 55 , poté data , a nakonec 105
zde mám podezření na čekání na odeslání (btfss TXSTA,1)
a v mainu smyčka s in_key slouží pro zablokování funkce v případě připojení pinu in_key na 0V .

Prosím o pomoc a zárověň o to , aby jse mě neukamenovali :) .

Napsal: 26 bře 2008, 17:37
od ZdenekHQ
Buď klidný, tady se kamení háže po úplně jiných "expertech".

Napsal: 26 bře 2008, 18:01
od mikollar
jednu chybicku mas tu LIST P=16F672A, R=DEC , este ide prezriet program dalej

Napsal: 26 bře 2008, 18:25
od mikollar
data ti to odosiela spravne?

Napsal: 26 bře 2008, 20:44
od mikollar
jednu chybicku mas tu LIST P=16F672A, R=DEC , este ide prezriet program dalej

Napsal: 26 bře 2008, 21:53
od ViPali
V časti delay50000 máš 0x0AD, je to OK, ale asi by stačilo 0xAD.
V časti send máš správne prepínanie bankov?

Napsal: 26 bře 2008, 21:56
od mikollar
vidis tie banky ma nenapadli, ak sa ti nechce hladat co je kde, pred pouzitim registra zapises BANKSEL meno_registra a kompilator uz nastavi prislusnu banku

Napsal: 27 bře 2008, 11:34
od Chenzee
USART jsem ještě nepoužíval ale jak je to s přerušením? Nemůže odtud vzniknout ztracení programu? :?: :idea:

Napsal: 27 bře 2008, 13:05
od mihal
Ono zalezi na tom ako to mas nastavene, moznosti PIC16 dobre nepoznam ale u HC08 alebo MSP430 si mozes nastavit od uartu preruseni niekolko, podla toho co chces konkretne odchytit. Obecne sa uart riesi tak, ze si nastavis prerusenie od prijateho bytu. Ak ti vysielanie generuje echo - tak mas idealny stav a podla bytu v prijimacom bufri zistis ci si prijal alebo vyslal. Do prerusenia v prijme napises plnenie prijimacieho bufra, pri vysielani odsypanie vysielacieho bufra. Osetrit treba aj (ak pic16 ma) indikaciu chyby.

Napsal: 27 bře 2008, 13:40
od ZdenekHQ
Jednak by každej procesor měl mít po resetu všechny přerušení zakázaný, jednak by se do míst, kam skáče při obsluze přerušení neměl cpát hlavní program (což s gustem spousta lidí dělá), ale pouze skoky na obsluhu přerušení či prostý návrat z přerušení. To pro případ, že si něco omylem povolíte, ale nevyužíváte.

Dál se při obsluze přerušení musí uložit všechny registry, který přerušení přepisuje, a potom je zase obnovit.

Pro podprogramy je dobré používat jiné banky registrů než pro hlavní program (záleží na tom, co procesor umí).

Dodržením těchto zásad si ušetříte spoustu času :)

Napsal: 27 bře 2008, 17:29
od ViPali
Priznávam, že nenachádzam problém, snáď by to malo chodiť. Ešte keby si napísal frekvenciu oscilátoru a baudy. A najlepšie by bolo, keby si to okomentoval, možno by tu niekoho niečo trafilo medzi oči.

Napsal: 27 bře 2008, 18:53
od nekmil
Jenom si trochu "rýpnu", to je přímo ukázkový příklad jak nemá vypadat program v assembleru, který sám o sobě je značně nepřehledný.
Je třeba používat komentáře, čím víc, tím líp.
Pokud takový program třeba 1/2 roku nevidíš a pak se k němu vrátíš, že tam uděláš nějakou změnu, sám se pak divíš co jsi to vymyslel. :)