Ynt: assembly yarın sınavım var geçikmeleri anlamadım

Başlatan sayangku, 04 Ocak 2015, 21:44:46

sayangku

sa arkadaşlar assembly ile başım dertte kodların bazilarini anliyorum baziliarini hiç anlamıyorum
mesala zaman geçikmesi 2sn yapmak istiyorum bunu nasıl yapablirim internete baktım videolu anlatım bulamadım
bilen varda yardım ederse sevinirim arkadaşlar

mesaj birleştirme:: 04 Ocak 2015, 21:46:24

birde led atıyorum 2sn yancak sonra söncek sonra yancak bunu ccs c çok kolay ama assembly sıkıntı  hoca kendi bilmiyor  dili bizi ögretmeye çalışıyor
nolcak böyle bende bilmiyorum :)

Kabil ATICI

1 saniye, veya 0.5 saniye yapabiliyor musun?
Yapabiliyorsan
gecikme bölümünü alt program yap,
1 saniyelik yaptı isen 2 kez arka arkaa çağır,
0.5saniyelik yaptı isen arka arkaya 4 kez çağır senin işini görür.
ambar7

sayangku

hocam ben saniye hesaplamayı bilmiyorum benim şuan en iyi ögrendigim şey bir butonla ledleri açıp kapamayı ögrendim
saniye hesabinı ve nasıl bir kod yazıcam bunu bilmiyorum yarın sorucak sorulardan birtanesi
soru trafik ışıkları şu şekilde çalışacaktır PortA sıfırdaki start butonuna basınca çalışmaya başlıcaktır
ilk önce rbsıfırdaki kırmızı led yanacak ,20sn sonra rbbirdeki sarı ışık yanacaktır  sarı ışık 2sn sonra sönecek ve rbikideki yeşil ışık yanacaktır 30sn sonra
yeşil ışık sönecek ve sarı ışık yanacaktır 2sn sonra sarı sönecek kırmızı yanacaktır program bu şekilde devamli program periyodik olarak devam edecektir
ölme eşegim ölme ben bunu yazsam zaten assembly çözerim
napıcam bilmiyorum

Kabil ATICI

timer1 olayına bak. İnternette yeteri kadar örnek var.
ambar7

Salih

Alıntı Yap
Tek Döngü Zaman Geciktirme
Bir gecikme döngüsü hazırlanırken sayaç olarak kullanılacak bir file register tanımlanır. Bu register içerisine döngünün tekrar sayısı yüklendikten sonra DECFSZ komutu ile tekrar sayısından her defasında "1" çıkartılır. Çıkarma sonucu "0" olunca döngü sona erdirilir. Şimdi bu şekilde düzenlenen bir döngüde kaç saykıl oluştuğunu akış diyagramını çizerek görelim. SAYAÇ registeri içerisine yüklenen sayı N dir.




N sayısının bulunması(X)                       
PlC' e 4 MHz lik frekans uygulandığında bir komut saykılının 1 μ Sn olacağını biliyoruz. Bu durumda N sayısını belirlemek kolaydır. 100 μ Sn' lik bir gecikme için 100 saykıl' lık bir gecikme döngüsü oluşturulmalıdır. N sayısını hesaplarsak N=KSS/3=100/3=33,3 olmalıdır. Bu sayı yaklaşık 33 Desimal sayısıdır. Heksadesimal dönüştürürsek, h'21' eder.

(X)Problem 9a -) PortB' nin sıfırıncı çıkışını 100 μ s "1" ve 100 μ s "0" yapan programı yazınız.

INCLUDE       "P16F84.INC"
LIST          P=16F84
SAYAC       EQU    h'0C'             ;SAYAC registerini tanımla
BSF          STATUS, 5            ;BANK1'e geç
CLRF       TRISB                     ;PortB' nin tüm uçlarını çıkış yap
BCF          STATUS, 5            ;BANK0'a geç
CLRF       PORTB                     ;PortB' yi temizle
DONGU
MOVLW       h'21'                     ;W registere h'21' yükle. 100 μ S için
MOVWF       SAYAC              ;W  SAYAC
BSF          PORTB, 0                 ; 1  PortB.0
YER1         
DECFSZ       SAYAC, F              ;SAYAC  = SAYAC - 1
GOTO      YER1   
BCF          PORTB, 0                 ; 0  PortB.0
MOVLW       h'21'                     ;W registere h'21' yükle
MOVWF       SAYAC              ; W  SAYAC
YER2         
DECFSZ       SAYAC, F              ; SAYAC  = SAYAC - 1
       GOTO      YER2         ; YER2 'ye git
      GOTO      DONGU      ; DONGU' ye git
      END      


mesaj birleştirme:: 04 Ocak 2015, 23:04:00

Alıntı Yap
Çift Döngülü Zaman Geciktirme(X)
Maksimum gecikme yapan tek döngüde oluşturulan 765 saykıl' lık süre az gelebilir. Bu durumda iç içe iki veya daha fazla döngü kullanılabilir. Programlarda zaman geciktirme işlemlerinde kullanacağımız çift döngünün akış diyagramını ve programı yapalım.

N Sayısının Hesaplanması
SAYACI registeri içerisine konulan sayıya M, SAYAC2 registerine yüklenen sayıya da N diyerek programı yazalım.
Toplam komut saykıl sayısı M ve N sayılarının 3 katı kadardır. Öyleyse bunu formül biçiminde yazarsak;
Yaklaşık olarak   KSS=3xMxN      olur.
Bu geciktirme programında M ve N sayıları h'FF' olduğuna göre, elde edilen komut saykıl sayısı maksimum elde edilebilecek olandır. Bu sayı da,  KSS= 3x255x255 = 195075 saykıl eder. 1 MHz lik dahili clock saykılında bu süre 195075 μ S = 195 mS (yaklaşık)
Örnek- Çift döngülü bir zaman geciktirme programından 12 mS lik bir gecikme isteniyorsa M ve N sayıları ne olmalıdır?
Not: PIC' e harici olarak uygulanan clock frekansı= 4 MHz' dir. Bu frekans 4' e bölündüğünde 1 MHz lik dâhili komut frekansı elde edilir.
Çözüm:
KSS=3xMxN dir. M ve N sayılarına aynı sayıları vererek bu programı yapacağımızı düşünelim.
M=N olduğundan yukarıdaki formülü,  KSS=3xM2 olarak yazabiliriz.
12 mS= 12000 μ S eder. Dahili clock frekansı 1 MHz olduğundan 12000 komut saykılı gerekir.
12000=3xM2
M2=12000/3        M= √4000 = 63.2 Desimal  = h'3F'    M ve N birbirine eşit olduğundan         
M=h'3F'    N=h'3F'   olarak bulunur.
Böylece çift döngülü zaman geciktirme devresinde 12 mS lik zaman gecikmesi için, SAYAC1 ve SAYAC2 registerleri içerisine h'3F' sayısı yüklenmelidir. Eşit kabul etmezsek M=100    N=40 değerlerini de kullanabiliriz.
İki yöntemde aynı gecikmeyi sağlar.

Çözülecek Problem: 4 MHz lik clock osilatöründen uygulanan frekansla çalışan bir PIC devresinde 100 mS lik bir zaman gecikmesi yapan programda SAYAC1 ve SAYAC2 registerlerinin içerisine hangi heksa Desimal sayı yüklenmelidir?
;PortB'ye bağlı ledleri 100 ms "1" ve 100 ms "0" yapan program

	        INCLUDE "P16F84.INC"
		LIST 	P=16F84 
SAYAC1 	EQU 	h'0C'        ;SAYAC registerini tanımla
SAYAC2 	EQU 	h'0D'        ;SAYAC registerini tanımla
		BSF 	STATUS, 5    ;BANK1'e geç
		CLRF 	TRISB        ;PortB'nin tüm uçlarını çıkış yap
		BCF 	STATUS, 5    ;BANK0'a geç
		CLRF 	PORTB        ;PortB'yi temizle
DONGU 
		MOVLW	h'FF'	
		MOVWF	PORTB
		CALL	GECIK100MS	 ;Altyordamı çağır
		CLRF	PORTB
		CALL	GECIK100MS
		GOTO	DONGU		 ;DONGU'ye git
GECIK100MS
		MOVLW	d'182'	
		MOVWF	SAYAC1	
DONGU1			
		MOVLW	d'182'	
		MOVWF	SAYAC2	
DONGU2					
		DECFSZ	SAYAC2,	F	
		GOTO	DONGU2			
		DECFSZ	SAYAC1,	F
		GOTO	DONGU1		
		RETURN
		END


Alt yordam kullanılarak yapılmış 1sn ve 2 sn lik gecikmeler.

;PortB ye bağlı ledleri 1 sn yakan ve 2 sn sönük tutan program
;Gecikme için alt yordam kullanılmıştır

		INCLUDE "P16F84.INC"
		LIST 	P=16F84
SAYAC	EQU 	h'0C'        ;SAYAC registerini tanımla
SAYAC1 	EQU 	h'0D'        ;SAYAC1 registerini tanımla
SAYAC2 	EQU 	h'0E'        ;SAYAC2 registerini tanımla
		BSF 	STATUS, 5    ;BANKI'e geç
		CLRF 	TRISB        ;PortB'nin tüm uçlarını çıkış yap
		BCF 	STATUS , 5   ;BANK0'a geç
		CLRF 	PORTB        ;PortB'yi temizle
DONGU 
		MOVLW	h'FF'	
		MOVWF	PORTB
		CALL	GECIK1SN	;Altyordamı çağır
		CLRF	PORTB
		CALL	GECIK2SN
		GOTO	DONGU		; DONGU'ye git
GECIK1SN
		MOVLW	h'0A'
		MOVWF	SAYAC
YER
		CALL	GECIK100MS
		DECFSZ	SAYAC , F
		GOTO	YER
		RETURN
GECIK2SN
		MOVLW	h'14'
		MOVWF	SAYAC
YER1
		CALL	GECIK100MS
		DECFSZ	SAYAC , F
		GOTO	YER1
		RETURN

GECIK100MS
		MOVLW	d'182'	
		MOVWF	SAYAC1	
DONGU1			
		MOVLW	d'182'	
		MOVWF	SAYAC2	
DONGU2					
		DECFSZ	SAYAC2 , F	
		GOTO	DONGU2			
		DECFSZ	SAYAC1 , F
		GOTO	DONGU1		
		RETURN
		END

sayangku

teşekkür ederim hocam verdiginz örnek sayesinde anladim