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