Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
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ı: pic-basic-pro-ile-pic-programlama-ders-10.zipDers-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