Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa ovim PIC16F84A kodom

[es] :: Elektronika :: Mikrokontroleri :: Problem sa ovim PIC16F84A kodom

[ Pregleda: 3094 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BaCkSpAcE

Član broj: 10
Poruke: 518
*.inffo.net.



Profil

icon Problem sa ovim PIC16F84A kodom14.07.2005. u 02:13 - pre 228 meseci
Napravio sam jedan mali uredjajcic koji seta 4 led diode od prve do poslednje i tako se isto vraca unazad. Medjutim, sada hocu da tu ubacim i prekidac. Program treba da radi tako sto led diode se konstantno pale i gase u jednom smeru, sve dok se ne pritisne na taster kada one pocnu da se krecu u drugom smeru. Ako je npr. ostala 3. led dioda upaljena, onda od trece krece polako unazad. Evo mog sorsa, koji nazalost ne radi bas kao sto sam zamislio :(

Code:

        LIST P=16F84A
;    
PORTB   EQU     6 
TRISB   EQU     86H
OPTREG  EQU     81H
STATUS  EQU     3
CARRY   EQU     0
RP0     EQU     5
RBPU    EQU     7
LIMIT   EQU     3            ;Pozicija najdalje led diode
;
     BSF     STATUS,RP0      ;Pristupam visokoj memoriji  
     MOVLW   0DH
     MOVWF   OPTREG^80H      ;Podesi preskaler na (1:32) ka WDT
     MOVLW   b'11110000'     ;RB0-3 izlazni, RB4-7 ulazni
     MOVWF   TRISB
     BCF     OPTREG, RBPU    ;Ukljuci pullup otpornike na RB ulazima
     BCF     STATUS, RP0     ;Vrati se na nisku memoriju
     CLRF    PORTB           ;Postavi sve pinove PORTB na nulu
     BCF     STATUS, CARRY   ;Ocisti bit prenosa (ako ga ima)
     BSF     PORTB, 0
LEFT SLEEP                   ;Sacekaj WDT timeout
     BTFSS   PORTB, 4        ;Ako nije pritisnut, idi dalje
     GOTO    RIGHT
     RLF     PORTB, F        ;Setaj led diode ulevo
     BTFSS   PORTB, LIMIT    ;Ako je dosao do kraja, kreni ponovo
     GOTO    LEFT
     CLRF    PORTB
     BSF     PORTB, 0
     GOTO    LEFT
RIGHT SLEEP            
     BTFSS   PORTB, 4        ;Ako nije pritisnut, idi dalje
     GOTO    LEFT
     RRF     PORTB, F        ;Setaj led diode udesno
     BTFSS   PORTB, 0
     GOTO    RIGHT
     CLRF    PORTB
     BSF     PORTB, 3
     GOTO    RIGHT           ;Pocni ponovo
     END


Kada ovo ubacim u moj mikrokontroler, on pali 1, 2, 3 led diodu, dok 4. nece da upali, a pritom i ne gasi one prethodno upaljene led diode. Znaci paljenje ide ovako: 1, 12, 123, pa se ponovo vraca na 1, 12, 123... Posle pritiska na taster, onda pocinje 4, 43, 432, i opet ponovo s tim sto opet nikad ne dodje do 1. led diode, i ne gasi prethodne.
Moje je pitanje u cemu je ovde problem i sta je resenje... Nemojte mi samo davati savete tipa uradi preko TMR0, ili interapta i sl... znaci interesuje me neko resenje na ovaj nacin.

 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: Problem sa ovim PIC16F84A kodom15.07.2005. u 16:01 - pre 228 meseci
pozdrav,

odmah se vidi da nemas osciloskop.
1. led 4 (vezana za portb.3) se pali, ali u sledecoj instrukciji je gasis.
BTFSS PORTB, LIMIT ;*** - dosao si do kraja
GOTO LEFT
CLRF PORTB ;*** - odmah je gasis tako da je led bila upaljena svega nekoliko mikrosekundi (nedovoljno da bi se videlo)

2.
BTFSS PORTB, 4 ;Ako nije pritisnut, idi dalje
GOTO LEFT
RRF PORTB, F ;Setaj led diode udesno - u ovom momentu pin 4 porta B je na visokom nivo, zanci kada uradis shift right visoki nivo sa pina 4 preci ce na pin 3 pa ce led biti updaljena.

isti je problem kada radis pomeraj u levo.
 
Odgovor na temu

BaCkSpAcE

Član broj: 10
Poruke: 518
*.inffo.net.



Profil

icon Re: Problem sa ovim PIC16F84A kodom15.07.2005. u 19:38 - pre 228 meseci
Hvala ti mnogo... Imam osciloskop, ali sam pocetnik u programiranju sa pic-om pa mi treba malo vremena da proucim ovaj asm za pic-ove, pa cu onda krenuti sa necim ozbiljnijim gde je neizbezan osciloskop... Ali stvarno nema sanse da bih se mogao ovako setiti da je problem u tome... Evo ako nekog interesuje moj finalni kod koji lepo odradjuje ovo sto sam i zamislio:

Code:

        LIST P=16F84A
;    
PORTA   EQU    05H
PORTB   EQU     06H 
TRISA   EQU    85H
TRISB   EQU     86H
OPTREG  EQU     81H
STATUS  EQU     03H
CARRY   EQU     0
RP0     EQU     5
LIMIT   EQU     3               ;Pozicija najdalje led diode
;
    BSF     STATUS,RP0      ;Pristupam visokoj memoriji  
    BSF     TRISA, 0    ;Setuj RA0 kao ulazni    
    CLRF    TRISB        ;Postavi RBx na izlaz
    MOVLW   0DH
    MOVWF   OPTREG^80H      ;Podesi preskaler na (1:32) ka WDT
    BCF     STATUS, RP0     ;Vrati se na nisku memoriju
    CLRF    PORTB        ;Postavi sve pinove PORTB na nulu
    BCF     STATUS, CARRY   ;Ocisti bit prenosa (ako ga ima)
    BSF     PORTB, 0
LEFT    SLEEP                   ;Sacekaj WDT timeout
    BTFSS   PORTA, 0    ;Ako nije pritisnut, idi dalje
    GOTO    RIGHT
    RLF     PORTB, 1    ;Setaj led diode ulevo
    BTFSS   PORTB, LIMIT    ;Ako je dosao do kraja, kreni ponovo
    GOTO    LEFT
    SLEEP            ;Ovo je ono sto me zezalo
    CLRF    PORTB
    BSF     PORTB, 0
    GOTO    LEFT
RIGHT    SLEEP            
    BTFSS   PORTA, 0    ;Ako nije pritisnut, idi dalje
    GOTO    LEFT
    RRF     PORTB, 1    ;Setaj led diode udesno
    BTFSS   PORTB, 0
    GOTO    RIGHT
    SLEEP
    CLRF    PORTB
    BSF     PORTB, LIMIT
    GOTO    RIGHT        ;Pocni ponovo
    END
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Problem sa ovim PIC16F84A kodom

[ Pregleda: 3094 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.