SAYGIDEĞER ARKADAŞLAR PIC16F84A İLE BİR RÖLE KONTROLÜ DEVRESİ YAPMAK İSTİYORUM.YAZDIĞIM BU PROGRAMI NASIL DEĞİŞTİRMELİYİM Kİ, BİR BUTONA DEVAMLI BASILINCA BİR LEDİ 3- 5 SANİYE YAKIP SÖNDÜREBİLEYİM.BENİM BURDA YAPMAK İSTEDİĞİM, BİR BUTONU BİR RÖLE VASITASIYLA BİRBİRİNE DEVAMLI DEYDİREREK BİR LEDİ YADA BAŞKA BİR DEVREYİ BELLİ BİR SÜRE 3 - 5 SANİYE KADAR YAKIP SÖNDÜRMEK.AŞAĞIDA ÖRNEK BİR YAZILIM YAZDIM.LÜTFEN BU KONU HAKKINDA BANA YARDIMCI OLURSANIZ SEVİNİRİM.
Bir butona bir kere basınca ledi yakan, iki kere basınca söndüren pic programı.
;****************************************************** ;**bir butona basarak bir ledi yakan pic programıdır ** ;**03.08.2001. ali sütçü ** ;****************************************************** ;RA0 a bagli butona basıldıgında RB0 a bağlı led yanar ;RA0 a tekrar basılınca led söner.... ;------------------------------------------------------ ;-- ANA PROGRAM BAŞLANGICI----------------------------- ;------------------------------------------------------ LIST P=16F84 ; kullandığımız pic'i tanıttık. #INCLUDE<P16F84.INC> ; mplab da bulunan 16f84 dosyalarını çagırdık BSF STATUS,5 ; bank 1'e gec MOVLW 0XFF ; w<--< 0xff yükledik MOVWF TRISA ; portanın hepsi giriş CLRF TRISB ; portbnin hepsi çıkış BCF STATUS,5 ; bank 0'a geç CLRF PORTB ; portb yi sıfırla BUTON BTFSC PORTA,0 ; portanın 0'ıncı pini 0' mı? GOTO BUTON ; hayırsa tekrar kontrol et BUTON1 BTFSS PORTA,0 ; portanın 0'ıncı pini 1' mi? GOTO BUTON1 ; hayırsa tekrar kontrol et BTFSC PORTB,0 ; led sönükmü? GOTO SON ; hayırsa sön'git BSF PORTB,0 ; evetse ledi yak GOTO BUTON ; tekrar butonu kontrol et SON BCF PORTB,0 ; ledi söndür GOTO BUTON ; tekrar butonu kontrol et END ; programı bitir
niye bu kadar programı döndrğyorsun ki aşağıdaki şekilde yapsan daha mantıklı bence
LIST P=16F84 ; kullandığımız pic'i tanıttık. #INCLUDE<P16F84.INC> ; mplab da bulunan 16f84 dosyalarını çagırdık SAYAC EQU '0C' BSF STATUS,5 ; bank 1'e gec MOVLW 0XFF ; w<--< 0xff yükledik MOVWF TRISA ; portanın hepsi giriş CLRF TRISB ; portbnin hepsi çıkış BCF STATUS,5 ; bank 0'a geç MOVLW 0XFF ; w<--< 0xff yükledik MOVWF SAYAC CLRF PORTB ; portb yi sıfırla BUTON BTFSS PORTA,0 GOTO BUTON DONGU DECFSZ SAYAC GOTO DONGU BSF PORTB,0 END
Selam,
"BİR LEDİ YADA BAŞKA BİR DEVREYİ BELLİ BİR SÜRE 3 - 5 SANİYE KADAR YAKIP SÖNDÜRMEK"
bunun için bir zaman döngüsü yapman gerek. Eğer 4Mhz lik kristal kullanıyorsan, bu programa yazdığın her satırın 1 mikrosaniyede işleme alındığı anlamına gelir. bir ledi 3 saniye yakmak için 3 milyon satıra ihtiyacın var, bu da 16F84 için bellek aşımı anlamına gelir. Yani aşağıdaki gibi bir döngüyi ihtiyacın var...Burada W registerine atayacağın sayı 255 (decimal) ı geçemez. Buna göre gecikme istediğin zamana göre döngü sayısını artırabilirsin (3lü döngü, 4lü, 5li, vs...) daha fazla gecikmeler için TMR0 timer registerini kullanman gerekir. iyisimi şimdi ona hiç kasma aşağıdaki senin işini görür...Kolay gelsin