Sida 1 av 1

Basic-->ASM

Postat: 20 februari 2007, 14:06:49
av squiz3r
Hej, jag har en liten snutt med pbasic kod som jag vil göra om till asm för en PIC12F629.

Kod: Markera allt


variabel_1    var    word  'lägg in en variabel

before_main:
  variabel_1 = 100

main:
  high 0  'sätt port 0 hög
  pause variabel_1    'pausa så länge som det står i variablen
  variabel_1 = variabel_1 - 1
  if variabel_1 < 30 then reverse
  low 0   'sätt port 0 låg
goto main

reverse:
  high 0  'sätt port 0 hög
  pause variabel_1    'pausa så länge som det står i variablen
  variabel_1 = variabel_1 + 1
  if variabel_1 > 100 then main om variabel_1 är störe än hundra gå till main annars förtsätt
  low 0   'sätt port 0 låg
goto reverse



det måste väll bli ungefär såhär (det är några komandon jag inte kan)

Kod: Markera allt


variabel_1  equ  20h

before_main
    movlw  64h
    movwf  variabel_1

main
    bsf   GPIO,0
    call delay
    ?????        ;variabel = variabel - 1
    
    movf   variabel1,W  ;kolla om variabel_1 är mindre än 30  
    sublw  30 
    btfsc   STATUS, Z 
    goto   reverse         ;hoppa isåfall till reverse

    bcf   GPIO,0
    goto main

reverse
    bsf   GPIO,0
    call delay
    ?????        ;variabel = variabel + 1
    
    ??????      ;kolla om variabel_1 är större än 100
                   ;hoppa i så fall till main    

    bcf   GPIO,0
    goto reverse



;variabelt delay

Delay	movlw (?) variabel_1(?)
	movwf fileC	
DelX	decfsz fileA,1		; ,1 denotes the result of the decrement 
	goto DelX	
	decfsz fileB,1		;     is placed in the file	
	goto DelX
	decfsz fileC,1
	goto DelX
	retlw 00


skulle det funka tro? Frågetecknena är komandon som jag inta kan, och frågetecken inom parantes är sånt som jag inte vet om det gå :oops:

Tack på förhand!
//Daniel A

Postat: 20 februari 2007, 14:30:59
av sodjan
> ????? ;variabel = variabel - 1

Se "decf".

> if variabel_1 < 30 then reverse

Kör från d'70' -> 0 och använde decfsz så kanske det blir smidigare kod.

> ????? ;variabel = variabel + 1

Se "incf".

> ?????? ;kolla om variabel_1 är större än 100
> ;hoppa i så fall till main

Som sagt, försök att alltid räkna ner till 0, så fungerar decfsz smidigt.

Skriv om delay rutinen så att det blir rätt med de nya värderna på variabel_1.

"variabel_1" är det absolut sämsta namn man kan ha på en variabel.... Byt det. :-)