Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PIC PROGRAMLAMA LED YAKMA

Başlatan Serhado, 08 Kasım 2014, 22:06:08

Serhado

Selamlar Arkadaslar, sormak istedigim bir soru var.

Suanda Proje odevimi yapiyorumda, takildigim bir kisim var, simdi ben B ve C portlarini actim, buraya ledleri bagladim su sekilde yapmak istiyorum , B portunun ilk 4 LED'i yanarken C port portunun son 4 LED'i yakicam sonra da bunlarin tersini alicam, bunu nasil yapabilirim?

simdiden tskler..

Kabil ATICI

1 tanesini yakabiliyor musun? Yakabiliyorsan diğerlerini de istediğin sırada yak.B ve C portlarını çıkış olarak ata (TRIS ile)
asm de ise wreg'e 0x0f yükle bunu B portuna gönder,sonra WREG'e 0xF0 yükle bunu c portu gönder,araya gecikme koyup (yoksa göremezsin)gönderdiğni veri sırasını değiştir gönder...
komutlar işlemci veri kağıdında vardır...
ambar7

Serhado

Merhaba hocam,

ben su sekilde yaptim ama cok farkli birsey oldu :))

LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23
DEGER4 EQU 0X24
DEGER33 EQU 0X25
DEGER34 EQU 0X26

ORG 0X00
BASLA

BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

MOVLW 0X0F
MOVWF PORTB

MOVLW 0XF0
MOVWF PORTC

CALL GECIK

GECIK
MOVLW 0X00
MOVWF DEGER1
GECIK1
MOVLW 0X00
MOVWF DEGER2

MOVLW 0X0F
MOVWF PORTC
MOVLW 0XF0
MOVWF PORTB
CALL GECIK2
GECIK2
MOVLW 0X00
MOVWF DEGER3
GECIK3
MOVLW 0X00
MOVWF DEGER4
GOTO BASLA
RETURN
END


Nerede hata yaptigimi soyleyebilirmisiniz acaba,
smdiden tskler..

kudretuzuner

#3
Merhaba,
Aşağıdaki ilaveyi yaparak dener misiniz?
MOVWF PORTC

CALL GECIK


GOTO BASLA;İLAVE EDİNİZ

GECIK
MOVLW 0X00
Amatör

Serhado

#4
LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23
DEGER4 EQU 0X24
DEGER33 EQU 0X25
DEGER34 EQU 0X26

ORG 0X00
BASLA

BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

MOVLW 0XF0
MOVWF PORTB

MOVLW 0X0F
MOVWF PORTC

CALL GECIK
GOTO BASLA

GECIK
MOVLW 0X0F
MOVWF DEGER1
GECIK1
MOVLW 0X0F
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1

MOVLW 0X0F
MOVWF PORTB
MOVLW 0XF0
MOVWF PORTC

CALL GECIK
GOTO BASLA
RETURN
END



KODLARI SU SEKILDE YAPTIM AMA HALA DEGISEN BIRSEY YOK YANIYOR AMA DEGISTIRMIYOR..

Kabil ATICI

döngüde sayma ve karşılaştırma ile ilgili hata...
incfsz ve decfsz komutlarına bir bak!
ledleri değiştireceğin döngü nerede?


BASLA
;port yönlendirmlerin
ana_dongu
;led değiştir
;1. grup LEDleri yak
CALL gecik
;2.grupledleri yak
CALL gecik
;eğer işlemin 1 kez yapılmasını istiyorsan
kere1 ;alttaki goto satırını buraya yönlerdir..
  GOTO ana_dongu

;sürekli ledleri sıra ile yak sondur yapar...

gecik
;döngü bölümün
RETURN
END
ambar7

Serhado

Hocam merhabalar,

LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23

ORG 0X00

BASLA
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

ANA_DONGU
MOVLW 0XF0
MOVWF PORTB

MOVLW 0X0F
MOVWF PORTC

CALL GECIK

GECIK
MOVLW 0X0F
MOVWF DEGER1
GECIK1
MOVLW 0X0F
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1

MOVLW 0X0F
MOVWF PORTB
MOVLW 0XF0
MOVWF PORTC

CALL GECIK

GOTO ANA_DONGU

RETURN

END


kodumu bu sekilde degistirdimde, incfsz ve decfsz kullanilmiyor mu burada tam olarak bu konuda ne demek istediginizi anlamadim, lutfen acik soylermisiniz.

sadogan

gecik bir subroutine ve subroutine return ile bitmesi gerekir.
subroutine girdiğinde sonlardırmadan yine aynı rutini çağırıyorsun ve rutinden çıkmıyorsun.
Sonuç olarakta stack taşıyor ondan sonrasını ne olur bilinmez.
gecikme
;
return
geciktirme kodlarını
gecikme etiketi ile return arasına yazmalı ve !!burda kendini çağırmamalısın.




Serhado

Merhaba hocam, dediginiz gibi duzelttim kodumu ve ledleri yakdim ama led yanmasi cok hizli gerceklesiyor, gecikmeleri arttirirsam daha yavas yanmaya baslar diye dusunuyorum yanilmiyorum degil mi ?

LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23

ORG 0X00

BASLA
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

ANA_DONGU
MOVLW 0XF0
MOVWF PORTB

MOVLW 0X0F
MOVWF PORTC

CALL GECIK


MOVLW 0X0F
MOVWF PORTB
MOVLW 0XF0
MOVWF PORTC

CALL GECIK
GOTO ANA_DONGU
GECIK
MOVLW 0X00
MOVWF DEGER1
GECIK1
MOVLW 0X00
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1

RETURN

END

RaMu

Değişiklikleri yapınca kodun şöyle olacak
;led swap
LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23
DEGER4 EQU 0X24
DEGER33 EQU 0X25
DEGER34 EQU 0X26

ORG 0X00
BASLA

BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

MOVLW 0XF0
MOVWF PORTB

MOVLW 0X0F
MOVWF PORTC

CALL GECIK
;GOTO BASLA



MOVLW 0X0F
MOVWF PORTB
MOVLW 0XF0
MOVWF PORTC

CALL GECIK
GOTO BASLA


GECIK
MOVLW 0X0F
MOVWF DEGER1
GECIK1
MOVLW 0X0F
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1
RETURN
END



Daha doğrusu şöyle olmalı;
;led swap
LIST P=P16F877A

#include <P16F877A.inc>

DEGER1 EQU 0X21
DEGER2 EQU 0X22
DEGER3 EQU 0X23
DEGER4 EQU 0X24
DEGER33 EQU 0X25
DEGER34 EQU 0X26

ORG 0X00


BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
CLRF PORTB

BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC

BASLA
MOVLW 0XF0
MOVWF PORTB

MOVLW 0X0F
MOVWF PORTC

CALL GECIK
;GOTO BASLA



MOVLW 0X0F
MOVWF PORTB
MOVLW 0XF0
MOVWF PORTC

CALL GECIK
GOTO BASLA


GECIK
MOVLW 0X00
MOVWF DEGER1
GECIK1
MOVLW 0X00
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1
RETURN
END



Şöylede olur;
;led swap
errorlevel -203,-205,-215
LIST P=P16F877A

#include <P16F877A.inc>
;config ayarları yapılmalı

cblock
DEGER1,DEGER2,DEGER3,DEGER4,DEGER33,DEGER34
endc

ORG 0X00

BANKSEL TRISB
CLRF TRISB
CLRF TRISC
BANKSEL PORTB

MOVLW 0XF0
MOVWF PORTB	;PORTB nin ilk değerini yükle
MOVLW 0X0F
MOVWF PORTC	;PORTC nin ilk değerini yükle


BASLA
SWAPF PORTB,F	;PORTB alt 4 bit ile üst 4 biti yer değiştir PORTB ye yaz
SWAPF PORTC,F	;PORTC alt 4 bit ile üst 4 biti yer değiştir PORTC ye yaz
CALL GECIK	;bir defa çağırmak yeterli
CALL GECIK  ;ben daha yavaş gözüksün diye ekledim

GOTO BASLA


GECIK
MOVLW 0X00
MOVWF DEGER1
GECIK1
MOVLW 0X00
MOVWF DEGER2
GECIK2
INCFSZ DEGER2,F
GOTO GECIK2
INCFSZ DEGER1,F
GOTO GECIK1
RETURN
END



Bunların hepsi çalışan programlardır,
sadece config ayarları eklenmesi gerekir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Serhado

Proje'mi tamamladim, cevap veren arkadaslara tesekkurler, hatalarimi gorebildim.. :)