Atmega asm pelda kerestetik

VFX info at vfx.hu
Mon May 19 20:55:28 CEST 2003


Hali!


> Arra keresek meg valami peldat, hogyan a legcelszerubb
> megoldani az avr-nel a stringkereses tablabol-parameter visszaadas.
> (pld. soroson jonnek a karakterek, es folyamatosan figyelek
> tobb string-azonossagot egy tablaval (parancsfigyeles))


A teljesseg igenye nelkul:



CMDProcess:	;ldi	XL,1
		;out	RAMPZ,XL
		ldi	XL,Low(CMD_Data)
		ldi	XH,High(CMD_Data)

		ldi	ZL,Low(Tm_Commands*2)
		ldi	ZH,High(Tm_Commands*2)	;Parancstablazat cime
		ldi	R16,(Tm_Commands/32768)	;Low/High part of FLASH
		out	RAMPZ,R16

LeaderZero:	rcall	ESCSpace		;ez csak kiszuri a SPACE es TAB kodokat
		cpi	R16,LF
		breq	LeaderZero		;Line feed is kimarad

		sbiw	XL,1
		mov	R4,XL
		mov	R5,XH			;elmentjuk az elso ertekes karakter cimet


nextCMD:	elpm	R0,Z+
		tst	R0			;lehivjuk a tabla kovetkezo lelemet
		brne	VanMegCMD		;ha 0, akkor nincs ilyen parancs
		rjmp	CMDUnk			;ismeretlen parancs hibauzenet

VanMegCMD:	ld	R16,X+			;parancs kovetkezo karaktere
		cp	R16,R0
		brne	Nemstimmel
		elpm	R0,Z+			;kovetkezo karakter a sztringben
		tst	R0
		brne	VanMegCMD

						;PARANCS megvan!!!
		adiw	ZL,1			;tablaban a szoveg vegere ertunk
		andi	ZL,254			;tehat jo a parancs
		elpm	R0,Z+			;Z-t eltoljuk a vegrehajto rutin cimehez
		push	R0
		elpm
		push	R0			;STACKban vegrehajto rutin cime
		mov	ZL,XL
		mov	ZH,XH			;Z reg a parancs tobbi resze
		ret				;Ugras a vegrehajto reszre


Nemstimmel:	mov	XL,R4			;itt kell eldonteni miert nem stimmel
		mov	XH,R5			;pointer visszaallitasa

SrchStr:	elpm	R0,Z+			;megkeressuk a sztring veget
		tst	R0
		brne	SrchStr
		adiw	ZL,1
		andi	ZL,254			;csak a paros cim jo
		adiw	ZL,2			;kovetkezo sztring elejere allunk
		rjmp	nextCMD


CMDUnk:		rcall	CMDUnknown
		sec
		rjmp	CMDExit

SyntErr:	rcall	SyntaxErr
		sec
		rjmp	CMDExit

CMDOK:		rcall	CMDOkMsg
CMDDone:	clc
CMDExit:	clr	R16
		sts	CMD_Len,R16
		sts	CMD_Pos,R16		;alaphelyzet
		ret



;Terminal parancsok
; "parancs",0,address
; a tabla elso eleme mindig az ures parancs legyen ures sor+ENTER

Tm_Commands:	.db	CR,0,low(CMDOK),high(CMDOK)
		.db	"HELP",0,0,low(Tm_Help),high(Tm_Help)
		.db	"H",0,low(Tm_Help),high(Tm_Help)
		.db	"UPDATE",0,0,low(Tm_Upgrade),high(Tm_Upgrade)
		.db	"RP",0,0,low(TM_ReadPage),high(TM_ReadPage)
		.db	"RTCREAD",0,low(TM_ReadRTC),high(TM_ReadRTC)
		.db	"RTCWRITE",0,0,low(TM_WriteRTC),high(TM_WriteRTC)
		.db	"GT",0,0,low(TM_GetTime),high(TM_GetTime)
		.db	"GD",0,0,low(TM_GetDate),high(TM_GetDate)
		.db	"ST",0,0,low(Tm_SetTm),high(Tm_SetTm)
		.db	"SD",0,0,low(Tm_SetDt),high(Tm_SetDt)
		.db	"SEC",0,low(TM_SM_ReadPage0),high(TM_SM_ReadPage0)
 		.db	"SMID",0,0,low(TM_SM_ReadID),high(TM_SM_ReadID)
		.db	"LC",0,0,low(TM_LogicalCluster),high(TM_LogicalCluster)
		.db	"LS",0,0,low(TM_LogicalSector),high(TM_LogicalSector)
		.dw	0



UDV. VFX.
http://www.vfx.hu


More information about the Elektro mailing list