Obsluha UART 51?
Miroslav Sinko
sinkomiro
Středa Březen 17 14:54:04 CET 2004
Ja som si kedysi napisal univerzalnu rutinu obsluhy seriveho portu.
Vysielanie pracuje tak, ze znaky su vysielane z buffra v iRAM alebo
ROM.
V hlavnom programe nastavim zaciatok buffra a dlzku, vyvolam prerusenie
a nestaram sa, cely buffer sa vysle v preruseniach "na pozadi". Jedina
situacia, ked hlavny program caka v slucke, je pripad, ze da povel na
vyslatie dalsej spravy, kym sa predchadzajuca este nedovysielala.
V jednotlivych projektoch si z tohto kodu vyberam to, co prave
potrebujem,
pripadne ho kopirujem cely ako je (to ked mam dost miesta v ROM :-)
;interna RAM
TXTPL EQU 49H ;pocet vysielanych znakov L
TXTPH EQU 4AH ;H
TXTLO EQU 4BH ;ukazovatel do spravy (pri RAM je iba tento,
pri ROM spolu s TXTHI)
TXTHI EQU 4CH ;ukazovatel do spravy (len pri ROM)
;priznaky
;BTI.2 bezi vysielanie spravy RS232
;BTI.3 sprava je v RAM
;BTI.4 uvolnene vypisy
BTI EQU 22H
;obsluha prerusenia serioveho portu
I_TIRI: PUSH PSW
PUSH ACC
JB TI,VON
;prijem znaku
;telo
CLR RI
SEE: POP ACC
POP PSW
RETI
VON: PUSH DPH
PUSH DPL
;vyslanie znaku z adr.
;v TXTLO,HI++ a TXTPOC--
MOV A,TXTPL
ORL A,TXTPH
JZ ENDTXT
DEC TXTPL
MOV A,TXTPL
CJNE A,#255,VO4
DEC TXTPH
VO4: JB BTI.3,VO2
;z ROM
MOV DPL,TXTLO
MOV DPH,TXTHI
CLR A
MOVC A,@A+DPTR
INC DPTR
MOV TXTLO,DPL
MOV TXTHI,DPH
AJMP VO3
;z RAM
VO2: PUSH 0
MOV R0,TXTLO
MOV A,@R0
INC TXTLO
POP 0
;
VO3: MOV SBUF,A
AJMP END_TI
ENDTXT: CLR BTI.2
END_TI: POP DPL
POP DPH
CLR TI
AJMP SEE
;koniec obsluhy prerusenia
Pomocne rutiny pre zaciatok vysielania volane
z hlavneho programu:
;vypis spravy z ROM
;vstup: DPTR ukazuje na MSG do ROM, MSG je zakoncena 0
OUTROM: JNB BTI.4,OR4
OR3: JB BTI.2,OR3
MOV TXTLO,DPL
MOV TXTHI,DPH
MOV TXTPL,#0 ;vypocet dlzky
MOV TXTPH,#0
OR1: CLR A
MOVC A,@A+DPTR
JZ OR2
INC TXTPL
MOV A,TXTPL
JNZ OR6
INC TXTPH
OR6: INC DPTR
AJMP OR1
OR2: CLR BTI.3
SETB BTI.2
SETB TI ;zacni
OR4: RET
;vypis spravy z RAM
;vstup: R0 ukazuje na MSG do RAM, R7=dlzka
OUTRAM: JNB BTI.4,OR4
OR5: JB BTI.2,OR5
MOV TXTPL,R7
MOV TXTPH,#0
MOV TXTLO,R0
SETB BTI.3
SETB BTI.2
SETB TI ;zacni
RET
miro
__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
Další informace o konferenci Hw-list