Elektronik / Elektronik Kaynakları/

PICBasic Dersleri PIC Basic Pro ile PIC Programlama 10

Sponsorlu Bağlantılar

PROGRAM ÖRNEKLERi 10 derslik Pic Basic derslerimizin sonuna gelmiş bulunuyoruz. (13 bölüm oldu) Bu bölüme kadar verilen bilgilerde Pic MCU ların alternatifli olarak kullanım örneklerini dış ünitelerle bağlantılarını haberleşmelerini öğrendik. Arada da bazı kullanılan komutları işledik. Bu son dersimizde program örnekleri göreceğiz.

ÖRNEK PROGRAM: 1 LED ANiMASYONU

işe fantezi ile başlayalım ve bir LED-ANiMASYON projesi verelim. Bu projede PortA ve PortB nin tamamı kullanılarak 16 led’den oluşan bir görsel gösteri ünitesi yapacağız. Ledler değişik şekillerde yanarak bize bir gösteri sunacaklar.

Önce Şemamız;

led_animasyon

Aslında PIC16F628 de PortA.5 (MCLR bacağı) çıkış olarak kullanılamaz. Ancak sırf görsel amaçlı olarak bu projede simulasyon olarak denedim ve çalıştığını gördüm. Gerçekte çalışmaması gerekir. Devreyi yapacaklar için kısa bir açıklama olarak vereyim istedim.

Diğer taraftan gerçek devrede Pic pinleri ile Led ler arasında 330 Ohm direnç kullanılması gerekmektedir. Aksi halde Pic bozulur. BU açıklama da devreyi fiilen yapmak isteyenler içindir.

picbasic_led_kod

ÖRNEK PROGRAM : 2 OTO CAM KONTROLU

ikinci örneğimiz enteresan bir örnek olacak. 16F628 de komparatör kullanımına güzel bir örnekdir. Projenin amacı otomobillerde motor kontrollu yan camların açılıp kapanmasını otomatik olarak kontrol etmekdir. Cam açma butonuna kısa süreli basılır ise cam basılan süre kadar aşağı veya yukarı hareket edecek, butona biraz uzun basılması halinde ise cam otomatik olarak açılacak veya kapanacaktır. Tabiiki nereye kadar, cam son noktada gidecek yeri olmadığı için motor sıkışacak ve normalde 2 Amper dolayında motordan çekilen akım 3 amper veya daha fazlasına yükselecektir. işte bu aşamada komparatörler devreye girerek motorun akımını keseceklerdir.

Motorun sıkışmasını simule edebilmek için çalışan motora paralel ikinci bir motor daha devreye sokulmaktadır. Bu sayede normalde 2 A dolayında olan çekilen akım iki katına çıkmaktadır ve sistem çekilen fazla amperi algılayıp motorları durdurmaktadır. Sistemin çekilen hangi amper seviyesinde durmasını sağlayacak ince ayarlar devrede bulunan 2 adet 220 Ohm ayarlı dirençler ile yapılmaktadır.

Önce şemamızı verelim;

otocam_picbasic_motor

oto_cam_kontrol_pbp

ÖRNEK PROGRAM : 3 DTMF iLE CiHAZ KONTROLU

Bu örneğimizde Telefonla cihaz kontrol sistemini inceleyeceğiz. Kısaca DTMF kontrol ismi verilen program ile bir telefon hattına bağlayacağımız sistemimizle 5-6 adet cihazı istediğimiz zaman açıp kapatabileceğiz. Arada mesafe olduğundan yapılan işlerin onayı sesli olarak hattan verilmektedir. Bu aleti fiziki olarakda yaptım ve kullanıyorum. Bu devrede simulasyon imkanımız olmadığı için devre şeması vermekle yetineceğiz.;

dtmf_telefon_kontrol

Programa geçmeden kullanımla ilgili bazı açıklamalar vermek istiyorum.

Program öncelikle çalan telefon zilini saymakta ve önceden ayarlanmış adedi bulduğunda hattı otomatik olarak açmaktadır. Zilin çalma sayısı program içinden değiştirilebilmektedir.

Hat açıldıktan sonra program şifre girmenizi beklemektedir. Şifre 4 haneli bir rakam olup default olarak 1111 şeklinde ayarlanmıştır. Ayrıca birde master şifre vardır. Ana şifrenin unutulması durumunda master şifre girilerek şifrenin default şifre ye dönüştürülmesi sağlanmıştır.

Şifre girişini takiben program role kontrol bölümüne atlamaktadır. Burada ;

-önce # tuşu sonra 1-2-3-4-5 rakamlarından herhangi birisi girildiği tatirde girilen rakama karşılık gelen role çıkışı aktif edilmekte bu durum ilgili led in yanması ile anlaşılmaktadır. Açılan rolenin sayısı kadar da hatta beep sesi verilmektedir. Örneğin 2 nolu role açılmış ise Beep – Beep şeklinde 2 adet beep sesi alınmaktadır.

-Önce # tuşu ardından 8 tuşu girilir ise Zil çalma adedi değiştirilebilir. 8 rakamının hemen ardından yeni zil adedi girilmelidir. -Önce # sonra 9 rakamı girilir ise şifre değiştirilecek demektir. Burada önce eski şifre ardından yeni şifre

girilmelidir. -Önce # ve ardından 0 rakamı girilir ise sistemden çıkış yapılır. Hat kapatılır. -Önce * tuşu ve ardından 0 rakamı girilir ise açık olan tüm roleler kapatılmaktadır. -Önce * ardından 1-2-3-4-5 rakamlarından biri girilir ise ilgili rakama karşılık gelen role kapatılır.

Devrede kullanılan trafo 600/600 sarımlı telefon hat trafosudur. Eski modemlerin üzerinde bulunmaktadır.

‘****************************************************************
‘*  Name    : UNTITLED.BAS                                      *
‘*  Author  : [E.T.E]                                           *
‘*  Notice  : Copyright (c) 2005 Ete]                           *
‘*          : All Rights Reserved                               *
‘*  Date    : 02.06.2005                                        *
‘*  Version : 1.0                                               *
‘*  Notes   :                                                   *
‘*          :                                                   *
‘****************************************************************
PORTA=0:PORTB=0
TRISB=%00000001 ‘PortB.0 giriş diğerleri çıkış yapıldı.
TRISA=%00111111 ‘A portu  tamamı çıkış yapıldı.
‘—————————————————————–
@ DEVICE pic16F628 ‘işlemci  16F628
@ DEVICE pic16F628, WDT_OFF  ‘Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON  ‘Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF  ‘Kod Protek kapalı
@ DEVICE pic16F628, MCLR_OFF  ‘MCLR pini kullanılıyor.
@ DEVICE pic16F628,  INTRC_OSC_NOCLKOUT ‘Dahili osilatör kullanılacak
‘—————————————————————–
CMCON=7 ‘16F628 de  komparatör pinleri iptal hepsi giriş çıkış
‘—————————————————————–
SIFRE  VAR WORD
RAKAM  var WORD
TEMP   VAR WORD
BASKA  VAR WORD
ZAMAN  VAR WORD
SURE   VAR word
SAYAC  VAR BYTE
SAYI   VAR BYTE
DURUM  VAR BYTE
BIRLER VAR BYTE
ONLAR  VAR BYTE
YUZLER VAR BYTE
BINLER VAR BYTE
ZIL    VAR BYTE ‘ÇALACAK ZİL ADEDİ
X      VAR BYTE
CIK    VAR BIT
SYMBOL HAT=PORTB.0
SYMBOL CIKIS1=PORTB.1
SYMBOL CIKIS2=PORTB.2
SYMBOL CIKIS3=PORTB.3
symbol CIKIS4=PORTB.4
SYMBOL CIKIS5=PORTB.5
SYMBOL ISD =PORTB.6
SYMBOL ROLE=PORTB.7
SYMBOL VALDAT=PORTA.0
SYMBOL BUZZER=PORTA.7

‘————————————————————————–
‘DATA @ 0,1,2,3,4
‘data @ 0,255,255,255,255,255
DATA @ 16,5
PAUSE 200
CLEAR
read 0,SAYI: PAUSE 10
IF SAYI=$FF THEN
SIFRE=1234
GOSUB SIFREYAZ
endIF
READ 0,BINLER
READ 1,YUZLER
READ 2,ONLAR
READ 3,BIRLER
SIFRE=BINLER*1000+YUZLER*100+ONLAR*10+BIRLER
READ 16,ZIL
IF ZIL=255 THEN
ZIL=5
WRITE 16,ZIL
ENDIF 

‘————————————–ANA————————————–
BASLA: Sayac=0
‘——————————-PORTB.0=HIGH————-
ILK:    IF HAT=1 THEN ILK
‘——————————PORTB.0=LOW—————
BAK:     SAYAC=SAYAC+1
BIR:     IF HAT=0 THEN BIR
‘——————————PORTB.0=LOW—————–
IF SAYAC=ZIL THEN
PAUSE 1800
HIGH ROLE
pause 300
GOTO BIRINCI
ENDIF
SURE=0
WHILE HAT=1
SURE=SURE+1
IF SURE=300 THEN ILK
PAUSE 1
WEND
IF SURE<100 THEN BIR
GOTO BAK
‘——————ZİL SAYMA BÖLÜMÜ BİTTİ——————
BIRINCI: :SAYAC=0:GOSUB SES1:GOSUB  SES2:gosub ses1
YINE:    RAKAM=0:GOSUB SIFREAL
IF CIK=1 THEN BITIR
IF RAKAM=7676 THEN
SIFRE=1234
GOSUB SES2
GOSUB SES1
GOSUB SES2:gosub ses1
GOSUB SIFREYAZ
GOTO  ROLEKONTROL
ENDIF
IF RAKAM=SIFRE THEN
GOSUB SES2 : pause 50
GOSUB SES1: pause 50
GOSUB SES1:gosub ses1
GOTO ROLEKONTROL
ENDIF
SAYAC=SAYAC+1
IF SAYAC=3 THEN
ATLA:        GOSUB EXIT
SLEEP 600
GOTO BASLA
ENDIF
GOSUB SES2
GOSUB SES1
GOSUB SES3
GOTO YINE

ROLEKONTROL:    GOSUB  ALBILGI
IF CIK=1 THEN BITIR
IF SAYI=12 THEN ACMA  ‘#
IF SAYI=11 THEN KAPAT ‘*
gosub ses2
‘                GOSUB EXIT
GOTO BASLA
ACMA:
GOSUB ALBILGI
IF CIk=1 THEN BITIR
IF SAYI=0 THEN
gosub ses3
GOSUB EXIT
GOTO BASLA
ENDIF 

 DURUM=PORTB 

 IF SAYI=1 THEN
IF durum.1=0 THEN
GOSUB SES1
PORTB=DURUM | %00000010
goto ROLEKONTROL
ENDIF
ENDIF

 IF SAYI=2 THEN
IF durum.2=0 THEN
GOSUB SES1:GOSUB SES1
PORTB=DURUM | %00000100
goto ROLEKONTROL
ENDIF
ENDIF 

 IF SAYI=3 THEN
IF durum.3=0 THEN
FOR X=1 TO 3:GOSUB SES1:NEXT
PORTB=DURUM | %00001000
goto ROLEKONTROL
ENDIF
ENDIF

 IF SAYI=4 THEN
IF durum.4=0 THEN
FOR X=1 TO 4:GOSUB SES1:NEXT
PORTB=DURUM | %00010000
goto ROLEKONTROL
ENDIF
ENDIF

 IF SAYI=5 THEN
IF durum.5=0 THEN
FOR X=1 TO 5:GOSUB SES1:NEXT
PORTB=DURUM | %00100000 ‘#5
goto ROLEKONTROL
ENDIF
ENDIF

 IF SAYI=8 THEN                          ‘#8
GOSUB SES2
GOSUB ALBILGI
GOSUB SES1:gosub ses2
IF CIK=1 THEN BITIR
IF SAYI>0 AND SAYI<13 THEN
ZIL=SAYI:WRITE 16,ZIL: PAUSE 10
ENDIF
GOTO ROLEKONTROL
ENDIF 

 IF SAYI=9 THEN         ‘#9
GOSUB SIFREAL
GOSUB SES1:gosub ses2
IF CIK=1 THEN BITIR
IF RAKAM=SIFRE THEN
GOSUB SES1:GOSUB SES1:GOSUB SES2
GOSUB SIFREAL
IF CIK=1 THEN BITIR
SIFRE=RAKAM
GOSUB SES1:gosub ses2
gosub SIFREYAZ
ENDIF
ENDIF
GOTO ROLEKONTROL 

KAPAT:     GOSUB ALBILGI
IF CIK=1 THEN BITIR
durum=PORTB

 IF SAYI=0 THEN
GOSUB SES3
PORTB=DURUM & %11000001  ‘*0
ENDIF 

 IF SAYI=1 THEN
IF durum.1=1 THEN
GOSUB SES2
PORTB=DURUM & %11111101
goto ROLEKONTROL
ENDIF
ENDIF 

 IF SAYI=2 THEN
IF durum.2=1 THEN
GOSUB SES2:GOSUB SES2
PORTB=DURUM & %11111011
goto ROLEKONTROL
ENDIF
ENDIF 

 IF SAYI=3 THEN
IF durum.3=1 THEN
FOR X=1 TO 3:GOSUB SES2:NEXT
PORTB=DURUM & %11110111
goto ROLEKONTROL
ENDIF
ENDIF

 IF SAYI=4 THEN
IF durum.4=1 THEN
FOR X=1 TO 4:GOSUB SES2:NEXT
PORTB=DURUM & %11101111
goto ROLEKONTROL
ENDIF
endif

 IF SAYI=5 THEN
IF durum.5=1 THEN
FOR X=1 TO 5:GOSUB SES2:NEXT
PORTB=DURUM & %11011111  ‘*5
ENDIF
ENDIF
GOTO ROLEKONTROL 

SIFREAL:  GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=SAYI*1000
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI*100
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI*10
GOSUB ALBILGI
IF CIK=1 THEN RETURN
RAKAM=RAKAM+SAYI
RETURN 

ALBILGI:
SURE=0:ZAMAN=0
WHILE VALDAT=0
SURE=SURE+1
PAUSEus 270
IF SURE=65500 THEN
CIK=1:RETURN
ENDIF
WEND 

SAYIAL: SAYI=0
WHILE VALDAT=1
SAYI.0=PORTA.4
SAYI.1=PORTA.3
SAYI.2=PORTA.2
SAYI.3=PORTA.1
WEND
IF SAYI=10 THEN SAYI=0
RETURN

SIFREYAZ:TEMP=SIFRE
BINLER=TEMP DIG 3
YUZLER=TEMP DIG 2
ONLAR =TEMP DIG 1
BIRLER=TEMP DIG 0
WRITE 0,BINLER: PAUSE 10
WRITE 1,YUZLER: PAUSE 10
WRITE 2,ONLAR : PAUSE 10
WRITE 3,BIRLER: PAUSE 10
RETURN

SES1: SOUND  BUZZER,[110,12]: pause 30:RETURN
SES2: SOUND BUZZER,[95,12] : PAUSE 30:RETURN
SES3: SOUND BUZZER,[85,25] : PAUSE 30:RETURN 

BITIR:  GOSUB EXIT:GOTO  BASLA:RETURN
EXIT :  SURE=0
HAT=0
CIK=0
SAYAC=0
RAKAM=0
LOW ROLE
LOW ISD
gosub ses2
gosub ses2
GOSUB SES3
GOSUB SES3
RETURN 

End

ÖRNEK PROGRAM : 4 ***********DiJiTAL POT (DS1868) KONTROLÜ**********

Dallas firmasının DS1868 kodlu dijital potansiyometre kullanımına ait bir örnek vermek istiyorum. Söz konusu potansiyometrenin model dosyası bulunmadığından dolayı simulasyon bir shift register kullanılarak yapılmıştır.

Neticede DS1868 in içinde bir shift register bulunmaktadır ve pot değeri bu registere yazılarak sağlanmaktadır. Önce şemamız;

ds1868_picbasic

‘****************************************************************
‘*  Name    : PIC-DIGIPOT.BAS                                      *
‘*  Author  : [E.T.E]                                           *
‘*  Notice  : Copyright (c) 2004 [ETE]                          *
‘*          : All Rights Reserved                               *
‘*  Date    : 25.08.2004                                        *
‘*  Version : 1.0                                               *
‘*  Notes   :                                                   *
‘*          :                                                   *
‘****************************************************************

 RAW    VAR   BYTE
ZAMAN  VAR   WORD
RST     VAR   PORTA.0
CLK     VAR   PORTA.2
BILGI   VAR   PORTA.1
TUSA     VAR   PORTB.0
TUSB     var   PORTB.1
KONUM   VAR   BYTE
I       VAR   BYTE
STK     VAR   BYTE

 TRISA=%00000000
TRISB=%00000011

 PORTB=0
PORTA=0
ZAMAN=0
STK=1
‘	ADCON1 = %00000010 ‘AN0 VE AN1 Analog,Ref =VDD
PAUSE 500
konum=0
raw=0
I=0

 BASLA:
IF TUSA=0 THEN
IF I=1 THEN BASLA
if konum=255 then basla
konum=konum+1:I=1:GOTO CIK
ENDIF 

 IF TUSb=0 THEN
IF I=1 THEN BASLA
if konum=0 then basla
konum=konum-1:I=1:GOTO CIK
ENDIF 

 IF RAW<>KONUM  THEN GOSUB POTYAZ
I=0
CIK:        GOTO BASLA

 POTYAZ:     HIGH  RST: PAUSE 1
HIGH BILGI
PULSOUT CLK,1
SHIFTOUT BILGI,CLK,1,[KONUM]
SHIFTOUT BILGI,CLK,1,[KONUM]
LOW RST: PAUSE 1
RAW=KONUM
RETURN

 end

ÖRNEK PROGRAM : 5 **************FREKANSMETRE – PALS SAYICI*******************

Bu örneğimizde Bir Frekansmetre yapacağız. Bu programda Pic16F628 kullanacağız. PIC16F628 de 16 bitlik TMR1 sayacını dışarıdan gelen palsleri sayacak şekilde ayarlayıp sonuçta belirli örnekleme süreleri kullanarak frekans veya pals sayacı olarak kullanacağız. Frekans ölçme aralığımız kullandığımız örnekleme süresine bağlı olarak 1 Hz ile yaklaşık 40 MHz arasında olacaktır. Teorik olarak üst sınır 65 MHz dolayındadır.

Ancak kullanılan malzemeler bu frekanslara çıkmadığı için denemelerle sabit olan ölçülebilecek maksimum frekans yaklaşık 40 MHz dolayındadır. Ancak frekans kaynağından Pic’e direkt giriş yapabilirseniz bu durumda üst sınır yükselebilmektedir. Frekansmetre’nin üst ölçüm sınırını daha da yukarı çekebilmek için arada birde 64’e bölücü (U664) kullanılmaktadır.

Bu durumda üst ölçüm sınırı 1,2 GHz ye kadar çıkabilecektir. Program PicBasicPro ile birlikte ASM nin kullanılmasına iyi bir örnekdir. BU programda frekans ölçümünde kullanılacak olan örnekleme süreleri için ASM kullanılmıştır. Zira, 1ms – 10 ms – 100 ms ve 1000 ms lik süreleri hassas olarak elde etmenin en iyi yolu ASM kullanmaktır. Temel mantık olarak düşük frekanslarda büyük süre yüksek frekanslarda ise düşük süre kullanılarak ölçüm yapılmaktadır.

Programı isis de simule edebilmek için basit bir devre kullanıyoruz. Önce bu devremizi verelim;

frekans_lcd_pic16f628

Programda TMR1 kullanıldığını söylemiş idik. TMR1 şayet dışarıdan gelen pals leri sayacak ise giriş bacağı olarak yalnızca PortB.6 pini kullanılmaktadır. Dolayısıyla programda da bu bacak kullanılmıştır.

Program girilen frekansa bağlı olarak ölçüm modu (örnekleme süresi) seçimini otomatik yapmaktadır. Bunu anlayabilmek için önce bir kısa süreli ölçüm yapmakta ve bulduğu değere bağlı olarak mod seçmektedir.

işte Programımız;

‘****************************************************************
‘*  Name    : Frekans-Roleli.BAS                                    *
‘*  Author  : [Erol Erdal]                                      *
‘*  Notice  : Copyright (c) 2004 [Erolec]                       *
‘*          : All Rights Reserved                               *
‘*  Date    : 29.11.2004                                        *
‘*  Version : 1.6                                               *
‘*  Notes   : 10MHz Kristal ile çalışır, U664 (64'de bölücü)    *
‘*          : ile çalışır, Otomatik 4 Mod (0-3) seçer           *
‘****************************************************************

@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_off
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_ON
@ DEVICE pic16F628, HS_OSC
DEFINE  OSC  10
DEFINE  LCD_DREG     PORTA
DEFINE  LCD_DBIT     0
DEFINE  LCD_RSREG    PORTB
DEFINE  LCD_RSBIT    2
define  LCD_RWREG    PORTB
DEFINE  LCD_RWBIT    1
DEFINE  LCD_EREG     PORTB
DEFINE  LCD_EBIT     0
DEFINE  LCD_BITS     4
DEFINE  LCD_LINES    2
DEFINE LCD_COMMANDUS 4000
DEFINE LCD_DATAUS	 250

TRISA=0
TRISB=%11111000
low PORTB.1

‘——————————————————————————-
Frekans     var word
FrekansL    var Frekans.byte0
FrekansH    var Frekans.byte1
sure     VAR WORD
sureL    var SURE.Byte0
sureH    var SURE.Byte1

TOPLAM   var  word
sayac    var  word
counter  var  byte
HAS      VAR  BYTE
I        var  byte

X        var  bit
Z        VAR  BIT
ilk      var  bit
SEC      VAR  PORTB.7
‘——————————————————————————-
Z=0
CMCON=7
has=0:ilk=0
lcdout $FE,1
lcdout “***EROL ERDAL***”
lcdout $FE,$C0,”**FREKANSMETRE**”: PAUSE 300

‘*******************************  FREKANSMETRE***********************************
START:
‘         gosub olc
‘         gosub modsec
‘         lcdout $FE,1,”fre:”,#frekans,” mod=”,#has,”S=”,#SEC
‘         pause 500:goto start
ATLA:    IF SEC=1 THEN
HAS=4:goto birinci
else
gosub MODSEC
endif
pause 200

Birinci: SELECT CASE has
‘———-bölücüsüz ölçüm— Mode=0——-0 Hz - 65 KHz.———————-
CASE 0
gosub binms
Lcdout $FE,$80,”0-65 KHz : MOD=”,#has
if frekans<1000 then
Lcdout $FE,$C0,”Fre:”,#frekans,” Hz        ”
gosub tus
goto ATLA
endif
sayac=frekans/1000:Toplam=(frekans//1000)
Lcdout $FE,$80,”0-65 KHz : MOD=”,#has
Lcdout $FE,$C0,”Fre:”,#sayac,”.”,dec3 Toplam,” Hz    ”
GOSUB TUS
‘ pause 500
goto ATLA
‘——-bölücüsüz ölçümler —Mode=1——-65 KHz.- 650 KHz—————–
CASE 1
gosub yuzms
Sayac=frekans/100:Toplam=(frekans//100)
Lcdout $FE,$80,”65-650KHz: MOD=”,DEC has
Lcdout $FE,$C0,”Fre:”,#Sayac,”,”,#Toplam,” KHz  ”
GOSUB TUS
‘ pause 500
GOTO ATLA

‘——BÖLÜCÜSÜZ ÖLÇÜMLER—-Mode=2——650 KHz - 6,5 MHz————–
CASE 2
gosub onms
sayac=frekans/10:Toplam=(frekans//10)
Lcdout $FE,$80,”065-6 MHz: MOD=”,#has
if sayac<1000 then
Lcdout $FE,$C0,”Fre:”,#sayac,”,”,dec3(Toplam*100),” KHz  ”
gosub tus:goto ATLA
endif
toplam=sayac/1000
lcdout $fe,$C0,”Fre:”,#toplam,”,”,#(sayac//1000),” MHz     ”
gosub tus
goto ATLA

 ‘——-BÖLÜCÜSÜZ ÖLÇÜMLER——Mode=3——6,5 MHz - 30 MHz————
CASE 3
gosub Birms
sayac=frekans
toplam=sayac/1000
Lcdout $FE,$80,”6,5-50MHz: MOD=”,#has
lcdout $fe,$C0,”Fre:”,#toplam,”,”,#(sayac//1000),” MHz    ”
gosub tus
‘         pause 500
goto ATLA

‘——BÖLÜCÜ İLE ÖLÇME BÖLÜMÜ—-Mode=4——30 mhZ - 1200 mhZ——–
case 4
gosub birms
sayac=Frekans**64
frekans=div32 10
sayac=frekans/100:Toplam=(frekans//100)
Lcdout $FE,$80,”50 MHz>:   MOD=”,#has
Lcdout $FE,$C0,”Fre:”,#Sayac,”,”,dec3 (Toplam*10),” MHz   ”
gosub tus
‘         pause 500
Goto ATLA
‘————modların sonu ——————————————–
case 5
HAS=0:GOTO START
END SELECT
Z=0
GOTO START
‘
TUS:      if PortB.3=1 then
IF Z=1 THEN CIK
has=has+1: PAUSE 1
IF has=5 THEN has=0
Z=1
RETURN
ENDIF
Z=0
CIK:      RETURN
‘———————MODSEC——————————–
MODSEC:  ‘pause 5:gosub  olc’:return
pause 100
‘         if frekans>340 then
‘           has=4:RETURN
‘         endif
‘         if (frekans>43) and(frekans<217) then
‘           has=3:RETURN
‘         endif
gosub birms
if Frekans<66 then has=0
if frekans>65 and frekans<651 then has=1
if frekans>650 and frekans<6501 then has=2
if Frekans>6500 and Frekans<32001 then Has=3
‘         IF frekans >50000 THEN HAS=4
return

OLC:
asm
movlw	0×01
movwf	_SureL
movlw	0×03
movwf	_SureH
delay_0
btfss  portb,6
goto   tamamolc
decfsz	_SureL, f
goto	$+3
decfsz	_SureH, f
goto	Delay_0
Goto    son
tamamolc
call   zaman
movlw	0×01
movwf	_SureL
movlw	0×01
movwf	_SureH
Delay_1
decfsz	_SureL, f
goto	$+2
decfsz	_SureH, f
goto	Delay_1
goto	$+1
Goto    son
zaman
bcf  STATUS,RP0
bcf  STATUS,RP1
clrf TMR1L
clrf TMR1H
movlw  7
movwf  T1CON
return
endasm
Binms:
ASM
movlw	0×20    ;19 idi
movwf	_SureL
movlw	0×80    ;74 idi
movwf	_SureH
movlw	0×06
movwf	_Counter
delay_2
btfsc   portb,6
goto tamambin
decfsz	_SureL, f
goto	delay_2
decfsz	_SureH, f
goto	$+2
decfsz	_Counter, f
goto	Delay_2
goto son
tamambin
call    zaman
movlw	0×19    ;19 idi
movwf	_SureL
movlw	0×74    ;74 idi
movwf	_SureH
movlw	0×06
movwf	_Counter
Delay_3
decfsz	_SureL, f
goto	$+2
decfsz	_SureH, f
goto	$+2
decfsz	_Counter, f
goto	Delay_3
Goto son
endasm

Yuzms:
ASM
movlw	0×4e       ;4e idi
movwf	_SureL
movlw	0xCa       ;c4 idi
movwf	_SureH
Delay_4
btfsc   portb,6
goto tamamyuz
decfsz	_SureL, f
goto	delay_4
decfsz	_SureH, f
goto	$+2
goto son
tamamyuz
movlw	0×4f       ;4e idi
movwf	_SureL
movlw	0xC4       ;c4 idi
movwf	_SureH
call   zaman

Delay_5
decfsz	_SureL, f
goto	$+2
decfsz	_SureH, f
goto	Delay_5
goto	$+1
Goto    Son
endasm

Onms:
asm
movlw	0×86
movwf	_SureL
movlw	0×20
movwf	_SureH
Delay_6
btfsc   portb,6
goto   tamamon
decfsz	_SureL, f
goto	delay_6
decfsz	_SureH, f
goto	$+2
goto   son
Tamamon
movlw	0×87
movwf	_SureL
movlw	0×14
movwf	_SureH
call    zaman
Delay_7
decfsz	_SureL, f
goto	$+2
decfsz	_SureH, f
goto	Delay_7
goto	$+1
goto   son
endasm
Birms:
ASM
movlw	0xf2
movwf	_SureL
movlw	0×04
movwf	_SureH
Delay_8
btfsc   portb,6
goto    tamambir
decfsz	_SureL, f
goto	delay_8
decfsz	_SureH, f
goto	$+2
goto	son
tamambir
call     zaman
movlw	0xf2
movwf	_SureL
movlw	0×02
movwf	_SureH

Delay_9
decfsz	_SureL, f
goto	$+2
decfsz	_SureH, f
goto	Delay_9
goto	$+1
son
nop
movlw  6
movwf  T1CON
movf TMR1L,0
movwf _FrekansL
movf TMR1H,0
movwf _FrekansH
endasm
RETURN

 END

Program içinde bazı kapatılmış bölümler vardır. Bunlar test amaçlı koyulmuştur. Gerekirse tamamını kaldırabilirsiniz.

10. Ders ile birlikte BASIC dersleri serimiz tamamlanmış olmaktadır. Son dersimiz bir kullanım örnekleri dersi oldu. Umarım okuyanlara veya çalışanlara bir şeyler anlatabilmişimdir. Burada anlatılanların tamamını kendi kendine azimle ve ısrarla öğrenen bir kişi olarak sizelere tavsiyem çalışmaya devam başaracaksınız olacaktır. Haydi bakalım kolay gelsin ve mutlu günler sizlerin olsun.

Hazırlayan: Erol Tahir Erdal (ETE) PICBasic Dersleri PIC Basic Pro ile PIC Programlama 10 Kod ve isis simülasyon dosyaları: PICBasic Dersleri PIC Basic Pro ile PIC Programlama 10

Dosya indirme LINK listesi (TXT formatında) link-10184.zip şifre-pass: 320volt.com

PICBasic Dersleri PIC Basic Pro ile PIC Programlama-11 Ders-11 Devam

  • omer

    HOCAM ÖRNEK PROGRAM 1 DE ISIDE PIC16F628A KULLANMIŞSINIZ AMA PİC BASİC PRODA DEVICE İŞLEMCİYİ PİC16F628 OLARAK GÖSTERMİŞSİNİZ BENDE SORUN OLARAK GÖSTERİYOR