PIC DE SAYICI

Başlatan betüll, 23 Haziran 2011, 15:26:01

betüll

ARKADASLAR MERABA;
ÜZERİNDE CALIŞTIĞIM Bİ SAYICI UYGULAMASI VAR.PROGRAM KISACA SU İŞİ YAPIYOR;
A3 BUTONU ARTIRIR;
A4 BUTONU AZALTIR;
B7 BUTONU KESME OLUSTURARAK EN SON DEGERDEN İTİBARAN 1 SANİYE ARALIKLARLA SAYMAYA BASLAR,
BURAYA KADAR HER SEY YOLUNDA..
KESME OLUSTURUP SAYDIRMAYA BASLIYORUM ANCAK COK HIZLI SAYIYOR.VERDİĞİM GECİKME GÜRESİNİ GÖRMÜYOR.ANİDEN SIFIRLIYOR..:(
BU KONUDA BANA YARDIM EDER MİSİNİZ..
PROGRAM ASM İLE YAZILMIŞTIR....

Edit, OG (Küçük harf lütfen)

KOD;
LIST P=16F84A		
              #include "P16F84A.INC"
              __CONFIG _WDT_OFF &_XT_OSC &_PWRTE_ON &_CP_OFF
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
	ORG		h'0000'
	GOTO 		BASLAMA
	ORG		h'0004'
	GOTO		KESME
BASLAMA
	MOVLW	b'10111111'
	MOVWF	OPTION_REG
	BCF		STATUS,5
	BCF		INTCON,1
	BSF		INTCON,7
	BSF		INTCON,4
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
LSB	EQU	H'0021'
MSB	EQU	H'0022'
SAYI1	EQU	H'0023'
SAYI2	EQU	H'0024'
SAYI3	EQU	H'0025'
SAYI4	EQU	H'0026'
SAYI5	EQU	H'0027'
DEGER	EQU	H'0028'
BIR	EQU	H'0029'
ON	EQU	H'002A'
YUZ	EQU	H'002B'
RAKAM	EQU	H'002D'
RAKAM1	EQU	H'002E'
TEMP	EQU	H'002F'
SAYAC1	EQU h'0C'
SAYAC2	EQU h'0D'
;-------------
BASLA
	CLRF	 MSB
	CLRF	 LSB
	BSF	 STATUS,5
	MOVLW 	 B'11111000'
	MOVWF    TRISA
	MOVLW 	 B'00000001'	
	MOVWF	 TRISB
	BCF	 STATUS,5
	CLRF	PORTB
	CLRF	PORTA
	CLRF	BIR
	CLRF	ON
	CLRF	YUZ
	CLRF	SAYI1
	CLRF	SAYI2
	CLRF	SAYI3
	CLRF	SAYI4   
	GOTO	ANA
;-----------
ART
	INCF	BIR,F
	MOVLW	.10
	SUBWF	BIR,W
	BTFSS	STATUS,Z
	GOTO	ASON
	CLRF	BIR
	INCF	ON,F
	MOVLW	.10
	SUBWF	ON,W
	BTFSS	STATUS,Z
	GOTO	ASON
	CLRF	ON
	INCF	YUZ,F
	MOVLW	.10
	SUBWF	YUZ,W
	BTFSS	STATUS,Z
	GOTO	ASON
	CLRF	YUZ
ASON
	CALL	EKRAN
	BTFSS	PORTA,3
	GOTO	ASON
	GOTO	ANA
;-----------
AZAL
	MOVLW	.1
	SUBWF	BIR,F
	BTFSC	STATUS,C
	GOTO	ESON
	CLRF	BIR
	MOVLW	.1
	SUBWF	ON,F
	BTFSC	STATUS,C
	GOTO	BIR9
	CLRF	ON
	MOVLW	.1
	SUBWF	YUZ,F
	BTFSC	STATUS,C
	GOTO	ON9
	CLRF	YUZ
	GOTO	ESON
;----------
YUZ9
	MOVLW	.9
	MOVWF	YUZ
ON9
	MOVLW	.9
	MOVWF	ON
BIR9
	MOVLW	.9
	MOVWF	BIR
ESON
	CALL	EKRAN
	BTFSS	PORTA,4
	GOTO	ESON
	GOTO	ANA
;-----------
ANA
	CALL	EKRAN
	BTFSS	PORTA,4
	GOTO	AZAL
	BTFSS	PORTA,3
	GOTO	ART
	GOTO	ANA
;----------
EKRAN
	MOVLW	.5
	MOVWF	RAKAM
	CLRF	PORTB
	MOVLW	.255
	MOVWF	PORTA
GOSTER
	BCF	PORTA,0
	BSF	PORTA,1
	BSF	PORTA,2
	MOVF    BIR,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CALL	GECIKME
	CLRF	PORTB
	BSF	PORTA,0
	BCF	PORTA,1
	BSF	PORTA,2
	MOVF    ON,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CLRF	PORTB
	BSF	PORTA,0
	BSF	PORTA,1
	BCF	PORTA,2
	MOVF    YUZ,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CLRF	PORTB
	DECFSZ	RAKAM,F
	GOTO	GOSTER
RETURN
GECIKME
	MOVLW	.5
	MOVWF	MSB
D11	
	MOVLW	.55
	MOVWF	LSB
D22
	DECFSZ	LSB,F
	GOTO	D22
	DECFSZ	MSB,F
	GOTO	D11
	RETURN
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
KESME
	BCF		INTCON,INTE
	BTFSC		PORTB,0
	GOTO		KESME
AZAL1
	MOVLW	.1
	SUBWF	BIR,F
	BTFSC	STATUS,C
	GOTO	ESON1
	CLRF	BIR
	MOVLW	.1
	SUBWF	ON,F
	BTFSC	STATUS,C
	GOTO	BIR91
	CLRF	ON
	MOVLW	.1
	SUBWF	YUZ,F
	BTFSC	STATUS,C
	GOTO	ON91
	CLRF	YUZ
	GOTO	ESON1
;----------
YUZ91
	MOVLW	.9
	MOVWF	YUZ
ON91
	MOVLW	.9
	MOVWF	ON
BIR91
	MOVLW	.9
	MOVWF	BIR
ESON1
	CALL	EKRAN1
	GOTO	AZAL1

;----------
EKRAN1
	MOVLW	.5
	MOVWF	RAKAM
	CLRF	PORTB
	MOVLW	.255
	MOVWF	PORTA
GOSTER1
	BCF	PORTA,0
	BSF	PORTA,1
	BSF	PORTA,2
	MOVF    BIR,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CALL	GECIKME
	CLRF	PORTB
	BSF	PORTA,0
	BCF	PORTA,1
	BSF	PORTA,2
	MOVF    ON,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CLRF	PORTB
	BSF	PORTA,0
	BSF	PORTA,1
	BCF	PORTA,2
	MOVF    YUZ,W
        CALL	TABLO
	MOVWF   PORTB
	CALL	GECIKME
	CLRF	PORTB
	DECFSZ	RAKAM,F
	GOTO	GOSTER1
RETURN

	BCF		INTCON,INTE
	BSF		INTCON,INTE
RETFIE
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
BEKLE
	MOVLW	d'255'
	MOVWF	SAYAC2
DONGU1
	MOVLW	d'128'
	MOVWF	SAYAC1
DONGU2
	DECFSZ	SAYAC2,F
	GOTO	DONGU2	
	DECFSZ	SAYAC1,F
	GOTO	DONGU1
	RETURN
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
TABLO
	ADDWF	PCL,F
	RETLW	b'01111110'
	RETLW	b'00001100'
	RETLW	b'10110110'
	RETLW	b'10011110'
	RETLW	b'11001100'
	RETLW	b'11011010'
	RETLW	b'11111010'
	RETLW	b'00001110'
	RETLW	b'11111110'
	RETLW	b'11011110'
	END


ideallerim neredeyse ben oradayım..

Tagli

Eleştiri ile başlayayım: İçinde düzgün şekilde yorumlar, açıklamalar yazılmamış assembly kodunu anlamak oldukça zordur, ve bu durum bizim gibi 3. şahısları daha işin başında yıldırır ve "kim uğraşacak şimdi..." havasına sokar. Bizi geç, 1 hafta sonra yazdığın kodu sen bile çözemezsin.

Sorunun tanımından da yola çıkarak şöyle bir bakınca ilk göze çarpan eksik INTF bitinin (INTCON.1) kesme çıkışından önce 0 yapılmamış olması, ki bu durumda kesmeden çıkmanla tekrar girmen bir olur (yani asla çıkamazsın). Sen sürekli INTE biti ile oynamışsın, ama buna hiç gerek yok.

Ayrıca, kesme girişinde hiç bir yedekleme yapmıyorsun. Bu durumda her şey olabilir, PIC'in nasıl çalışacağı sarhoş bir kara sineğin nereye uçacağı kadar belirsizdir. Hiç değilse en temel yedeklemelerin yapılması gerekir, ki bunlar W ile STATUS register'larıdır (unuttuğum var mı acaba?). Kesme çıkışında yedeklenen register'ları normal yerlerine geri yüklemen gerekir.
Gökçe Tağlıoğlu

betüll

aslında kesmedeki amaç şu;
b0 harici kesmesi olusturarak sürekli 1 saniye aralılkarla geri sayacak
ve sayı sıfırlanınca öylece bitecek yani register lara geri deger yüklememe gerek yok..kesme alt programı işlenip program son bulacak...bu yüzden eklemedim..
ayrıca eleştirilerde haklısınız;düzenleyip tekrar yükleyeyim....
ideallerim neredeyse ben oradayım..

Tagli

1 saniye beklemeyi yapan yer neresi? BEKLE alt programı ise, hiçbir yerde çağrılmamış gibi. Bunun kesme kodunun içinde bir yerde çağrılması gerekli sanırım.
Gökçe Tağlıoğlu

muratyamak10

kesmede arakadaş inte biti ile intf bitini karıştırmış.birisi enable yani izin biti diğeri kesme biti:)) 8) ::) ;D

Okan AKÇA

hangi cagda yaşıyoruz asm  10 sene once kullanıyordum  c ye gecin derhal

muhittin_kaplan

neden ? c çok mu matah
Tamam Kabul Ediyorum Matah, Ama Böyle bir Yaklaşım Matah Değil.