Stránka 1 z 1
Nastavení rychlosti komunikace u AT89Cx051 / AT89S8252
Napsal: 08 led 2008, 09:23
od Ludan
Hezký den všem...
nastavení komunikace (standardní 9600,8,N,1) není problém, ale narazil jsem na problém nastavit u Atmelu komunikační protokol na 4800,8,E,2, tedy sudá parita a 2 stop bity.
Můžete mi někdo poradit, jak v ASM nastavím tento typ komunikace ? Už jsem prolezl kde co, mám problém s paritou (soft v PC mi ukazuje, že pořád komunikuju BEZ parity) a pak nevím, jak je to s tím stopbitem, aby tam byly 2.
Dík za každý nakopnutí.
Bye Luďan
Napsal: 08 led 2008, 10:54
od ZdenekHQ
Musíš nastavit komunikaci jako 9-bitovou a paritu (9.bit) si dopočítat přes acc.
2 stop-bity nasimulujuješ vložením pauzy odpovídající délce jednoho bitu mezi jednotlivý vysílaný "slova" (v podstatě ve chvíli, jamkmile ti přijde potvrzení o odeslání).
Napsal: 08 led 2008, 22:10
od Ludan
Tak jsem to zatim sbastlil takto:
Kód: Vybrat vše
DSEG AT 30H
BUFFER: DS 17 ; buffer pro odesilana data
CSEG
IDENT EQU PSW.5 ; priznak odesilani dat do PC
PARITA EQU PSW.0 ; paritni priznak
atd...
; *****************************
; ** Obsluha preruseni od SERIAL **
; *****************************
SERIAL: JB TI, ODESLANO ; odeslani znaku -> skok
CLR RI
RETI
ODESLANO: CLR TI
JNB IDENT, END_TX ; po odeslani vsech znaku skok
MOV A, @R0 ; do ACC znak pro odeslani
JB PARITA, SET_PARITY ; nastaveni/smazani bitu parity
CLR TB8 ; 9.odesilany bit=0
AJMP ODESLI_ZNAK
SET_PARITY: SETB TB8 ; 9.odesilany bit=1
ODESLI_ZNAK:MOV SBUF, A ; odeslani na seriovy port
INC R0 ; inkrementace ukazatele na znak
DEC R7 ; dekrementace poctu odeslanych znaku
MOV A, R7 ; pocet znaku k odeslani do ACC
JNZ END_TX ; ACC<>0 -> na END_TX
CLR IDENT ; vsechny znaky odeslany, vymaz priznaku
END_TX: RETI ; navrat z preruseni
........ inicializace je provedena takto:
MOV TH1, #243 ; konstanta pro casovac 1
MOV TH0, #HIGH HODNOTA ; nastaveni hodnoty pro casovac 0
MOV TL0, #LOW HODNOTA
MOV TMOD, #00100001B ; 8bitovy citac/casovac 1 s fci RELOAD a 16bitovy citac/casovac 0
MOV SCON, #11000000B ; 9bitovy asynchronni prenos
MOV PCON, #00000000B ; kmitocet serioveho kanalu 4800 Bd
SETB ET0 ; povoleni preruseni od casovace 0
SETB ES ; povoleni preruseni od serioveho kanalu
SETB EA ; povoleni prijmu preruseni
SETB TR0 ; zapnuti casovace 0
SETB TR1 ; zapnuti casovace 1
atd...
muzes mi please poradit, jak udelam ty 2 stopbity ?
Jinak softik uz hlasi, ze je to suda parita, takze super, zas jsem o neco chytrejsi...
Bye Ludan
Napsal: 09 led 2008, 10:28
od ZdenekHQ
Za
ODESLANO: CLR TI
dej čekací smyčku 0.2ms pro rychlost 4800, teprve potom pokračuj v programu. Natáhneš tím stop-bit na delší dobu a v podstatě nasimuluješ dva.