butonlu_ledler

Basit bir uygulama PIc ile Buton Kontrolü konusunda faydalı olabilcek bir kaynak

Program temel olarak PORTA ya bağlı 4 adet butonu sırası ile kontrol edip
butonlara basılıp basılmadığını kontrol ediyor. Herhangi bir butona basıldığı zaman
programlama aşamasında bizim tasarladığımız komutları yerine getiriyor(ilk 4 ledi yak, son 4 ledi yak vb)

Ledlerin flaş sayısını her BUTON için farklı farklı yapabilirsiniz.Bunun için;

MOVLW 0X03
MOVWF KNT

komut satırlarında yer alan ‘0×03′ deÄŸeri yerine istedÄŸiniz deÄŸeri(0XA3) yazmanız gerekecek.

FlaÅŸ sayısın en fazla 255 kere tekrarlatabilirsinz. Çünkü 0×03 yerine
yazacağınız en büyük deÄŸer 0xFF dir bunun karşılığıda 255′e denk gelir.

Uygulamanın simülasyon ve kod dosyaları

buton_kontrol_16f

Akış Diagramı
akis_diagrami-150x150

	;PIC16F84 İLE
	;BUTON KONTROLLÜ LED EFEKT DEVRESİ
	;-------------------------------------
	;WWW.320VOLT.COM
	;-------------------------------------
	LIST	 P=16F84		;PIC16F84' Tanıt
	INCLUDE	 "P16F84.INC"	;PIC'in INCLUDE DOSYALARI TANIT
SAY1	EQU	0X0C
SAY2	EQU	0X0D
KNT		EQU	0X0E
	BSF		STATUS,5		;BANK1'E GEÇ
	CLRF	TRISB			;TRIB'Yİ TEMİZLE(PORTB ÇIKIŞ)
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	TRISA			;W'Yİ TRISA'YA YÜKLE(PORTA GİRİŞ)
	BCF		STATUS,5		;BANK0'A GEÇ
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
BIR_TEST
	BTFSC	PORTA,0			;PORTA'NIN 0. BİTİ '0' MI?
	GOTO	IKI_TEST		;HAYIR. IKI_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET.	W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
BIR
	MOVLW	0X0F			;W'YE h'0F' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	BIR				;HAYIR. BIR ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
IKI_TEST
	BTFSC	PORTA,1			;PORTA'NIN 1. BİTİ 'O' MI?
	GOTO	UC_TEST			;HAYIR. UC_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
IKI
	MOVLW	0XF0			;W'YE h'F0' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	IKI				;HAYIR. IKI ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
UC_TEST
	BTFSC	PORTA,2			;PORTA'NIN 2. BİTİ 'O' MI?
	GOTO	DORT_TEST		;HAYIR. DORT_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNTQ			;W'Yİ KNT'YE YÜKLE
UC
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	CLRF	PORTB			;PORTB'Yİ TEMİZLE
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	UC				;HAYIR. UC ETİKETİNE GİT
	GOTO	BIR_TEST		;EVET. BIR_TEST ETİKETİNE GİT
DORT_TEST
	BTFSC	PORTA,3			;PORTA'NIN 3. BİTİ 'O' MI?
	GOTO	BIR_TEST		;HAYIR. BIR_TEST ETİKETİNE GİT
	MOVLW	0X03			;EVET. W'YE h'03' YÜKLE
	MOVWF	KNT				;W'Yİ KNT'YE YÜKLE
DORT
	MOVLW	0X0F			;W'YE h'0F' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	MOVLW	0XF0			;W'YE h'F0' YÜKLE
	MOVWF	PORTB			;W'Yİ PORTB'DEN ÇIK
	CALL	ZAMAN			;ZAMAN ALT PROGRAMINI ÇAĞIR
	DECFSZ	KNT,F			;KNT'DEN '1' ÇIKAR KNT'YE YÜKLE. KNT '0' Mİ?
	GOTO	DORT			;HAYIR. UC ETİKETİNE GİT
	CLRF	PORTB			;EVET. PORTB'Yİ TEMİZLE
	GOTO	BIR_TEST		;BIR_TEST ETİKETİNE GİT
ZAMAN
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	SAY1			;W'Yİ SAY1'E YÜKLE
TEK1
	MOVLW	0XFF			;W'YE h'FF' YÜKLE
	MOVWF	SAY2			;W'Yİ SAY2'E YÜKLE
TEK2
	DECFSZ	SAY2,F			;SAY2'DEN '1' ÇIKAR SAY2'YE YÜKLE. SAY2 '0' Mİ?
	GOTO	TEK2			;HAYIR. TEK2 ETİKETİNE GİT
	DECFSZ	SAY1,F			;EVET. SAY1'DEN '1' ÇIKAR SAY1'YE YÜKLE. SAY1 '0' Mİ?
	GOTO	TEK1			;HAYIR. TEK1 ETİKETİNE GİT
	RETURN					;EVET. ALT PROGRAMIN SONU
	END						;PROGRAMIN SONU