[elektro] PIC ASM kérdés

Horvath Zsolt hozso_001 at freemail.hu
Wed Sep 26 09:16:34 CEST 2012


   Szia!

   Szerintem a pont Ács Gábornál van.

   A mintában nincs beállítva a PCLATH. Alapban az,
gondolom 0-n áll. Ez adja a PC felső részét. Ezért aztán
amíg a 0. lapra hivatkozik, nincs is gond. De ha már nem
a 0-ra, akkor állítani kell. (És úgy marad. Tehát ha minden
PCL-es utasítás a 2. lapon van, akkor csak egyszer kell
állítani.)

   Sejtésem szerint a küldött mintában a AND csak arra való, hogy
nehogy véletlenül a PCL-hez 7-nél nagyobb értéket adjon
hozzá. (És ezzel "eltévedjen" a program.)

   A 256-os laphatár figyelésére én a fordítót hívtam
segítségül. Itt egy programrészlet. Nálam ez bevált:
(Bocs a sortörés miatt.)


     ;táblázatkezelés, a számjegy érték és a PORTB-re kiküldendő jel 
dekódolásához!
IS_TMR0DisplayLookupSegment    ;táblázat az éppen aktuális kijelző 
bekapcsolásához szükséges maszk
     movlw    HIGH(IS_TMR0DispLookupSegTable+1)    ;ez lesz a táblázat 
pontos címe
     movwf    PCLATH                ;

     movfw    LookupTmp        ;az aktuális szegmenst kiválasztó mutató
     addwf    PCL,F            ;számított ugrás
IS_TMR0DispLookupSegTable
         ;a 'G' szegmens a PORTB-n van, a C PORT 3 és 4. bitjein van az I2C!
     retlw    b'11100111'        ;'0', 0
     retlw    b'00000110'        ;'1', 1
     retlw    b'01101011'        ;'2', 2
     retlw    b'00101111'        ;'3', 3
     retlw    b'10001110'        ;'4', 4
     retlw    b'10101101'        ;'5', 5
     retlw    b'11101101'        ;'6', 6
     retlw    b'00000111'        ;'7', 7
     retlw    b'11101111'        ;'8', 8
     retlw    b'10101111'        ;'9', 9

     retlw    b'11001111'        ;'A', 10
     retlw    b'11101100'        ;'b', 11
     retlw    b'11100001'        ;'C', 12
     retlw    b'01101110'        ;'d', 13
     retlw    b'11101001'        ;'E', 14
     retlw    b'11001001'        ;'F', 15
     retlw    b'11001110'        ;'H', 16
     retlw    b'01100110'        ;'J', 17
     retlw    b'11100000'        ;'L', 18
     retlw    b'11001011'        ;'P', 19
     retlw    b'11100110'        ;'U', 20
     retlw    b'10101110'        ;'Y', 21
     retlw    b'00001000'        ;'-', 22
     retlw    b'00000000'        ;kikapcsolt állapot!, 23

         IF    HIGH(IS_TMR0DispLookupSegTable)!=HIGH($)        ;HA 
ÁTCSÚSZNA A 256 BYTE-OS HATÁRON, AKKOR HIBAJELZÉS !
         ERROR    "Szegmens kiválasztó táblázat ugrotabla-hiba !"
         ENDIF



   Üdv.: Horváth Zsolt



2012.09.25. 22:51 keltezéssel, Acs Gabor írta:
> Nem úgy van, hogy a PCLATH adja a felső biteket, és ezért a PCL
> módosítással csak az általa elérhető 8 bites címtartományon belül
> ugrálhatsz? Már emberemlékezet óta nem is láttam 16-os PIC-et, szóval
> már minden a homályba vész, de nekem még az AND-olás szerepe sem
> világos. Azzal nem kimaszkolja az első 7 lehetőséget?
> De ha van egy Pickit-je, végigléptethetné utasításonként, hogy mi a
> következő cím.
>
>
> Gábor
>
>
> 2012.09.25. 22:24 keltezéssel, Varsanyi Peter írta:
>    
>> 		Sziasztok!
>>
>>
>> Egy ismerõs kérdését tolmácsolnám, mert nem vagyok otthon a PIC-es
>> dolgokban. Van egy ASM forrása, benne egy indexelt, táblázatos ugrás. Ha a
>> kód az elsõ 256 byte-ra kerül, jól mûködik. Ha 256 byte fölé, a szimulátor
>> szerint jól megy, de a valóságban megkergül a proci. Mi lehet a hiba? A
>> proci: 16F1823 A kódrészlet:
>>
>> Counter:
>>        INCF    count,F             ;55
>>        MOVLW   b'00000111'         ;56
>>        ANDWF   count,W             ;57
>>        ADDWF   PCL,F               ;58
>> ;
>>        GOTO    count1              ;60
>>        GOTO    count2
>>        GOTO    count3
>>        GOTO    count4
>>        GOTO    count5
>>        GOTO    count6
>>        GOTO    count7
>>        GOTO    count8
>> ;
>>
>> Köszi:
>>
>> Pepe
>>
>> -----------------------------------------
>>             elektro[-flame|-etc]
>>
>>      
> -----------------------------------------
>            elektro[-flame|-etc]



More information about the Elektro mailing list