Hallo!
Bei Erstellung von ASM Programmen, um mir das Kompilieren zu vereinfachen, verwende ich folgende Prozedur:
Zuerst erstelle ich mir in gleichem Verzeichnis, wo die Sammlung meiner Unter/Programme sich befindet, eine Textdatei (z.B. Test.txt) wo ich meinen einspaltigen PAD mit Pfeilen nach oben und unten schreibe/skizziere. In der Datei mache ich mir auch ganz oben ständig aktualisierte Liste aller Register, die in diesem Unter/Programm verwendet sind.
Wenn das PAD fertig ist, speichere ich diese Datei mit gleichem Namen als *.asm Datei (z.B. Test.asm) und erzetze alle PAD "Symbole" mit Befehlen für bestimmten PIC/Assemblerprogramm (z.B. für MPASM um die Register für ihm zu benennen).
Bei Änderungen mache ich sie gleich in beiden Dateien, damit sie am Ende wirklich aktuell sind. Letztendlich habe ich dann beide, wenn ich später etwas ändern muß. Dank dessen brauche ich ausser eventuellen Namen der UPs keine Kommentare im Programm schreiben, was seine Erstellung deutlich beschleinigt.
Mit diesem Prinzip in umgekehrter Richtung lassen sich auch "fremde" Programme leicht analisieren.
Als Beispiel habe ich ein UP aus meiner Sammlung für PIC18F252 in Code kopiert. Als einige PAD Symbole sind wegen Einfachheit von mir Mnemonics verwendet und die verwendete Register (Tmp und Tmp1) weggelassen, da sie schon in gemeinsamem Programm benannt sind. Bei PAD Erstellung darf man eben beliebige Symbole verwenden, die man selber am besten versteht.
Wahrscheinlich eignet sich die Prozedur auch für Hochsprachen.
MfG
Code:
WriteFlash 0x100 -> FSR0 ; copy 1024 bytes from RAM (100h-500h)
0 -> TBLPTRU ; in Flash (7C00h-7FFFh)
0x7C -> W
W -> TBLPTRH
0 -> TBLPTRL
tblrd*-
0x80 -> W
W -> Tmp1
FlashProgL 8 -> W <------------------------+
W -> Tmp |
WriteFL +-> POSTINC0 -> W |
| W -> TABLAT |
| tblwt+* |
| dec Tmp |
| Tmp = 0? j >----------+ |
+----------< n | |
1 -> EECON1,EEPGD <-+ |
0 -> EECON1,CFGS |
0 -> EECON1,WREN |
0 -> INTCON,GIE |
+----------+ |
| standard | |
+----------+ |
1 -> EECON1,WR |
0 -> PIR2,EEIF |
1 -> INTCON,GIE |
dec Tmp1 |
Tmp1 = 0? j >---------+ |
n >---------|---------+
0 -> EECON1,WREN <--+
return
WriteFlash lfsr FSR0,0x100 ; copy FFh=1024d bytes from RAM (100h-500h)
clrf TBLPTRU ; in Flash (7C00h-7FFFh)
movlw 0x7C
movwf TBLPTRH
clrf TBLPTRL
tblrd*-
movlw 0x80
movwf Tmp1
FlashProgL movlw 8
movwf Tmp
WriteFL movf POSTINC0,0
movwf TABLAT
tblwt+*
decfsz Tmp,1
bra WriteFL
bsf EECON1,EEPGD
bcf EECON1,CFGS
bsf EECON1,WREN
bcf INTCON,GIE
+----------------+
| movlw 0x55 |
| movwf EECON2 |<- standard
| movlw 0xAA |
| movwf EECON2 |
+----------------+
bsf EECON1,WR
bcf PIR2,EEIF
bsf INTCON,GIE
decfsz Tmp1,1
bra FlashProgL
bcf EECON1,WREN
return
Lesezeichen