255'e kadar saydıran programlar yardım lütfen

Başlatan barbelo, 17 Kasım 2013, 16:38:12

barbelo

Merhabalar Elektronik Teknolojileri bölümü üniversite öğrencisiyim hocamızın verdiği ödev doğrultusunda şu programları yapmam gerekiyor yardımcı olabilecek var mı acaba ?

1-Port B'nin çıkışını teker teker 255'e kadar saydırın .
2-Port B'nin çıkışını tek sayılarla 255'e kadar saydırın.
3-Port B'nin çıkışını 255'den geriye doğru tek tek 0'a kadar saydırın.
4-Port B'nin çıkışını 2'şer 2'şer (çift çift ) 254'e kadar saydırın.
5-Port B'nin tüm çıkışlarını sürekli yakıp söndürünüz.

Pic 16F84 ile yazmam gereken programlar bunlar yardımcı olabilecek var ise şimdiden çok teşekkür ediyorum.

esensoy

Yardım ederiz elbet, hangi noktadasın, neler yaptın ödevle alakalı?
En tehlikeli an "zafer" anıdır.

cicjoe

#2
Bu islemi bir display ile mi yapcaksin, yoksa led'lerle binary sekilde mi?
Yazdigindan binary gibi anliyorum ben cunku.. Eger oyle ise, sayiyi portb'ye vermeniz yeterli..
Bir de c/asm hangi dil?

barbelo

Ledlerle binary şekilde olacak ve dil asm olacak şekilde .

Pir-O

Sıfırdan 255'e kadar sayan program. Diğerlerini de benzer şekilde yapabilirsin.


LIST P=16F84A
#INCLUDE <P16F84A.INC>
SAYI EQU 0X20
SAYI1 EQU 0X21
SAYI2 EQU 0X22

ORG 0X00


	CLRF PORTB
	BANKSEL TRISB
	CLRF TRISB
	BANKSEL PORTB
	MOVLW 0x00
	MOVWF SAYI
BASLA
	MOVF SAYI,0
	MOVWF PORTB
	INCF SAYI
	CALL GECIK
	GOTO BASLA	
	

GECIK
	MOVLW 0XFF
	MOVWF SAYI1
	MOVWF SAYI2
BEKLE
	DECFSZ SAYI1
	GOTO BEKLE
	MOVLW 0XFF
	MOVWF SAYI1
	DECFSZ SAYI2
	GOTO BEKLE
	RETURN
END





barbelo

Sayin Pir-O paylasiminiz icin tesekkur ederim bekleme ve gecikme niçin onu öğrenebilirmiyim acaba ?

barbelo

LİST         P=16F84
INCLUDE   "P16F84.INC"
CLRF         PORT B
BANKSEL   TRIS A
MOVLW      h'FF'
MOVWF      TRIS A
CLRF.         TRIS B
BANKSEL    PORT A
BASLA
MOVLW       d'255'
MOVWF       PORT B
CLRF           PORT B
GOTO          BASLA
END

Acaba bu program yanliş midir ?

Kabil ATICI

Hangi duruma göre yanlış olacak?
PortB'yi yak söndür içince doğru. Tek sorun LED bağlarsan sen göremezsin! Görebilmek için ya port çıkışları arasında gecikme koymalısın ya da timer olayına geçmen gerekir.

MOVLW       d'255'
MOVWF       PORT B
call gecikme
CLRF           PORT B
call geçikme
GOTO          BASLA

gecikme kodlarını kendin oluşturabilirsin. Çünkü işlemcinin saat hızına göre değişir...


CLRF.         TRIS B
değil de
CLRF         TRIS B
şeklinde yaz.
ambar7

barbelo

Sayın ambar 7 CLRF.  TRIS B ' de  " . " yanlışlıkla koymuşum o sorun değil :) Gecikmeleri ne için koyuyorduk onu izah edebilirseniz sevinirim efendim .

Kabil ATICI

İşlemcin diyelim 4MHz'de çalışıyor. Ve diyelim ki 1 saat frekansından en iyi ihtimalle 1 komut işlensin, bazıları 2 veya 3 saat darbesinde komut işlenir.

BASLA
MOVLW       d'255'           ;---->1 saat çevrimi
MOVWF       PORT B            ;---->1 saat çevrimi
CLRF           PORT B           ;---->1 saat çevrimi
GOTO          BASLA           ;---->2 saat çevrimi
kabaca 800Khz'lik bir sinyale dek düşer. (ama bazı işlemcilerde iç bölücüler nedeniyle bu değer daha da düşer)

şimdi böyle bir işlemde portB'den hangi frekansta yanıp sönme yapar? Gecikme koymazsak ve çıkışa LED bağlarsam bu yanıp sönmeyi göremeyiz. Çünkü insan gözü ancak saniyenin 20'de biri süresindeki değişimleri görebilir.
LED'lerin yanıp sönmesini görmek için kabaca 800KHz'lik sinyali en iyi ihtimalle 5Hz'e indirilmesi gerekir. İşte burada araya  gecikme için işlemciyi meşgul edecek kodlar eklenerek yanıp sönme durumu geciktirilir.

BASLA
MOVLW       d'255'
MOVWF       PORT B
NOP                                                 ;en basit gecikme komutu  1 saat çevirimi
CLRF           PORT B
NOP                                                 ;en basit gecikme komutu  1 saat çevirimi
GOTO          BASLA


örneğin osilaskopta bakarsan orjinal kodun
   _     _    _
_|  |_|  |_|  |_
şeklinde görürsün

ama araya gecikme koyduğunda bu sinyal kabaca (gecikmeye bağlı olarak)
          _____________                       _____________                        ____________   
_____|                       |____________|                       |____________|

Şeklinde görünür.
ambar7

barbelo

Teşekkür ederim Sayin ambar7 ve yardimci olmaya çalişan diğer abilerim .