PIC16F628A a RS 232

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
SJames
Příspěvky: 23
Registrován: 06 pro 2004, 00:00
Bydliště: Přerov
Kontaktovat uživatele:

PIC16F628A a RS 232

#1 Příspěvek od SJames »

Ahoj :)

našel jsem tu sice několik témat, která se týkají komunikace po RS232, nicméně mi to moc nepomohlo.

Problém je v tom, že se mi nedaří rozchodit komunikaci mezi PICem a PC pomocí RS232. Nastavoval jsem vše podle datasheetu, tedy Baud Rate Generator, RCSTA i TXSTA registry. Nicméně, pokud v programu testuji bit RCIF (který má signalizovat přijetí "zprávy") neustále se jeví jako jednička, tedy přijato - i když nic přijmout nemohl.

Přikládám zdrojový kód, který jsem napsal, snad napoví víc :) Program by měl čekat na přijetí zprávy "65" (desítkových, tedy podle ASCII kódu písmeno A) a poté bliknout několikrát LEDkou (je to zatím jen test spojení). Tuto zprávu posílám pomocí programu napsaného ve Visual Bacisu. Signály přes RS232 k procesoru přicházejí (změřeno).

Předpokládám, že dělám nějakou hloupou chybu, ale nemůžu ji najít :/ Budu moc rád, když mi někdo zkušenější poradí :) Díky :)
Přílohy
02 - Usart.txt
Snažil jsem se to co nejsrozumitelněji okomentovat :) LEDka, která má blikat je připojena k Portu A, pin 2 :)
(3.58 KiB) Staženo 186 x
Uživatelský avatar
kony2807
Příspěvky: 305
Registrován: 29 črc 2007, 00:00
Bydliště: Ostrava

#2 Příspěvek od kony2807 »

Pokud nepoužíváš přerušení , asi by si je měl raději zakázat - BCF INTCON,GIE .
Ale v budoucnu bude vhodnější příjem ošetřit rozhodně v přerušení a né v hlavním programu testování flagu - mohly by ti utíkat data zatím co je program jinde .

Mimochodem , proč definuješ adresy registrů pomocí EQU ? Stačí jejich názvy psát tiskacím a v hlavičce propojit kód s INC souborem příslušného procu.

Kód: Vybrat vše

include "p16f628.inc"

Druhé mimochodem , proč se po prvním přijetí znaku program vrací až na "init" a né na "start" .

Třetí : jak přesně je RS-232 připojen k procesoru ? Máš tam převodník úrovní (MAX232, ...) ?

Za pár minut doplním výsledek ze simulátoru .
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Uživatelský avatar
SJames
Příspěvky: 23
Registrován: 06 pro 2004, 00:00
Bydliště: Přerov
Kontaktovat uživatele:

#3 Příspěvek od SJames »

Připojení PICu k RS232 je trošku taková divočina :) Používám převodník USB/RS232 a z tohohle COM podle výrobce lezou signály 0V a 5V - to si změřím ještě v pondělí na osciloskopu :)

Určitě přejdu na modernější způsob pojmenování registrů... tohle je starý zvyk ještě ze školy :)
Uživatelský avatar
kony2807
Příspěvky: 305
Registrován: 29 črc 2007, 00:00
Bydliště: Ostrava

#4 Příspěvek od kony2807 »

http://doveda.byl.cz/programy/pic_rs232.zip
Toto asi bude nejméně bolestná cesta k cíli ... Jinak celý tento web dopručuji prostudovat .
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Uživatelský avatar
SJames
Příspěvky: 23
Registrován: 06 pro 2004, 00:00
Bydliště: Přerov
Kontaktovat uživatele:

#5 Příspěvek od SJames »

Díky, prostuduju to :) A snad to pomůže :)
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#6 Příspěvek od procesor »

K tomu RCIF....v PIR1 sa nedá urobiť..... bcf pir1,5. Ten bit sa dá iba čítať
Bit RCIF sa nuluje prečítaním dat z RCREG...čiže instrukciou movf RCREG,0.
Po resete je GIE=0, takisto aj RCIE=0...nemusia sa nulovať.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“