PIC16F84 ile Buton Kontrollü Led Efekt Devresi

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ı

;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
