logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[PIC16F84A] Dlaczego diody na PortB PIC16F84A nie świecą mimo poprawnego kodu ASM?

PietrekDer 01 Sie 2008 18:51 2907 4
REKLAMA
  • #1 5399254
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    Witam
    Mam środowisko MPlab 7.5, napisałem w nim prosty program mający na celu ustawienie wartości 0x55 na porcieB. Programator to Winpic. Myślę że problemów pomiędzy Winpic a programatorem sprzętowym nie ma, ponieważ gdy w Winpic w zakładce "Device, Config" wybiorę typ uC "unknown" a następnie wybiorę z menu: "Device->Read" na dole pojawia się komunikat
    "Reading done, Conflict: selected device = unknown,  read = PIC16F84A"


    Program który kompiluje się bez błędów (nie ma żadnego "include" bo wykorzystuje tylko trzy SFRy):
    status equ 3
    trisb equ 86
    portb equ 6
    
    #define bank1 bsf status,5
    #define bank0 bcf status,5
    
    
    	bsf status,5
    	movlw 0
    	movwf trisb
    
    START:
    	bcf status,5
    	movlw 55h
    	movwf portb
    
    	END

    Wydaje mi się że program realizuje założenie, czyli ustawia PortB jako Output, i ustawia stan 0x55, po zaprogramowaniu w Winpic pojawia się komunikat "Programming finished, no errors". Ale diody podłączone do portuB wogóle nie świecą, więc już nie mam pojęcia w czym tkwi problem :/


    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]


    A tak, wiem, zapomniałem, przepraszam. BTW... hmm nie wiem, może program jest zły, bo PonyProg2k też rozpoznaje proca, kasuje i programuje bez problemów. A szczerze mówiąc to jest to mój pierwszy program pod PIC i właśnie chciałem takim prostym programikiem sprawdzić, czy cały ten programator, połączenie itd są pewne, ale teraz to już nie wiem :/
  • REKLAMA
  • #2 5400090
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    hmmm... czy to moze miec (jak zwykle) cos wspolnego z tym, ze na porcie B (jak i na porcie A) sa przetworniki A/C ktore sa domyslnie wlaczone?

    4\/3!!
  • REKLAMA
  • #3 5400183
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    Hmm, ale chyba PIC16F84A nie ma przetworników A/C, przynajmniej tak wynika z dokumentacji, zawsze na początku jest strona "reklamowa" proca gdzie są wymieniane jego układy wewnętrzne itd, i z tego wynika że on ma tylko Timer0, przerwanie INT0, przerwania z PB4-PB7 no i 5-bitowy PortA i cały PortB. Nawet patrząc na opisy I/O PortA/B nie znalazłem tam jakichś opcji, rejestrów które mogłyby wyłączać/włączać jakieś przetworniki czy komparatory (chociaż gdzieś kiedyś skądś słyszałem, że literka A na końcu oznacza dodatkowy komparator). A co do przerwań od zmian na portach RB4-RB7, to domyślnie przerwanie jest wyłączone (bit RBIE=0 w rejestrze INTCON). Zapewne problem jest błahy i prosty jak drut, ale...
  • REKLAMA
  • Pomocny post
    #4 5400223
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    racja.

    zastanawia mnie czemu nie dolaczysz standardowego naglowka zamiast definiowac te wszystkie wartosci recznie? zauwaz, ze ty definiujesz je dziesietnie, a przeciez sa to adresy szesnastkowe i 86 != 0x86, a wlasnie taki jest adres TRISB. dolacz standardowy naglowek i nie bedziesz musial przejmowac sie takimi rzeczami.

    lecmy dalej. kod ktory napisales musi byc umieszczony poprawnie w pamieci. brak w nim dyrektywy dla linkera org 0x0000. moze kompilator laduje twoj kod gdzies w inne miejsce, a wektor resetu wskazuje na jakas bledna wartosc?

    nie ustawiasz tez bitow konfiguracyjnych.

    zerknij na to:
    http://www.winpicprog.co.uk/pic_tutorial1.htm

    no i wykorzystaj symulator. w koncu po to jest.

    4\/3!!
  • #5 5400782
    PietrekDer
    Poziom 13  
    Posty: 134
    Pomógł: 1
    Ocena: 5
    Uff, wreszcie po kilku bitwach zwyciężyłem :D. Dzięki, te tutoriale pomogły, po drugie stworzyłem nowy projekt z Wizard'a a nie z opcji Project->New. Co prawda później były jeszcze kłopoty (układ działał jak dotykałem kwarc palcem), ale już wyczytałem z noty, że przy kwarcach powyżej 3.5MHz należy używać ustawienia HS, a nie XT. I teraz wreszcie wszystko działa jak powinno. Jakby co, to umieszczam tutaj kompletny i gotowy projekt, wraz z gotowym HEXem, dla tych, którzy też kiedyś będą zaczynali zabawę z PICami. Program po prostu mruga diodami na Portach A i B. (Tylko przypominam o ustawieniu opcji HS a nie XT):
    Załączniki:
    • Diody.zip (14.74 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • [PIC16F84A] Dlaczego diody na PortB PIC16F84A nie świecą mimo poprawnego kodu ASM? sett.GIF (21.46 KB) Musisz być zalogowany, aby pobrać ten załącznik.
REKLAMA