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