00001 ;------------------------------------------------------
00002 ; PICCOLO project
00003 ; Copyright (c) 2009-2010 Istvan Cserny (cserny@atomki.hu)
00004 ;
00005 ; Mintaprogram a jobbra léptetést végző makrók
00006 ; használatának bemutatására
00007 ;
00008 ; FIGYELEM: A programot az MPLAB szimulátorában futtassuk!
00009 ;------------------------------------------------------
00010
00011 #include "..\include\p18_all.inc"
00012
00013 ;******************************************************
00014 ; Helyfoglalás a változók számára
00015 ; Szándékosan az ACCESS területen kívül helyeztük el a
00016 ; változókat, hogy a BANKED módú elérést tesztelhessük.
00017 ;******************************************************
00018 mydata udata 0x120
00019 my_byte res 1
00020 my_word res 2
00021 my_dword res 4
00022
00023 ;***************************************************
00024 ; 32-bites logikai léptetés jobbra
00025 ; valtozo: a léptetni kívánt változó címe
00026 ; lepes: a léptetések száma (1-31)
00027 ;***************************************************
00028 JOBBRA_LEP32 macro valtozo,lepes
00029 variable i=lepes
00030 banksel valtozo
00031 while i
00032 bcf STATUS,C ; töröljük a Carry bitet
00033 rrcf valtozo+3 ; az MSB léptetése
00034 rrcf valtozo+2 ; a 3. bájt léptetése
00035 rrcf valtozo+1 ; a 2. bájt léptetése
00036 rrcf valtozo ; az LSB léptetése
00037 variable i = i-1
00038 endw
00039 endm
00040
00041 ;***************************************************
00042 ; 16-bites logikai léptetés jobbra
00043 ; valtozo: a léptetni kívánt változó címe
00044 ; lepes: a léptetések száma (1-15)
00045 ;
00046 ; Példa:
00047 ; JOBBRA_LEP16 my_word,3
00048 ;***************************************************
00049 JOBBRA_LEP16 macro valtozo,lepes
00050 variable i=lepes
00051 banksel valtozo
00052 while i
00053 bcf STATUS,C ; töröljük a Carry bitet
00054 rrcf valtozo+1 ; a 2. bájt léptetése
00055 rrcf valtozo ; az LSB léptetése
00056 variable i = i-1
00057 endw
00058 endm
00059
00060 ;***************************************************
00061 ; 8-bites logikai léptetés jobbra
00062 ; valtozo: a léptetni kívánt változó címe
00063 ; lepes: a léptetések száma (1-7)
00064 ;
00065 ; Példa:
00066 ; JOBBRA_LEP8 my_byte,3
00067 ;***************************************************
00068 JOBBRA_LEP8 macro valtozo,lepes
00069 variable i=lepes
00070 banksel valtozo
00071 while i
00072 bcf STATUS,C ; töröljük a Carry bitet
00073 rrcf valtozo ; a változó léptetése
00074 variable i = i-1
00075 endw
00076 endm
00077
00078 ;***************************************************
00079 ; LET32 - 32-bites előjel nélküli értékadás
00080 ; valtozo: az előjel nélküli változó címe
00081 ; adat: a változóba írandó adat (0 - 0xffffffff)
00082 ;
00083 ; Példa:
00084 ; LET32 my_dword,D'573612400'
00085 ;***************************************************
00086 LET32 macro valtozo,adat
00087 banksel valtozo
00088 movlw adat & H'FF'
00089 movwf valtozo
00090 movlw adat >>D'8' & H'FF'
00091 movwf valtozo+1
00092 movlw adat >>D'16' & H'FF'
00093 movwf valtozo+2
00094 movlw adat >>D'24' & H'FF'
00095 movwf valtozo+3
00096 endm
00097 ;***************************************************
00098 ; LET16 - 16-bites előjel nélküli értékadás
00099 ; valtozo: az előjel nélküli változó címe
00100 ; adat: a változóba írandó adat (0 - 0xffff)
00101 ;
00102 ; Példa:
00103 ; LET16 my_word,D'57360'
00104 ;***************************************************
00105 LET16 macro valtozo,adat
00106 banksel valtozo
00107 movlw adat & H'FF'
00108 movwf valtozo
00109 movlw adat >>D'8' & H'FF'
00110 movwf valtozo+1
00111 endm
00112
00113 ;***************************************************
00114 ; LET8 - 8-bites előjel nélküli értékadás
00115 ; valtozo: az előjel nélküli változó címe
00116 ; adat: a változóba írandó adat (0 - 0xff)
00117 ;
00118 ; Példa:
00119 ; LET8 my_byte,D'160'
00120 ;***************************************************
00121 LET8 macro valtozo,adat
00122 banksel valtozo
00123 movlw adat
00124 movwf valtozo
00125 endm
00126
00127 PGM CODE
00128 ;--- A főprogram kötelezően a main címkénél kezdődik!
00129 main: LET32 my_dword,D'573612400'
00130 JOBBRA_LEP32 my_dword,2 ;my_dword = my_dword >> 2
00131 LET16 my_word,D'13572'
00132 JOBBRA_LEP16 my_word,4 ;my_word = my_word >> 4
00133 LET8 my_byte,D'37'
00134 JOBBRA_LEP8 my_byte,3 ;my_byte = my_byte >> 3
00135 goto $
00136 end