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