[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