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.
MfGCode: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







Zitieren

Lesezeichen