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.