Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

GPRS bank 1 jak zapisywac i odczytywać PIC16F57

duke_pl 13 Lut 2012 11:21 1511 6
  • #1 13 Lut 2012 11:21
    duke_pl
    Poziom 11  

    Witam,

    Mam wielką prośbę, jakby ktoś uprzejmy i miły mógł odpowiedzieć jak w asemblerze na procku 16f57 "dostać" się do ramu w banku 1 (30h-3Fh). Chciałbym w tym banku zapisywać i odczytywać dane, lecz wszystkie próby kończą się zapisem lub odczytem rejestrów w banku 0. Próbowałem z adresowaniem pośrednim, ale coś mi słabo wychodzi. Proszę o wskazówki :) (Datasheet tego pica to PIC16C57)

    Pozdrawiam!!!

    0 6
  • #2 13 Lut 2012 15:46
    bednyk
    Poziom 12  

    Może wklej jakieś przykład w jaki sposób próbujesz to rozwiązać. Z tego co kojarzę należy ustawić aktywny bank pamięci napierw.

    Tutaj masz przykład z innego PIC'a
    http://mikrokontrolery.net/pic_asm_01.htm

    Przejrzyj sobie pod kątem banków pamięci a później zastosuj zgodnie z notą katalogową Twojego układu. Powinieneś dać radę!

    0
  • #3 13 Lut 2012 21:56
    duke_pl
    Poziom 11  

    Już wszystko wiem:

    W procku 16f57 rejestry ogólnego przeznaczenia GPR (72 rejestry), są dostępne w 4 bankach. Jeśli chcemy zapisać coś w banku 1 pod adresem 30h, to w skrócie:

    MOVLW 30h <- ładujemy adres 30h do W
    MOVWF FSR <- W do rejestru FSR
    MOVLW AAh <- ładujemy jakąś daną rejestr roboczy W (np. AA)
    MOVWF INDF <- rejestr W do rejestru INDF

    Teraz w banku 1 pod adresem 30h mamy zapisaną daną AA...

    Polecam:
    http://www.pictutorials.com/Indirect_Addressing_Exam.htm

    0
  • #4 15 Lut 2012 15:39
    Madman07
    Poziom 19  

    To jest okrężna metoda. Popatrz na rejestr STATUS i bity RP1-RP0. Umożliwiają one przełączanie się między bankami, co niweluje konieczność używania adresowania niebezpośredniego za każdym razem.

    0
  • #5 15 Lut 2012 19:12
    duke_pl
    Poziom 11  

    Raczej FSR, użycie STATUS nic nie daje, dalej zapis do banku 0.

    FSR - File Select Register:

    TMP EQU 30h <-- TMP = 30h (bank 1)
    BSF FSR,5 <-- idź do rejestrów w banku 1
    MOVLW AAh <-- zapisz AAh do W
    MOVWF TMP <-- zapisz W do TMP

    Teraz w komórce 30h jest to co zapisaliśmy do akumulatora W.

    W procesorach base line prowidłowo koduje się poprzez bity PA0 i PA1 w rejestrze
    STATUS, a nie RP0, RP1 <-- tak jest w prockach mid range.

    0
  • #6 15 Lut 2012 21:59
    Madman07
    Poziom 19  

    Trochę to dziwnie jest rozwiązane, ale chyba przez to, że są to stare procki...

    0
  • #7 16 Lut 2012 00:02
    Jado_one
    Poziom 22  

    A jak sobie w tej sytuacji radzi komenda BANKSEL?
    W prockach typu 16F877 wystarczy przed odwolaniem do zmiennej wpisac:
    BANKSEL nazwa_zmiennej
    aby przełączyć się na odpowiedni bank (assembler sobie podstawia sam odp wartosci).

    Być może ten sam mechanizm ma szanse zadziałać i w tym przypadku. (nie znam tego procka)

    0