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

[PIC 16F84A] Programator działa, ale PIC nie wystawia sygnałów na porty

Heron 21 Kwi 2004 14:06 2042 4
REKLAMA
  • #1 605448
    Heron
    Poziom 14  
    Posty: 142
    Pomógł: 4
    mam problem z zaprogramowaniem mojego - nie weim czy jest zepsuty czy ja mam zle programy bo programator moze zapisywac i odczytywac z niego ale po zaprogramowaniu PIC nie wystawia nic na porty. co mam dzialac dalej??

    Przeniesiono z Programowanie Ogólne. - arnoldziq
  • REKLAMA
  • #2 605569
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Podaj program jaki wgrałeś, czy podłączyłeś kwarc, zasilanie i sygnał MCLR?
  • REKLAMA
  • #3 605751
    Heron
    Poziom 14  
    Posty: 142
    Pomógł: 4
    Wszystko jest podłączone. Poniżej program:

    
    ;-------------------------------------INICJALIZACJA PORTU-------------------------
    
    #include 16f84.h
    msek equ 10h       ;
    TMP equ 11h         ;   ADRESY POMOCNICZE
    adres equ 12h        ;
    #define E porta,1       ; nozka 18 pica leci do koncowki E wysw....
    #define RS porta,0      ;a pin 17 leci do RS.....
     org 0
     bsf RP0
     movlw 0f0h
     movwf trisb
     movwf trisa
     bcf RP0
    
    
    ;------------------------------------------------------------------------------------------
    ;			USTAWIENIE INTERFEJSU NA 4-bitowy
    
    iniLCD movlw 50                ;opóźnienie 50 ms potrzebne do zakończenia
    
     call delay_msek	                ;inicjalizacji sprzętowej
    
     bcf RS	                        ;RS=0 rejestr IR
     bsf E	                        ;E=1
    movlw 3
     movwf portb
     bcf E	                        ;E=0
    movlw 5	                        ;opóźnienie 5 ms
     call delay_msek
     bsf E	                        ;E=1
     nop	                        ;ponowne wpisanie 3 modułu
     nop
     bcf E	                        ;E = 0
     call del_100	                ;czekaj 100 us
     bsf E	                        ;E=1
     nop	                        ;ponowne wpisanie 3 modułu
     nop
     bcf E	                        ;E = 0
     call del_100	                ;czekaj 100 us
     movlw 28h	                ;function set interfejs 4-bitowy, 2 linie
    	                        ;znaki 5x7
     call wrcmd
     movlw 8	                        ;display off
     call wrcmd
     movlw 1	                        ;display clear
     call wrcmd
     movlw 6	                        ;entry mode
     call wrcmd
     movlw 0ch	                ;display on
     call wrcmd
     return
    
    
    
    
    
    
    ;------------------------------------------------------------------------
    delay_msek movwf msek       ;  OPOZNIENIE 100 msek
     bsf RP0
     movlw 1
     movwf option_reg
    
    et_del1   bcf RP0
     clrf tmr0
    
    et_del2
    movlw 125
     bcf RP0
     subwf tmr0,w
     btfss C
     goto et_del2
    
     decfsz msek,f
     goto et_del1
     return
    
    ;-------------------------------------------------------------------------
    				;-opóźnienie   ok.    100   us
    
    del_100 bsf   RP0
    movlw 4
     movwf   option_reg
     bcf   RP0
     clrf   tmr0
    et_del100 movlw 50
     bcf RP0
     subwf tmr0,w
     btfss C
     goto et_del100
     return
    
    ;----------------------------------------------------------------------------------
    ;--------procedura	zapisu danej (RS=1)	lub instrukcji (RS=0)--------------
    			;zapisywana	8-bitowa dana znajduje się w rejestrze W
    wrdata	bsf RS		;RS = 1
    	goto et_wr
    wrcmd	bcf RS		;RS=0 rejestr instrukcji IR
    et_wr	movwf TMP	;instrukcja do TMP
    	bsf E ;,E=l
    	swapf TMP,f	;zamiana tetrad (półbajtów)
    	movlw 0f0h	;jedynki na ba-rdziej znaczącym półbajcie
    	iorwf TMP,w	;f0h.OR.TMP->W
    	movwf portb	;na PORTB bardziej znaczący półbajt
    	bcf E ;E=0
    	nop
    	nop
    	bsf E ;E=l
    
    
     swapf TMP,w		;ponowna zamiana półbajtów i wpisanie do W
     iorlw 0f0h		;f0h.OR.W->W
     movwf portb
     bcf E			;E=0
     btfsc RS		;jaki jest stan linii RS
     goto et_wrdata		;zapis danej
    movlw.2
     call delay_msek		;opóźnienie 2 ms dla instrukcji
     return
    et_wrdata  call del_100	;opóźnienie 100 us dla kodów znaków
     return
    
    
    
     end
    
  • REKLAMA
  • #4 605949
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Mam takie zastrzeżenie że trudno przewidzieć co będzie jak się wykona roskaz RETURN z nieznaną zawartością stosu. Twój program wykonuje inicjacje portów, przechodzi do procedury initLCD (nie skacze, tylko przechodzi bo ona jest dalej), a na końcu wykonuje rozkaz RETURN. Inna sprawa to wybór odpowiedniego trybu pracy kwarcu i ustawienia watchdoga.
  • #5 606395
    Heron
    Poziom 14  
    Posty: 142
    Pomógł: 4
    MAM jeszcze jedno pytanie czy moze ktos wie co jest nie tak w tym powalonym programie bo ja juz sil nie mam a jutro wystawa prac dyplomowych :cry:
REKLAMA