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;
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.
Ö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;
Ö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.;
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;
‘**************************************************************** ‘* 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;
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 proteus simülasyon dosyaları;
Şifre-Pass: 320volt.com
PICBasic Dersleri PIC Basic Pro ile PIC Programlama-11 Ders-11 Devam
Yayım tarihi: 2010/04/30 Etiketler: kılavuz ders, pic basic dersleri, PIC programlama, picbasic eğitim, picbasic pro
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