00001 ;------------------------------------------------------ 00002 ; PICCOLO project 00003 ; Copyright (c) 2009-2010 Istvan Cserny (cserny@atomki.hu) 00004 ; A programhoz Karl Lunt FOR-NEXT makróit adaptáltuk 00005 ; Forrás: "A High-Power PIC Macro Library" by Karl Lunt, 00006 ; Nuts & Volts Magazine, July 1999 00007 ;------------------------------------------------------ 00008 #include "..\include\p18_all.inc" 00009 ;------------------------------------------------------ 00010 ; Helyfoglalás a változók számára 00011 ;------------------------------------------------------ 00012 mydata UDATA_ACS 00013 i res 1 ;ciklusváltozó 00014 j res 1 ;ciklusváltozó 00015 a res 2 ;16 bites eredmény 00016 00017 variable _for_cnt=0 00018 variable _nxt_cnt=0 00019 00020 ;------------------------------------------------------ 00021 ; FOR (a FOR-NEXT ciklus fejrésze) 00022 ; 00023 ; Szintaxis: 00024 ; FOR var,kezd,veg 00025 ; 00026 ; A FOR makró egy FOR-NEXT ciklust indít. 00027 ; A paraméterek: 00028 ; var: a ciklusváltó (8-bites RAM változó) 00029 ; kezd: számkonstans, a ciklusváltozó kezdeti értéke 00030 ; veg: számkonstans, a ciklusváltozó végső értéke 00031 ;------------------------------------------------------ 00032 FOR macro var,kezd,veg 00033 movlw kezd 00034 movwf var 00035 _for#v(_for_cnt): 00036 movf var,W 00037 sublw veg 00038 bnc _next#v(_for_cnt) 00039 _for_cnt set _for_cnt+1 00040 _nxt_cnt set _for_cnt 00041 endm 00042 ;------------------------------------------------------ 00043 ; NEXT (a FOR-NEXT ciklus vége) 00044 ; 00045 ; Szintaxis: 00046 ; NEXT var 00047 ; 00048 ; A NEXT macro lezárja a FOR-NEXT ciklust. 00049 ; A paraméterek: 00050 ; var: a ciklusváltó (8-bites RAM változó) 00051 ; 00052 ; A NEXT blokkban a var változó értéke inkrementálódik, 00053 ; azután a vezérlés visszakerül a FOR ciklus elejére, 00054 ; a változó teszteléséhez. 00055 ; Fontos, hogy a paraméterként megadott ciklusváltozó 00056 ; egyezzen meg a FOR makró ciklusváltozójának nevével! 00057 ;------------------------------------------------------ 00058 NEXT macro var 00059 _nxt_cnt set _nxt_cnt-1 00060 incf var,f 00061 bra _for#v(_nxt_cnt) 00062 _next#v(_nxt_cnt): 00063 endm 00064 00065 PGM CODE 00066 ;--- A főprogram kötelezően a main címkénél kezdődik!- 00067 main: 00068 ;------------------------------------------------------ 00069 ; Számok négyzetének kiszámítása (90-110 közötti számokra) 00070 ; egyszerű FOR-NEXT ciklus felhasználásával 00071 ;------------------------------------------------------ 00072 FOR i,D'90',D'110' ;for ciklus szervezése 00073 movf i,W 00074 mulwf i ; i*i kiszámolása 00075 movff PRODL,a ; az eredmény eltárolása 00076 movff PRODH,a+1 00077 NEXT i ;ciklus vége 00078 ;------------------------------------------------------ 00079 ; Szorzótábla kiszámítása (1x1 - től 10x10-ig) 00080 ; egymásba ágyazott FOR-NEXT ciklusok segítségével 00081 ;------------------------------------------------------ 00082 FOR i,1,D'10' 00083 FOR j,1,D'10' 00084 movf i,W 00085 mulwf j ; i*j kiszámítása 00086 movff PRODL,a 00087 movff PRODH,a+1 00088 NEXT j 00089 NEXT i 00090 goto $ 00091 end