Herkese merhaba.
sizler için çok basit bir soru olacak ama çözemediğim bir konu var.
elimde .bas uzantılı bir program kodu var. bu kodlarda süre değişikliği yapmam gereken kısımlar var. bu .bas uzantılı dosyası hangi program ile açıp değişikliği yapıp derledikten sonra .hex ' e çevirecek acaba. o programın hangi program olduğunu bilmiyorum.
Yardımcı olursanız çok sevinirim.
şimdiden teşekkür ederim.
proton basic dosyası olması lazım.
Pic basic pro'da .bas uzantısı veriyor diye biliyorum.
evet bas uzantılı dosya Pic basic pro'ya ait.
PBP hem bas hemde PBP uzantısı verir.
Proton da bas uzantısı veriyor. Genelda basiz derleyicileri hep bas uzantısı verir.
Ne olduğunu anlamak için programa bakmak gerekir.
Ete
Proton yüklersen açabilirsin.
Kodun bir parçasını görebilir miyiz? Çünkü bas uzantısı veren birçok program var.
değerli cevaplarınız için çok teşekkür ederim. pic basic proyu indiriyorum şimdi. deneyeyim bakalım. bu arada değişiklik yapacağım kod aşağıda.
; @ device pic16F877, hs_osc, wdt_on, pwrt_on, lvp_off, protect_off
DEFINE OSC 20
BUZZER VAR PORTA.0
ALARM_LED VAR PORTA.1
ALARM_OUT VAR PORTA.2
TEL_ON VAR PORTA.3
TEL_AUDIO VAR PORTA.4
PIRINPUT VAR PORTA.5
ROW2 VAR PORTB.0
ROW4 VAR PORTB.1
ROW3 VAR PORTB.2
COL1 VAR PORTB.3
COL2 VAR PORTB.4
COL3 VAR PORTB.5
ROW1 VAR PORTB.6
TUS_DONUS VAR BYTE
HAFIZA_NO VAR BYTE
DEGER VAR BYTE
SANIYE_SAY VAR BYTE
I VAR BYTE
EEPROM [0,0,0,0,5,3,2,6,0,9,6,9,9,6,5,3,2,6,0,9,6,9,9,6,5,3,2,6,0,9,6,9,9,6,5,3,2,6,0,9,6,9,9,6]
CMCON=7
; ADCON1=7 ; 819 ÿİÿÇÿİN
OPTION_REG=0 ;pull ups enable
OPTION_REG.7=0
OUTPUT BUZZER
OUTPUT ALARM_LED
OUTPUT ALARM_OUT
OUTPUT TEL_ON
OUTPUT TEL_AUDIO
INPUT PIRINPUT
OUTPUT ROW1
OUTPUT ROW2
OUTPUT ROW3
OUTPUT ROW4
INPUT COL1
INPUT COL2
INPUT COL3
TRISB= %00111000
TRISA= %00100000
PORTA=0
PORTB=0
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
HAFIZA_NO=0
MAIN_LOOP:
; ALARM KAPALI DURUMDA
LOW ALARM_LED
CALL TUSLARI_TARA
IF TUS_DONUS=12 THEN KAYIT_MENUSU
IF TUS_DONUS<10 THEN SIFRE_GIR_ALARM_AC ; ÿŞÿİFRE GÿİRÿİLÿİP ALARM ÿÇALIÿŞTIRILACAK
GOTO MAIN_LOOP
; ---------------------------------------------------
; ÿŞÿİFRE GÿİRÿİLÿİP ALARM ÿÇALIÿŞTIRILACAK
SIFRE_GIR_ALARM_AC:
READ 0,HAFIZA_NO ; ÿŞÿİFRENÿİN 1. KARAKTERÿİ
IF TUS_DONUS<>HAFIZA_NO THEN ALARM_ACMADAN_CIK
ALARM_AC_1:
CALL TUSLARI_TARA
IF TUS_DONUS>9 THEN ALARM_AC_1
READ 1,HAFIZA_NO ; ÿŞÿİFRENÿİN 2. KARAKTERÿİ
IF TUS_DONUS<>HAFIZA_NO THEN ALARM_ACMADAN_CIK
ALARM_AC_2:
CALL TUSLARI_TARA
IF TUS_DONUS>9 THEN ALARM_AC_2
READ 2,HAFIZA_NO ; ÿŞÿİFRENÿİN 3. KARAKTERÿİ
IF TUS_DONUS<>HAFIZA_NO THEN ALARM_ACMADAN_CIK
ALARM_AC_3:
CALL TUSLARI_TARA
IF TUS_DONUS>9 THEN ALARM_AC_3
READ 3,HAFIZA_NO ; ÿŞÿİFRENÿİN 4. KARAKTERÿİ
IF TUS_DONUS<>HAFIZA_NO THEN ALARM_ACMADAN_CIK
; ALARM DEVREYE ALINIYOR
GOTO ALARM_DEVREYE_AL:
ALARM_ACMADAN_CIK:
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
GOTO MAIN_LOOP
; -----------------------------------
; ALARM 30 SANÿİYE BEKLENECEK VE DEVREYE ALINACAK
ALARM_DEVREYE_AL:
FOR HAFIZA_NO=0 TO 50
TOGGLE ALARM_LED
CALL ZIRLA
PAUSE 300
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUSA BASILMIS. ALARM ÿİPTAL
LOW ALARM_LED
HIGH BUZZER
GOTO MAIN_LOOP
ENDIF
NEXT
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA ; SON UYARI YAPILDI. ALARM ARTIK DEVREDE
HIGH ALARM_LED
HAREKET_BEKLE: ; ALARM AÿÇIK VE HAREKET GELENE KADAR BURADA BEKLE
IF PIRINPUT=0 THEN HAREKET_BEKLE
PAUSE 200
IF PIRINPUT=1 THEN HAREKET_VAR
GOTO HAREKET_BEKLE
; ---------------------------------------------------
HAREKET_VAR:
; HAREKET VAR ÿİSE 30 SANÿİYE BEKLENECEK
; ÿŞÿİFRE GÿİRÿİLMEZSE ALARM ÿÇALACAK VE
; TELEFONLAR ARANACAK
SANIYE_SAY=0
HAFIZA_NO=0
BEKLE_30_SN:
SANIYE_SAY=SANIYE_SAY+1
IF SANIYE_SAY>62 THEN GOTO SURE_DOLDU_TEL_ARA
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUÿŞA BASILMIÿŞ
READ HAFIZA_NO,DEGER
IF TUS_DONUS=DEGER THEN ; TUS KARAKTERI DOÿĞRUDUR
HAFIZA_NO=HAFIZA_NO+1
ELSE
HAFIZA_NO=0
ENDIF
ENDIF
IF HAFIZA_NO>3 THEN MAIN_LOOP ; ÿŞÿİFRE DOÿĞRUDUR. ANA MENUYE GÿİT
PAUSE 200
CALL ZIRLA
TOGGLE ALARM_LED
GOTO BEKLE_30_SN
; ---------------------------------------------
SURE_DOLDU_TEL_ARA:
; 1. TELEFON ARANIYOR
HIGH ALARM_OUT ; ALARM ÿÇIKIÿŞI VER
LOW BUZZER ; BUZZER SÿÜREKLÿİ ÿÇAL
HIGH TEL_ON ; TELEFON HATTI AÿÇILDI.
PAUSE 500
HAFIZA_NO=4
SANIYE_SAY=0 ; ÿŞÿİFRE ÿİÿÇÿİN KULLANILACAK
TEL_1_CEVIR:
READ HAFIZA_NO,DEGER
IF DEGER>9 THEN TEL_1_BITTI
DTMFOUT TEL_AUDIO, [DEGER]
HIGH ALARM_LED
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO>14 THEN TEL_1_BITTI
GOTO TEL_1_CEVIR
TEL_1_BITTI:
FOR I=0 TO 30 ; 30 SANIYE BOYUNCA
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUSA BASMIS
READ SANIYE_SAY,DEGER
IF DEGER=TUS_DONUS THEN
SANIYE_SAY=SANIYE_SAY+1
ELSE
SANIYE_SAY=0
ENDIF
IF SANIYE_SAY=4 THEN GOTO SIFRE_DOGRU_ALARM_KAPAT
ENDIF
HIGH ALARM_LED
PAUSE 1000 ; TEL NO ÿÇEVRÿİLDÿİ. 1 SN BEKLE
SOUND TEL_AUDIO,[100,10,50,10,100,10] ; BU SESi TELE VER
NEXT
LOW TEL_ON ; TEL. KAPAT
PAUSE 1000
HIGH TEL_ON ; TELEFON HATTI AÿÇILDI.
PAUSE 500
HAFIZA_NO=15 ; 15-25 arasÿı
TEL_2_CEVIR:
READ HAFIZA_NO,DEGER
IF DEGER>9 THEN TEL_2_BITTI
DTMFOUT TEL_AUDIO, [DEGER]
HIGH ALARM_LED
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO>25 THEN TEL_2_BITTI
GOTO TEL_2_CEVIR
TEL_2_BITTI:
FOR I=0 TO 30 ; 30 SANIYE BOYUNCA
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUSA BASMIS
READ SANIYE_SAY,DEGER
IF DEGER=TUS_DONUS THEN
SANIYE_SAY=SANIYE_SAY+1
ELSE
SANIYE_SAY=0
ENDIF
IF SANIYE_SAY=4 THEN GOTO SIFRE_DOGRU_ALARM_KAPAT
ENDIF
HIGH ALARM_LED
PAUSE 1000 ; TEL NO ÿÇEVRÿİLDÿİ. 1 SN BEKLE
SOUND TEL_AUDIO,[100,10,50,10,100,10] ; BU SESi TELE VER
NEXT
LOW TEL_ON ; TEL. KAPAT
PAUSE 1000
HIGH TEL_ON ; TELEFON HATTI AÿÇILDI.
PAUSE 500
HAFIZA_NO=26 ; 26-36 arasÿı
TEL_3_CEVIR:
READ HAFIZA_NO,DEGER
IF DEGER>9 THEN TEL_3_BITTI
DTMFOUT TEL_AUDIO, [DEGER]
HIGH ALARM_LED
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO>36 THEN TEL_3_BITTI
GOTO TEL_3_CEVIR
TEL_3_BITTI:
FOR I=0 TO 30 ; 30 SANIYE BOYUNCA
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUSA BASMIS
READ SANIYE_SAY,DEGER
IF DEGER=TUS_DONUS THEN
SANIYE_SAY=SANIYE_SAY+1
ELSE
SANIYE_SAY=0
ENDIF
IF SANIYE_SAY=4 THEN GOTO SIFRE_DOGRU_ALARM_KAPAT
ENDIF
HIGH ALARM_LED
PAUSE 1000 ; TEL NO ÿÇEVRÿİLDÿİ. 1 SN BEKLE
SOUND TEL_AUDIO,[100,10,50,10,100,10] ; BU SESi TELE VER
NEXT
LOW TEL_ON ; TEL. KAPAT
PAUSE 1000
HIGH TEL_ON ; TELEFON HATTI AÿÇILDI.
PAUSE 500
HAFIZA_NO=37 ; 37-47 arasÿı
TEL_4_CEVIR:
READ HAFIZA_NO,DEGER
IF DEGER>9 THEN TEL_4_BITTI
DTMFOUT TEL_AUDIO, [DEGER]
HIGH ALARM_LED
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO>47 THEN TEL_4_BITTI
GOTO TEL_4_CEVIR
TEL_4_BITTI:
FOR I=0 TO 30 ; 30 SANIYE BOYUNCA
CALL TUSLARI_TARA
IF TUS_DONUS<10 THEN ; BÿİR TUSA BASMIS
READ SANIYE_SAY,DEGER
IF DEGER=TUS_DONUS THEN
SANIYE_SAY=SANIYE_SAY+1
ELSE
SANIYE_SAY=0
ENDIF
IF SANIYE_SAY=4 THEN GOTO SIFRE_DOGRU_ALARM_KAPAT
ENDIF
HIGH ALARM_LED
PAUSE 1000 ; TEL NO ÿÇEVRÿİLDÿİ. 1 SN BEKLE
SOUND TEL_AUDIO,[100,10,50,10,100,10] ; BU SESi TELE VER
NEXT
LOW TEL_ON ; TEL. KAPAT
PAUSE 1000
; 4 TELEFON DA ARANDI
; ÿŞÿİFRE GÿİRÿİLENE KADAR TEKRAR TEKRAR ARA.
GOTO SURE_DOLDU_TEL_ARA
SIFRE_DOGRU_ALARM_KAPAT:
LOW ALARM_OUT ; ALARM ÿÇIKIÿŞI KPALI
LOW TEL_ON
LOW TEL_AUDIO
LOW ALARM_LED
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
GOTO MAIN_LOOP
; ---------------------------------------------------
KAYIT_MENUSU:
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
; ÿİLK OLARAK 4 HANELÿİ ÿŞÿİFRE GÿİRÿİLECEK
; ÿŞÿİFRE EEPROMUN ÿİLK 4 ADRESÿİNE YAZILACAK
HAFIZA_NO=0
KAYIT_TUS_BEKLE:
CALL TUSLARI_TARA
IF TUS_DONUS>9 THEN GOTO KAYIT_TUS_BEKLE
WRITE HAFIZA_NO,TUS_DONUS ; 1. KARAKTER KAYDEDÿİLDÿİ
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO<4 THEN KAYIT_TUS_BEKLE
; ÿŞÿİFRE KAYIT ÿİÿŞLEMÿİ BÿİTTÿİ
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
; TELEFON NUMARASI - 1 KAYDEDÿİLECEK
; TELEFON NO UZUNLUÿĞU MAX. 11 KARAKTER OLACAK
; EEPROM 4-14 ARASI
KAYIT_TEL_BEKLE_1:
CALL TUSLARI_TARA
IF TUS_DONUS=12 THEN KAYIT_TEL_BEKLE_1_BITTI
IF TUS_DONUS>9 THEN GOTO KAYIT_TEL_BEKLE_1
WRITE HAFIZA_NO,TUS_DONUS
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO<15 THEN KAYIT_TEL_BEKLE_1
KAYIT_TEL_BEKLE_1_BITTI: ; KAYIT 11 KARAKTERDEN KISA KESÿİLDÿİ ÿİSE
IF HAFIZA_NO<15 THEN ; 11 KARAKTERE KADAR ESKÿİ KAYDI SÿİL
WRITE HAFIZA_NO,255
HAFIZA_NO=HAFIZA_NO+1
GOTO KAYIT_TEL_BEKLE_1_BITTI
ENDIF
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
PAUSE 1000
CALL ZIRLA
; TELEFON NUMARASI - 2 KAYDEDÿİLECEK
; TELEFON NO UZUNLUÿĞU MAX. 11 KARAKTER OLACAK
; EEPROM 15-25 ARASI
KAYIT_TEL_BEKLE_2:
CALL TUSLARI_TARA
IF TUS_DONUS=12 THEN KAYIT_TEL_BEKLE_2_BITTI
IF TUS_DONUS>9 THEN GOTO KAYIT_TEL_BEKLE_2
WRITE HAFIZA_NO,TUS_DONUS
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO<26 THEN KAYIT_TEL_BEKLE_2
KAYIT_TEL_BEKLE_2_BITTI: ; KAYIT 11 KARAKTERDEN KISA KESÿİLDÿİ ÿİSE
IF HAFIZA_NO<26 THEN ; 11 KARAKTERE KADAR ESKÿİ KAYDI SÿİL
WRITE HAFIZA_NO,255
HAFIZA_NO=HAFIZA_NO+1
GOTO KAYIT_TEL_BEKLE_2_BITTI
ENDIF
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
PAUSE 1000
CALL ZIRLA
PAUSE 300
CALL ZIRLA
; TELEFON NUMARASI - 3 KAYDEDÿİLECEK
; TELEFON NO UZUNLUÿĞU MAX. 11 KARAKTER OLACAK
; EEPROM 26-36 ARASI
KAYIT_TEL_BEKLE_3:
CALL TUSLARI_TARA
IF TUS_DONUS=12 THEN KAYIT_TEL_BEKLE_3_BITTI
IF TUS_DONUS>9 THEN GOTO KAYIT_TEL_BEKLE_3
WRITE HAFIZA_NO,TUS_DONUS
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO<37 THEN KAYIT_TEL_BEKLE_3
KAYIT_TEL_BEKLE_3_BITTI: ; KAYIT 11 KARAKTERDEN KISA KESÿİLDÿİ ÿİSE
IF HAFIZA_NO<37 THEN ; 11 KARAKTERE KADAR ESKÿİ KAYDI SÿİL
WRITE HAFIZA_NO,255
HAFIZA_NO=HAFIZA_NO+1
GOTO KAYIT_TEL_BEKLE_3_BITTI
ENDIF
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
PAUSE 1000
CALL ZIRLA
PAUSE 300
CALL ZIRLA
PAUSE 300
CALL ZIRLA
; TELEFON NUMARASI - 4 KAYDEDÿİLECEK
; TELEFON NO UZUNLUÿĞU MAX. 11 KARAKTER OLACAK
; EEPROM 37-47 ARASI
KAYIT_TEL_BEKLE_4:
CALL TUSLARI_TARA
IF TUS_DONUS=12 THEN KAYIT_TEL_BEKLE_4_BITTI
IF TUS_DONUS>9 THEN GOTO KAYIT_TEL_BEKLE_4
WRITE HAFIZA_NO,TUS_DONUS
HAFIZA_NO=HAFIZA_NO+1
IF HAFIZA_NO<48 THEN KAYIT_TEL_BEKLE_4
KAYIT_TEL_BEKLE_4_BITTI: ; KAYIT 11 KARAKTERDEN KISA KESÿİLDÿİ ÿİSE
IF HAFIZA_NO<48 THEN ; 11 KARAKTERE KADAR ESKÿİ KAYDI SÿİL
WRITE HAFIZA_NO,255
HAFIZA_NO=HAFIZA_NO+1
GOTO KAYIT_TEL_BEKLE_4_BITTI
ENDIF
CALL ZIRLA
CALL ZIRLA
CALL ZIRLA
PAUSE 1000
CALL ZIRLA
PAUSE 300
CALL ZIRLA
PAUSE 300
CALL ZIRLA
PAUSE 300
CALL ZIRLA
; KAYIT ÿİÿŞLEMLERÿİ TAMAMLANDI
GOTO MAIN_LOOP
; ---------------------------------------------------
TUSLARI_TARA:
PAUSE 150
TUS_DONUS=255
LOW ROW1
HIGH ROW2
HIGH ROW3
HIGH ROW4
IF COL1=0 THEN TUS_DONUS=1
IF COL2=0 THEN TUS_DONUS=2
IF COL3=0 THEN TUS_DONUS=3
HIGH ROW1
LOW ROW2
HIGH ROW3
HIGH ROW4
IF COL1=0 THEN TUS_DONUS=4
IF COL2=0 THEN TUS_DONUS=5
IF COL3=0 THEN TUS_DONUS=6
HIGH ROW1
HIGH ROW2
LOW ROW3
HIGH ROW4
IF COL1=0 THEN TUS_DONUS=7
IF COL2=0 THEN TUS_DONUS=8
IF COL3=0 THEN TUS_DONUS=9
HIGH ROW1
HIGH ROW2
HIGH ROW3
LOW ROW4
IF COL1=0 THEN TUS_DONUS=10
IF COL2=0 THEN TUS_DONUS=0
IF COL3=0 THEN TUS_DONUS=11
; YILDIZ iLE KAREYE AYNI ANDA BASILIRSA
IF COL1=0 AND COL3=0 THEN TUS_DONUS=12 ; * ÿİLE # AYNI ANDA BASILMIS
IF TUS_DONUS<13 THEN GOTO TUSA_BASILMIS
RETURN
TUSA_BASILMIS:
LOW ROW1
LOW ROW2
LOW ROW3
LOW ROW4
CALL ZIRLA
TUS_BIRAK:
HIGH ALARM_LED
IF (COL1=0 OR COL2=0 OR COL3=0) THEN GOTO TUS_BIRAK
LOW ALARM_LED
RETURN
ZIRLA:
LOW BUZZER
PAUSE 30
HIGH BUZZER
PAUSE 100
RETURN
END
Arkadaşlar *microcode studio yu kurdum. *PBP kurdum C: ye attım. *MPLAB ı kurdum.
yukarıdaki belirtmiş olduğum kodun bulunduğu orijinal .hex dosyasını pic'e atınca sorunsuz çalışıyor hiç bir sıkıntı yok;
Ancak yukarıdaki kodu olduğu gibi alıp hiçbir değişiklik bile yapmadan microcode studio ile açıp sorunsuz şekilde derledikten sonra oluşan .hex dosyasını pic'e attığımda ise çalışmıyor.
kod aynı kod hiç bir değişiklik bile yapmıyorum ve sorunsuz şekilde de derliyor ve .hex dosyası da oluşuyor ama pic çalışmıyor. denemediğim yol kalmadı nedir bunun sebebi acaba
İşlemciyi doğru seçiyonmu.
en üst satırda işlemci ve sigorta ayarlarını kapatmışsın oradaki noktalı virgülü kaldırıp derle,yada programlama esnasında sigorta parametrelerini elle gir..
doğrudur kullandığım işlemci olan 16f628A yı seçiyorum.
en üst satırdaki noktalı virgülü kaldırınca da böyle bir hatayla karşılaşıyorum.
(https://i.ibb.co/nwCbGMH/hata.jpg) (https://ibb.co/nwCbGMH)
ayrıca benim anlamadığım; bu kod 16f628A için kodlanmış ve dosyasındaki orijinal .hex kodunu 16F628A ya attığımda çalışıyor ama en üst satırda farklı bir pic adı yazıyor.
@ipek, kapatma değil o. PicbasicPro'da mcu kod içinden seçilmiyor. Menuden ayarlamak gerekiyor. hatırlatma olsun diye yazılmış. Menuden seçilmesi gerekeni hatırlatıyor.
Pic 16F628A olarak değiştirdiğinizde hatasız derleme yapıyorsa öyle kullanın. Çünkü sadece A ve B portları kullanılıyor
okuduğum okuldan dolayı da ben normalde şu anda assembly dili ile uğraşıyorum. yazılmış olan kod assembly dili olsaydı biraz kafa yorardım ama .bas uzantılı dosyayı hiç anlamadığım için sizlere sormak ihtiyacı duydum.
tahmin ediyorum ki sorunum sigorta ayarları ile ilgilidir ve tam hakim olamadığım için kıyıda köşede duran çok basit bir sebepten dolayı çözemiyorum.
Neyse ben de uğraşmaktan vazgeçtim. olduğu haliyle kullanırım artık.
SORUMA CEVAP YAZAN HERKESE AYRI AYRI ÇOK TEŞEKKÜR EDERİM. Karşılıksız bırakmayıp cevap yazdınız. Allah razı olsun. Sağlıcakla kalın