pic basic ders notlarım...

Başlatan electrotechnics, 07 Mayıs 2006, 18:40:44

electrotechnics

arkadaşlar pic basic te ileri seviye değilim ama iyi bir arşive sahibim bunları sizinle paylaşmak istedim... :lol:
bu arşivi daha önceden hergün güncelleyecegim deyipte güncellemedigimden dolayı.kendimi affettirmek için hazırlıyorum.
begeneceginizi umuyorum...



pic basic komutları verrek başlamak istedim...

KOMUT	KAPSAM	AÇIKLAMA
@	Tek satırlık assembly komutu kullanmak için.
ADCIN Channel, Var	Channel'daki analog değerin karşılığı olan dijital değeri Var'a atar.
ASM..ENDASM	Assembly komut grubu kullanmak için.
BRANCH Index, [Label...]	Label dizisinde Index sayısını karşılayan seçeneğe yönlendirir.
CALL Label	Assembly'deki CALL komutunun aynısı
CLEAR	Bütün değişkenleri sıfırlar
CLEARWDT	WDT'nin içindeki değeri sıfırlayarak WDT'yi kapatır.
COUNT Pin, Periyod, Var	Belirli bir periyod içinde gelen puls sayısını Var'a atar
DATA Location, Constant	Pic'e program yüklenirken dahili EEPROM'a Location adresinden başayarak Constant'ları yükler
DEBUG Var {,Var}	Define komutuyla önceden belirlenmiş bir pin üzerinden önceden belirlenmiş bir hızda (baud rate) seri haberleşme yoluyla Var'daki veriyi yollar.
DEBUGIN {Timeout, Label} [Var]	Define komutuyla önceden belirlenmiş bir pin üzerinden önceden belirlenmiş bir hızda (baud rate) seri haberleşme yoluyla gelen veriyi Var'a atar.
DISABLE	Interrupt girişi ve Debug işlemlerini engeller.
DISABLE DEBUG	Debug işlemini engeller.
DISABLE INTERRUPT	INTCON.GIE'yi sıfırlayarak interrupt girişini kapatır.
DTMFOUT Pin, {Onms, Offms,} [Tone]	Tone tuşunun telefondaki sesini Onms süresi boyunca tuşlar arasında Offms süresi kadar bekleterek çıkarır. Onms ve Offms belirtilmemişse 200ms Onms, 50 ms Offms süresi kullanır.
EEPROM Location, Constant	DATA'yla aynı işi yapar
ENABLE	DISABLE komutundan sonra interrupt girişine ve Debug komutuna izin verir.
ENABLE DEBUG	DISABLE komutundan sonra Debug komutuna izin verir.
ENABLE INTERUPT	DISABLE komutundan sonra interrupt girişine izin verir.
END	Assembly'deki END'in aynısıdır.
FOR i=Start TO End Task
NEXT i	Start değerinden End değerine kadar i'yi birer birer arttırarak Task'i uygular.
FREQOUT Pin, Onms, Frequency	Pin bacağında Onms süresi boyunca Frequency frekansında sinüs dalgası üretir.
GOSUB Label	Call komutuyla aynı işi yapar.
GOTO Label	Assembly'deki GOTO işleminin aynısı.
HIGH Pin	Pin bacağını bir yapar.
HPWM Channel, Dutycycle, Frequency	16F877 gibi PWM modülü olan mikrodenetleyicilerde
bu modülün Channel numaralı kanalından % (Duty+1)/2.56
duty cycle'da Frequency frekansında PWM çıkışı sağlar
HSERIN {PariteLabel,} {Timeout,Label,} [Var]	16F77 gibi USART özelliği olan mikrodenetleyicilerde donanım asenkron seri haberleşme hattından veri bekler, gelen veriyi Var'a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider.
HSEROUT [Var]	16F77 gibi USART özelliği olan mikrodenetleyicilerde Var'daki veriyi donanım asenkron seri haberleşme hattına yollar.
I2CREAD DataPin, ClockPin, Control, Address, Var	Control ve Address verilerini yollar, harici EEPROM'un Address bölgesinden gelen veriyi Var'a atar.
I2CWRITE DataPin, ClockPin, Control, Address, Var	Control ve Address bilgilerini yollayıp, harici EEPROM'un Address bölgesine Var'daki veriyi atar.
IF..THEN..ELSE..ENDIF	If'ten sonra gelen şart doğruysa Then'den sonraki işlemi, değilse Else'ten sonraki işlemi yapar.
INPUT Pin	Belirtilen Pin'i giriş yapar.
LCDIN Address, Var	LCD'deki RAM'in Address bölgesindeki veriyi Var'a atar.
LCDOUT Item	Item'deki değeri LCD'ye gönderir
{LET} Var = Value	Var'a Value'daki işlem veya değeri atar. Gerekli değil
LOOKDOWN Search, [List], Var	Search'teki veriyi List'in içinde arar, o verinin List'teki 0'dan başlayarak kaçıncı veri olduğunu Var'a atar.
LOOKDOWN2 Search,Test, [List], Var	LOOKDOWN'dan farkı List'in içinde 16 bit gerektiren (256'dan büyük) değerler kullanılabilmesi ve Test için karşılaştırma operatörü kullanılırsa şartı sağlayan ilk sayıyı seçmesidir.
LOOKUP Index, [List], Var	List'in içinde Index'teki sayıya karşılık gelen veriyi Var'a atar.
LOOKUP2 Index, [List], Var	LOOKUP'tan farkı List'in içinde 256'dan büyük sayı kullanılabilmesidir.
LOW Pin	Belirtilen Pin'i sıfırlar.
NAP Period	18*2Period ms süre için uyku moduna girer.
ON DEBUG GOTO Label	Debug geldiğinde Label'daki işlemleri yapar.
ON INTERRUPT GOTO Label	Interrupt geldiğinde Label'daki işlemleri yapar.
OUTPUT Pin	Pin'i çıkış bacağı yapar.
PAUSE Period	Period'daki sayı kadar milisaniye bekler.
PAUSEUS Period	Period'daki sayı kadar mikrosaniye bekler.
POT Pin, Scale, Var	Pin'deki potansiyometrenin ayarına göre Scale içindeki uygun değeri Var'a atarak
PULSIN Pin, State, Var	Pin'e gelen State (0 veya 1) pulsun süresinin kaç 10us (4MHz; 20MHz'de 2us) olduğunu Var'a atar.
PULSOUT Pin, Period	Pin üzerinden Period'daki sayı kadar 10us(4MHz; 20MHz'de 2us)  süresince olan işaretin(0 veya 1) tersi puls verir.
PWM Pin, Duty, Cycle	Pin'den % (Duty+1)/2.56 duty cycle'da Cycle'daki değer kadar periyod boyunca PWM çıkışı sağlar.
RANDOM Var	0-255 arasında rastgele bir sayı seçip Var'a atar.
RCTIME Pin, State, Var	Pin'in State(0 veya 1) durumunda kalma süresinin kaç 10us (4MHz; 20MHz'de 2us) olduğunu Var'a atar.
READ Address, Var	Dahili EEPROM'un Address bölgesindeki bilgiyi Var'a atar.
READCODE Address, Var	READ komutundan farkı 16 bit verileri kullanması.
RESUME	Interrupt'la devreye giren program bloğunu bitirir, ana programın kaldığı yere geri dönüş sağlar.
RETURN	Call'la çağrılan program bloğunu bitirir, ana programın kaldığı yere geri dönüş sağlar.
REVERSE Pin	Pin girişse çıkış yapar, çıkışsa giriş yapar.
SELECT CASE Var
CASE Expr1
Statement
CASE Expr2
Statement
CASE ELSE
Statement
END SELECT	
Var'ın içindeki değeri Expr'lerin içinde arar, bulduğu seçeneğin altındaki Statement komutunu işler, bulamazsa Case Else'in altındaki Statement komutunu işler.
SERIN Pin, Mode, {Timeout, Label}, [Qual], Var	Pin'e bağlı asenkron seri haberleşme hattından Mode'la belirtilen hızda (baud rate) veri bekler, gelen veriyi Var'a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider. [Qual] varsa verinin içinde Qual'dan sonraki ilk veriyi Var'a atar.
SERIN2 Pin, Mode, {Timeout, Label}, [Qual], Var	SERIN'den farkı standart bağlantı hızlarından farklı hızlar (baud rate) kullanılmasına izin vermesidir. Mode'daki sayı (1000000/hız)-20 olarak hesaplanır.
SEROUT Pin,Mode, [Var]	Var'ın içindeki verileri Pin üzerinden Mode hızında (baud rate) asenkron seri haberleşme hattına gönderir.
SEROUT2 Pin, Mode, [Var]	SEROUT'tan farkı standart bağlantı hızlarından farklı hızlar (baud rate) kullanılmasına izin vermesidir. Mode'daki sayı (1000000/hız)-20 olarak hesaplanır.
SHIFTIN Datapin, Clockpin, Mode, Var	Datapin'e bağlı senkron seri haberleşme hattından Clockpin'e bağlı ortak osilasyonu kullanarak Mode'la belirtilen transfer protokolünü kullanarak veri alır ve Var'a atar.
SHIFTOUT Datapin, Clockpin, Mode, Var	Datapin'e bağlı senkron seri haberleşme hattına Clockpin'e bağlı ortak osilasyonu kullanarak Mode'la belirtilen transfer protokolünü kullanarak Var'daki verileri gönderir.
SLEEP Period	Period s süresi için uyku modunda kalır.
SOUND Pin, [Note, Duration,{Note, Duration} ]	Pin üstünden Note (1-127) notasını Duration*12ms süreyle üretir.
STOP	Sonsuz nop döngüsü.
SWAP Var1, Var2	Var1 ve Var2'nin içeriklerini takas eder.
TOGGLE Pin	Pin'deki değeri (0 veya 1) tersine çevirir.
WHILE Condition
Statement
WEND	Condition doğrulandığı sürece Statement komutunu uygular.
WRITE Address, Var	Var'daki veriyi dahili EEPROM'un Address bölgesine atar.
WRITECODE Address,Var	WRITE komutundan farkı 16 bit verileri kullanması.
XIN Datapin, Zeropin, {Timeout, Label}, [Var]	Datapin ve Zeropin'e bağlı X-10 interface entegresinden veri bekler, gelen veriyi Var'a atar, Timeout ms süre boyunca veri gelmezse Label bloğuna gider.
XOUT Datapin, Zeropin, [Housecode\Keycode	Datapin ve Zeropin'e bağlı X-10 interface entegresine Housecode ve Keycode verilerini yollar.

electrotechnics

ve digerleri...

Operatör	Açıklaması
   **	16 bit çarpma             W0 = 250    W1 = W0 ** 1000
250000 = %111101000010010000  Sonucun üst 16 bitini W1'e atar.
/	Bölme
//	Bölümden kalan
B = 12       C=5       A = B // C  B'nin C'ye bölümünden kalan 2'yi  A'ya atar.
<<	Sola kaydırma         B0 = B0 << 3   B0'ın içindeki bitler üç kez sola kaydı.
>>	Sağa kaydırma
ABS	Mutlak değer
A=5  B=2  C=(B – A)       C=253               C = ABS (B – A)         C = 3
COS	Kosinüs  0-360 derece 0-255 binary karşılıklarıyla ifade ediliyor.
B0=63 B1=COS B0 B1=0  B0'daki 63 sayısı 90 derecenin karşılığı.
SIN	Sinüs
DIG	Sayının içinden hane seçme                        B0=123  B1=B0 DIG1        B1=2
MAX	Verilen iki sayı arasından en büyük sayıyı seçer
MIN	Verilen iki sayı arasından en küçük sayıyı seçer
NCD	Sayının içinde en soldaki 1 bitinin kaçıncı bit olduğunu verir
B0=NCD %01001000       B0=7
DCD	Söylenen biti 1 yapar, gerisini sıfırlar
REV	Değişken içinde yanındaki sayı kadar alt bitin sırasını ters çevirir
A=01000011  B=A REV3       B=01000110
SQR	Karekök alır                B=4 A=SQR B       A=2     B=5 A=SQR B      A=2
&	İki sayının binary karşılığını VE işlemine sokar
|	İki sayının binary karşılığını VEYA işlemine sokar
^	İki sayının binary karşılığını ÖZELVEYA işlemine sokar
~	Bir sayının binary karşılığını DEĞİL işlemine sokar
&/	İki sayının binary karşılığını VEDEĞİL işlemine sokar
|/	İki sayının binary karşılığını VEYADEĞİL işlemine sokar
^/	İki sayının binary karşılığını ÖZELVEYADEĞİL işlemine sokar
=, ==	Eşit
<>, !=	Eşit değil
<	Küçüktür
>	Büyüktür
<=	Küçük eşit
>=	Büyük eşit
AND, &&	Mantıksal VE
OR, ||	Mantıksal VEYA
XOR, ^^	Mantıksal ÖZELVEYA
NOT AND	Mantıksal VEDEĞİL
NOT OR	Mantıksal VEYADEĞİL
NOT XOR	Mantıksal ÖZELVEYADEĞİL

electrotechnics

2.Aşamada: BASİC KODUNUN DERLENMESİ VE PBP DERLEYİCİ:
İkinci aşmada ,pıce yüklenecek kodunderlenmesine yönelik işler görülür.Derlenme teknik olarak 2 basamakda gerçekleşir:İlk basamakda basic kod assembly koda çevrilir .Buçevirim , yani baic kodun asseblly kod olarak ,derlenmesi basic derleyici adı verilen bir derleyici ile yapılır.İkinci basamağı assembly kodun hex koda (makine koduna )çevrilmesi oluşturur. Bu tercümeyi assembly adı verilen derleyici yürütür.İşte ,bu iki basamaklı ‘derleme'aşamasını yürüten araç PBP derleyicidir.İki basamağı otomatik oarak tamamlama , yani derlemeyi tek adımda bitirmek için (deleme ilk basamakta kesmek için bkz.:derleme seçenekleri),dosya ekranında şunu yazmak yeterlidir.(dos komut sisteminde C: \PBP klasöründe çalıştığınızdan emin olun!!!):
Pbp blink
Bu komutlar önce blink .basadlı basic dosyası derlenecek ve herhangibir hata yoksa blink.asm isimli bir assembly kod dosyası oluşturulavaktır.Hemen ardından otomatik olarak assembly derleyici devreye girecek bunun sonucunda blink.hex adlı bir makine- dili kod dosyası ortaya çıkararacaktır.Bu dosya ,Pbp'nin ön- ayarı gereği makine dili kodunun PıC16f84 uyumlu üretilmesini sağlar.(Başka bir PıC'e göre üretilmesi için Bkz.:Derleme Secenekleri). 
DOS satırındaki    komuta bağlı olarak, deneme aşaması gereğince yürümediyse , meydana gelen hataları bildiren birdizi açıklama görüntülenecektir.Bunlara bakarak Basic kodunun yeniden gözden geçirilmesi gerekir.
   Led li lfaşör devresi uygulaması için PıC'e yüklenecek olan blink.hex C:\PBP klasörünün içinde oluşmuştur.
 
3.Aşama PIC'in Programlanması:,PİC programlamaya ilişkin aşağıda verilen örnek de verilen programlayıcı olarak proto Pic cihazı kullanılmıştır. Başka programlayıcılar için ilgili kullanım klavuzlarına başvurunuz.
Protokol için gerekli yazılımların kullanılan PC'de mevcut olduğu varsayılmaktadır. 
 Blınk.hex'in ProtoPic kullanarak adım adım  pıc'e programlanması aşağıdaki gibi gerçekleşmektedir.
*Blink .hexe dosyasını protopic programlayıcısının yükleme programının  bulunduğu C:\p16pro klasörünün içine programlayınız.
*Dos ekranında C:\P16pro klasörüne geçip p16pro programını çalıştırın.
*Kullanılacak PIC seçimi: F3 tuşuna basıp karşımıza gelen ekranda pıc16F84 için (yada hangi pic'i kullanıyorsanız)karşılık gelen numarayı yazınız ve <Enter> basınız.
*Yüklenecek makine kodunun seçimi:F1 tuşuna basın.Açılan mönüden blink. Hex dosyasını aşağı yukarı tuşlarını hareket ettirerek seçin ve <ENTER>'a basınız. 
*Yükleme : F4 tuşuna basınız Açılan pencerede gösterildiği şekilde pıc16F84'ü programlama soketini yerleştirin ve <enter>'abasın  .Birkaç saniye sonra P16pro programı pıce yüklemenin bittiği mesajını verecektir.PIC, artık kullanılmaya hazırdır.
Büyük an geldi!!! PIC'in denenmesi
PIC'i çalıştırmak üzere yapılması gereken bağlantılar aşağıdaki şematikte gösterilmektedir:/ MCLR bacağı ile +5 V arasına 4k7'lik bir direnç ,22pf'lik 2 kapasitör ve 4 mhz'lik bir kristalden oluşan bir osilatör devresi ,5V güç kaynağı ve blink. Hex programını deneyeceğimiz bir flaşör devresi için bir led ile bir de   direnç

electrotechnics

HANGİ PIC
	Yüzden fazla pıc çeşidi içinden hangilerini kullanmalı sorusunun yanıtı şüphesiz ki pıc'in kullanılacağı uygulamanın gereksinimlerine doğrudan bağlıdır.Ama PBP'yi öğrenme aşamasında en doğru seçim'flash' program bellekli pıcler olacaktır.Bu tür pıcleri tercih etmenin en temel  nedeni program belleğinin elektriksel olarak silinebilmesinden  ve uygulama geliştirmek için gereken minimum donanımın bir pıc programlayıcıdan ibaret olmasından kaynaklıdır.Böylece hem kod geliştirme süreci çok kısalmakta ,hem de programlayıcılara oranla çok pahalı aygıtlar olan emilatörleri kullanma gereği de ortadan kalkmaktadır.Çünkü kodu değiştirerek pıci defalarca silip, yükleme süreci ‘flash'belleklilerde saniyelerle ölçülmektedir.Pencereli sürümlerde ise,pıc'in ultraviyole lambalı eprom silicide silinmesi gerekmektedir ki buda her seferinde en az 10-15 dakika sürmektedir. 
Bu kitapta verilen örneklerde kık bacaklı pıc16F877 ,28 bacaklı Pıc16F877 veya Pıc16F873, 18 bacaklı PIC16F628 ya da PIC16F84 kulanılmaktadır.Bu pıclerin hepsinin program beleği'flash'tır.
PıC16F877 PIC16Cxxxhemen tüm çevre birimlerini üzerinde taşımasından dolayı pıcler için üniversal kod geliştirme yongası olarak kullanılabilir. Aşağıda bu yonganın özelliklerine ilişkin ayrıntılı bilgi verilmektedir.
PROGRAM BELLEĞİ:Her biri 2k'lık 4 program sayfasında (0..3 arası )toplam 8k 2dır.Elektriksel olarak silinebilir.)
 RAM:4 bankta (0..3 arası) toplam368 byt'tır.		
DATA EEPROM:Çalışma sırasında sahadan verti toplamada, kimi kalibrasyum bilgilerini saklamada ya da örneğin seri numarası ,şifre vb. gibi bilgileri tutmada kullanılan veri belleği.256 byt kapasitesindedir.Read ve Write komutlarıyla yazılıp okunabilir.
GİRİŞ  ÇIKIŞ PORTLARI:A,B,C,D ve E olmak üzewre toplam 5 porttan oluşmaktadır.Portların tüm kanalları / bitleri birbirinden bağımsız dijital giriş ya da çıkış olarak yapılandırılabilirler.A portunun 6,B, C, ve D portlarının 8, E portununsa   3 kanalı  vardır.
ANALOG/ DİJİTAL ÇEVİRİCİ:A portunun 5 ,E potununsa 3 kanalı her biri 10 bit çözünürlükte A/D çevirici olarak yapılandırılabilinir.
UART:pıc16f877 uygun şekilde  yapılandırılırsa portc.6 ve portc.7 bacakları asenkron seri haberleşmede gönderme ve alma terminali olarak iş görürler.
PWM:Pıc16f877 uygun şekilde yapılandırılırsa Portc.1 ve Portc.2 bacakları pwm sinyal üretici olarak iş görürler.
 PICLERE ÖZGÜN MESELELER
Hangi picle çalışıyorsak o pic e ait microchip datasheetini okumak olmaz ise  olmaz şarttır.Bazı piclerin sahip oldukları birtakım özelliklerden kaynaklı,bazı portlarını beklenen davranışı göstermemesi gibi durumlar söz konusu olabilir 16c62x ve 16f62x serileri bu duruma iyi bir örnektir.Bunların APORTUNDA (porta) analog komparatötler bulunur.Yonga reset durumundayken PORTA analog moddadır ve böylece bacaklar beklendiğinin (bir çok pic de olduğu gibi digital port olması beklenmekdedir)tersine iş görürler.Bu bacakları digital yapmak için programın başında bir yere şu satırı yazmak gerekmektedir.
CMCON =7 
Analog girişin herhangi bir pic –örneğin 16c7xx,16f87x  ve 12c67x –analog kanal olarak yapılandırılabilir.Tüm kanalların ,reset anında analogdur.Bunları dijital kullanabilmek için şu belirlemeye gerek vardır:
ADCON=7 
Bu kanalların bir kısmının dijital, birkısmının da analog kanak işlevi görmesini sağlamak olanaklıdır.Örneğin pıc16f877 ‘de A ve E portları ,reset anında analog kanal olarak yapılandırımışllardır.Analog kanallar 10 bit çözünürlüktedirler.(istenirse 8 bit olarakta kullanılabilir).
Pıc16f877'de analog kanallar kullanıldığında , 10 bitlik A/Bçevrim sonucu üst baytı ADRESH ve alt baytı ADRESL şekilde 2 yazmaçta saklanmaktadır.Analog kanal yapılması için aşağıdaki çizelgeden yararlanılır.
ADCON(9FH)yazmacının ayarlanması:
																																																																																					7. bit(ADFM):A/Dsonuç format biti
1:sağa yaslamalı .ADRESH yazmacının en üst 6 biti'0' dır.
0:sola yaslamalı .ADRESL yazmacının en alt 6 biti ‘0' dır.
4.,5.ve6. bitler:kullanılmamaktadır.'0'olarak işlem yapın.
0..3bitler(PCFG3..PCFG0):ADCON1 yapılandırma tablosuna göre ayarlayınız.																																																																																																																																																																																																																						PORTA'nın tüm kanallarını n analog ,PORTE2nin tüm kanallarının dijital olmasını istiyorsak ve bize sadece 8 bitlik çözünürlük yetiyorsa aşağıdaki ifadeyi kullanabiliriz.
ADCON1=%00000010
Sonuç sola  yaslamalı formatlandığından(adcon1.7=0)adreshyazmacından 8 bitlik sonuç yer almaktadır.En alt basamaktaki 2 bitlik değerse adresl 6. ve 7. bitlerinde ise de bize sadece 8 bitlik çözünürlük yettiği için onları kullanmıyoruz.
PORTA ile ilgili muhtemel felaketlerden biri  de ,4. bacağının çıkış yapılması durumda gösterdiği normel dışı davranıştır.Bunun sebebi bacağını açık-dren bir çıkşının olmasıdır.Oysa genelde diğer bacaklar bipolardır.Bu bacak  0 ayarlandığında toprakı çekerken,bire ayarlandığında yükseğe geçmek yerine  başıboş davranır. Düzgün davranmasını sağlamanın yolu bacak ile 5 V arasına , bağlı girişin Gerektirdiği sürücüye göre  değeri 1k ile 33k arasında değişen yukarı çekme direnci koymaktadır.bacak girişi yapıldığında diğer bacak gibi davranır.Bazı pıcler ,16f627-628-873-874-876,877 gibi ,düşük voltajla programlamaya olanak tanırlar.Bu özellik port B bacakları üzerinde gerçekleşir.Eğer bacak lojik düşüğe çekilmemişse entegre anormal davranışlar sergiler. Bundan kaçınmanın en garanti yolu programlama sırasında düşük voltaj özelliğinin devre dışı bırakılmasıdır.reset anında pıc'in bütün kanalları giriş olarak yapılandırılmıştır.Her porta ait bir de yön yazmacı bulunmakktadır.Örneğin A port'u porta,bunun  yön yazmacıda  TRISA olarak adlandırılmaktadır .Keza diğer port  yazmaçları için de aynı şey geçerlidir.İlgili trısa yazmacında giriş yapmak istediğiniz kanalları temssil eden bitlere 1 çıkış yapmak istediğiniz kanallara ise 0 değerlerini veriyoruz .Örneğin: 
TRISC=%00110001
İfadesi portc'nin 0.4,ve 5. kanallarının giriş diğerlerini ise çıkış yapar.
12C5xx,12CE5xx,12C67x ve12E67x pıclerdeki port bacaklarının adı Gpıo'dur.Trıs yazmacının adı ise TRISIO'dur.
GPIO,0=1
TRISIO=%101010
17Cxxx'in TRIS yazmaçları ddr(veri yönü yazmaçları) olarak adlandırılır.Girş/çıkış yönünü belirlerken TRIS  yerine DDR'yi kullanmak gerekir.
DDRB0        port B'yi çıkış yapar. 
Aynı entegrenin Aportunda veri yönü yazmacı yoktur.
B portunun  tüm kanallarında yazılımla etkinleştirilebilen dahili çekme dirençleri vardır.Bu durum ,dijital çıkış olarak yapılandırılmış port B kanalları için geçerlidir.dahili çekme dirençlerini etkinleştirmek için OPTİON _REG yazmacının 7. biti 0 yapılmalıdır.
OPTİON_reg.7=0
Yukarıdaki ifade, PORTB'nin giriş olarak yapılandırılmış dijital kanallarıyla  pıc'in pozitif beslenmesi arasında  bulunan dahili dirençleri etkinleştirir.Bu dirençlerin her biri 50 k metrebesindedir.Bazı pıclerde I kareC arabirimli seri eeprom  Â‘lu gibi yerleştirilmiş değişmez veri belleği vardır.I kare Cara birimi seri eepromlu (12CE51x,12C67x ve12ce67x) cihazlarda READ ve WRİTE komutları etkisizdir. Dolayısı ile bu yongalar ile çalışırken I kare CREAD ve I kare CREAD  komutları kullanılır.
Pıc12C671,672 ,12C673 ve674 bazı diğer dentegrelerde yonga üzeri RC osilatörü yer alırBunlar , kod alanının son yerleşiminde bir osilatör  kalibrasyon faktörü içerir.Yonganın osilatörü  veriyi  bu adresten alıp OSCCAL yazmacına taşıyarak hassas ayarlanabilir.bu işi programın her başlayışında otomatik olaralak yapmak içiniki tanım oluşturulur:
Define OSCCAL_1K    1           ‘OSCCAL 1K cihaz için  ayarlandı
Define OSCCAL_2K     1           ‘OSCCAL  2K  cihaz için  ayarlandı    
YazılanBASIC kodun ilk satırına bu tanımlardan kullandığınız yongaiçinuygun olanı ekleyerek OSCCAL ayarlanabilir.
PBP, 12C51x ve 12CE51x entegrelerinde OSCCAL değerini, eğer mevcutsa, kendılıgınden yükler. Dolayısıyla yukarıdaki satırı yazmaya gerek yoktur.
Yyukarıdaki aileden pencereli tip ir yoga (UV)silindiği zaman , bu değerin bellekden okunması imkansızdır.Tanımlardan birini silinen bölgede kullanılmış olması halinde program sonsuz döngüye girer.Silinmiş bölgede ki OsccAL yazmacını ayarlamak için programın başına şu satırı yazmak gerekir:
OSCCAL=$A0				`OSCCAL yazmacı $a0`a ayarlandı.      
$A0 sadece bir örnekten ibarettir.İlgili entegreye ilşkin cari OSCCAL değerinin elde edilebilmesi için  bölümün silinmeden önce okunmuş olması gerekir.
   PICLE DEVRE KURARKEN KARŞILAŞILAN BAZI SORUNLAR
Piclerle çalışken sık karşılaşılan soruların başında harici devre elemanların değerlerinin uygun olmaması ve entegreye doğru bağlanmaması gelir.Aşağıda verilen ipuçları böyle sorunların önüne geçmeye yöneliktir.
/MCLR bacağının 5 v'la bağlantısı wya bir voltaj korumalı reset devresi yada 4.7K ‘lık bir direnç üzerinden yapılmadır.Bacağı bağlantısız bırakırsanız ,seviyesi başı boş olarak değişecek ve pic bazen çalışsa bile bazen çaılşmıyacaktır.Yongadaki"power-on-reset"devresi sayesinde yukarı çekmeli bir direnç yeterli olmaktadır.
Kristalin kaliteli ve bağlı kapasıtörlerinin doğru değerli olması önemlidir. Kapasitör değerinin olması gerekendenbüyük olması durumunda osilatör devreye girmez ,düzgün çalışmaz .22pikoF'lık 2 adet seramik disk kapasitör ve 4 mhz bir kristal pıclerin çoğunluğu için uygundur. Güç kaynağının iş görmeye uygun olması şarttır. Pıcin sarfiyatı fazla olmasa da kaynağın gereğince filitrelenmesinde yarar vardır.Pıcin fazla miktarda akım çeken cihazları kontrol etmesi halinde bunların açılmaları ve kapanmaları sırasında güç hatlarına ani yükleme yapması pıcin düzgün çalışmasına engel olacaktır.Öyle ki sadece bir led bile ani bir sızıntı ile geçici olarak  küçük bir güç kaynağı gibi davranarak pıcin'aklını yitirmesine
 sebep olabilir'.
Başlangıçda küçük sorunları halledebilecek ölçüde kısa programlar kurarak çalışmak ve bunları işler hale getirdikten sonra genişletmek en doğru yaklaşımdır.Bir program oluşturmanın çok çeşitli yolları vardır.Sorun çıkareması olanaksız gibi görünen bir program bile çalışmayabilir.İşe yeniden ve farklı bir bakış açısıyla yaklaşmak meselenin özünü anlamayı kolaylaştırır.



PROGRAM KOD SAYFASI:
PIC'lerin pek çoğundaki kod belleği 512 baytlık    2k'lık ve ya 8k'lık  word sayfaları şeklinde bölümlenmiştir.Büyük boyutlu dosyalar basic ve assembler derleyiciden geçtikden sonra birinci sayfadan daha fazlasını kullanmaya başlayabilirler.Kullanılan her sayfa için PM(assembler)kodun sınırı aştığı mesajını yollar.Böyle bir durumda sorun çıktı sanıp telaşlanmaya gerek yoktur.Bu çerçevede ortaya çıkması muhtemel bir sorunun yegane kaynağı BRANCH komutudur. BRANCH ile sınır ötesindeki bir etikete erişmesi olanaksızdır.Böyle durumlarda BRANCHL komutuna başvurmak gerekmektedir.Bu komuttaki herhangibir kod sayfasındaki etkete erişmek mümkündür.
      BELEK YETERSİZLİĞİ (OUT OF MEMORY)HATALARI
Büyük pbp kaynak kodu dosyalarının derlenmesi sırasında PC nin belleğine bir yük biner.Yetersiz bellek mesajı verilmiş olması halinde,FİLES ve BUFFERS parametreleri  gereken değerlere sahipse başka bir PBP versiyonuna baş vurmak  düünüebii.Windows 95 /98/me/nt ve 2000 için PBPW.EXE kullanilabilir. Bu dosyayıDoS satırından çalıştırmak için PBPW blink  yazmak yeterlidir.
Kod yazımı(Program Geliştirme)
Açıklama kullanmaktan kaçınmayın.En açık,başka bir türlü yorumlamaya olanak yok dediğiniz satırlar için bile açıklama verin.Öyle ki açıklamalar basit bir sentaks tercümesinden çok o satırla açıklanan şeyi ortaya koysun.Örneğin "pin 0'ı 1'e ayarla"yerine "pil zayıf led'ni yak"demek amacı doğrudan anlatacaktır.Açıklamaların pıc'e yüklenecek program üzerinde herhangi bir etkisi  yoktur.
Programınızı çeşitli alt bölümler halinde ayarlayıp herbirini başına bölümün hallettiği işleri anlatan genel başlık niteliğinde bir açıklama ekleyin.etiketleri ve bacak isimlerini mümkün olduğunca gördükleri işlevi esas alarak belirlemeye çalışın.Aşağıdaki satırları inceleyin;
Battled var portB.0				"pil zayıf led'i"
Level var byte					"pil düzeyi gösterge değişkeni"
İf level<10 then High battlet			"düzey düşükse led'i yak"
Goto komutunu olanaklı olduğu ölçüde az kullanmak en başta gelen ilkelerinizden biri olsun.
DERLEME SEÇENEKLERİ:
KULLANIM:
Pbp derleyicisi, DOS satırında aşağıdaki komut formatıyla çalıştırılır.
PBP tercih dosya adı 
PBP2yi çalıştırırken belli tercihler yapmak mümkündü.bu  tercihler derlemenin şeklini belirleyen anahtarların kullanımı ile belirtilir.Bir anahtar dos komut satırında başına (-) veya(/) işareti getirilen  ve genelde bir harften ibaret olan bir karekterle ifade edilir.Ek karekter (ler) ilgili anahtara bitişik olarak ve ya bir boşluk eklenerek yazılır.Aynı anda birkaç anahtar kullanılabilir.Aşağıda ki örnek BLİNK.BASdosyasının pıc16c71 için MPASM programıyla derlenmesini sağlar.
PBP-p16c71-ampasm blink
Önünde eksi(-) işareti olmayan ilk terim dosyaadıdır.Özellikle belirtilmedikçe dosyanın uzantısının .BAS olduğu kabul edilir.Kaynak dosya nerede olursa olsun ,PBP derleme sonucunda ürettiği dosyaları PBP,PB.exe ile PBP.exe ‘nin aynı klasörde olduğunu varsayar.Eğer derleme hatalı ise ve ya –s tercihi kullanılmış ise assembler başlatılmaz.Pbp tek başına ()anahtarsız dosya belirtmeden vb.) çalıştırılacak olursa yardım ekranı görüntülenir.
ANAHTARLAR:
-a
PBPile nesne kodu (makine dili  hex dosya) oluşturmak için 2 assembly derleyiciden (assembler) biri kullanılır.Bunlardan biri PBP içinde yer alan PM programı diğeri de microchip'in MPASM programıdır.
MPASM derleyicisi kullanılacaksa  komut satırı aşağıda ki şekilde yazılır.
Pbp-AMPASM dosyaadı
Belli bir assembler belirtilmemesi halinde PM çalıştırılır.(Bu konuda daha fazla bilgi için assembly diliyle programlama kısmına bakın .)

-c
-c anahtarı  Pbp kaynak dosya kodunun assembly dosyasına açıklama olarak geçmesini sağlar.Böylece hem  basic  kodunu assembly kod karşılığını incelemeye  imkan verir hem de hata giderme sürecini kolaylaştırır.
PBP –c dosyaadı

-e
-e anahtarı hataların .er uzantılı bir dosyaya geçmesini sağlar.
PBP –e dosyaadı
-h ve ya -? 
-h ve ya -? Anahtarı yardım menüsü görüntülenir.Aynı menü anahtarı ve dosyaadının belirtilmediği durumlarda da görüntülenir.
-i
Bu anahtar ile PBP2nin ihtiyaç duyduğu dosyaların adresi belirtilir.
-1 
-ı anahtarı ihtiyaç duyulan kütüphane dosyalarının seçimine yöneliktir.Ancak bunlar genellikle entegrenin kofigürasyon dosyalarında yer alırlar.Dolayısıyla bu anahtara pek ihtiyaç duyulmaz.
PBP-1pbpps2 dosyaadı 
Örneğe göre , kaynak  dosya picStic2 kütüphanesiyle birlikte derlenecektir.
-o
-o anahtarı takip eden karekterlerin assembly dosyasına seçenek olarak girmesine  sağlar. İzleyen tabloda kalıcı PM seçenek olarak girmesini sağlar.İzleyen tabloda kalıcı PM seçenekleri görülmektedir.
																																																																																			
	PBP – o dosyaadı
Yukarıda ki satırın icrası ile derleme tamamlandıktan sonra .1st uzantılı bir dosya oluşturulur.
Aynı satırda birden fazla sayıda –o anahtarı kullanılabilir.(bu konuda daha fazla bilgi için PICmikro macro assembler klavuzuna bakınız.)
-p

PBP ön ayarı itibariyle programları PI16f84 için derler.Eğer derleme farklı bir entegre için  yapılacaksa , komut satırı –p anahtarı kullanılır.Örneğin pıc16f877 için aşağıdaki komut satırı uygulanmalıdır.
Pbp –p16f877 dosyaadı
-s
Basic ile hazırlanmış kaynak kod dosyasının PBP tarafından hatasız derlenmesini  takiben  normal olarak assembly derleyicisi devreye girerek PIC'e yüklenecek makine kodunu yani.hex dosyası üretir.Makine kodunun bu aşamada üretilmesi istenmiyorsa –s anahtarı kullanılmalıdır.-s'nin asembly derleyicisini engellemesi nedeniyle –o kullanımıyla assembly dosyasına geçen  seçenekler boşa  çıkarlar.
PBP –dosyaadı
-v
Bu anahtar derleme esnasında Pbp ‘nin daha fazla bilgi vermesini sağlar.
PBP –v dosyaadı

electrotechnics

aşagıdaki ekleyecegim yazıda bircok sorunuza yanıt bulacagınızı umuyorum...

[code]
ESASLAR:
1)isimler(tanıtıcılar):
PBP'nin etiketlerin ve değişkenlerini belirlerken kullanılırlar.Harf ile başlayan , harf rakam ve ya alt çizgi ile devam eden karakterler den oluşurlar .Büyük /küçük harf fark etmez .Hepsi aynı karakter olarak yorumlanır. PBP ilk 32 karakteri dikkate alır .
2)Satır etiketleri:
GOTO ve GOSUB komutlarıyla akışın yöneleceği program  bölümünü göstermek için kullanılır. PBP'de satır numarası kullanılmaz.Öte yandan etiket kullanmak bir zorunluluk değildir.Satır etiketlerini ayırt edebilmek için etiket isminin  arkasına (iki nokta üst üste ) konulur.
Sericikis:
Serout  0,N2400,(‘Merhaba ‘,13,10)
3)değişkenler:
DEĞİŞKENLER PBP programının verilerini saklar.VAR terimi (rezerve sözcük)kullanarak beyan eder . BIT BYTE ve ya WORD boyutlu olabilirler .Beyan edilen her değişken için entegrenin RAM'ın da otomatik olarak yer tahsisi yapılır.Değişken beyanı şu formatla yapılır.
Etiket VAR boyut {.durum belirteci}
Burada etiket bir tanıtıcıdır.Rezerve sözcüklerden biri olamaz.Boyut ile etiketin büyüklük yönünden tipi belirtilir.Durumbelitecinin kullanımı tercihe bağlıdır.Değişkenin ouşturulma şekli üzerinde ek kontrole olanak tanır.
Dog  VAR  byte
Cat  VAR  bit
W0  VAR  word
 PBP'de önceden tanımlanmış kullanıcı değişkeni yoktur.BASIC stamp I ve II'de kullanılan standart değişkenlere uyumlu olma kaygısı ile BS1DEFS.BAS ve BS2DEFS.BAS adlı iki dosya bulunmaktadır.ÖRNEĞİN ilkini kulanmak için programın başına
İnculide  Â‘bs1defs.bas'
Yazmak yeterlidir.
Bu dosyalar bacak tanılarını ve değişken beyanlarını içerir.Bunlar yerine kendi isimlendirdiğiniz değişkenleri kullanmanız daha sağlıklı olacaktır.Kullanılacak değişken sayısı entegrenin RAM'ına değişkenlerin ve dizilerin boyutuna bağlıdır.PBP'nin bu amaçla 24 RAM yerleşimi rezerve eder.Bunlara ek olarak karmaşık denklemler için geçici ek değişkenlerde kullanılması mümkündür.
4)lakaplar:
VAR beyanı ile bir değişken için lakap (takma ad )belirleyebilirsiniz. Böylece değişkenin içine erişme olanağına sahip olabilirsiniz.
Fido VAR dog            Â‘dog icin ek isim
B0 VAR  w0 .byte0          Â‘w0 word ‘unun alt baytinin ismi:b0
B1 VAR  w0 . byte1          w0 word'unun üst baytının   ismi:b1
Flea VAR  dog .0         Â‘dog ‘un 0 nolu bitinin  ismi :flea
                                                                                                                                                                                                                                                                                                                                                                                             5)Diziler:
Değişkenler gibi beyan edilirler.Sentaksı aşağıdaki gibidir.
1abe 1    VAR boyut  [elman ]
boyut BIT BYTE veya WORD olabilir.eleman ise kaç adet olduğunu gösterir.
Sharks  VAR byte [10]
Fish VAR bit [8]
Dizinin ilk elemanı için adres 0 ‘dır.Örneğin yukarıda ki ikinci beyanda fish adlı dizinin 0'dan 7'ye 8 elemanı olacaktır.Dizilerin bellekteki rezervasyon yöntemi nedeniyle  her tip içinbazı sınırlamalar söz konusudur.
                                                                                                                                                                                                                                     Eleman sayısı işlemciye bağlıdır.
Dizinin tüm elemanları bir RAM  bankına tümüyle yerleşebilmelidir.Dizi elemanları birden fazla RAM bankına yayılamaz.Bu durum 12- bit ,14 bit ya da 17Cxxx serisi PIC'ler için geçerlidir.
18Cxxx serisi PIC'lerdeyse dizi elemanları birden fazla bankta yer alabilir.BYTE ve WORD boyutlu diziler için tek kısaltma bellek kapasitesinin yetersizliği olabilir.PBPdizi elemanlarının derleme öncesinde belleğe tam yerleşimi sağlanmaktadır.
6)Sabitler:
sabitler değişkene benzeyen bir yapıyla tanımlanabilir.Bu yötem sabitin kendisi yerine bir isim ooootahsis etmek surettiyle kullanılır.Programı başka bir sabit değer kullanarak derlemek istediğimizde sabitin geçtiği bütün yerlerde değişiklik yapmaktansasabite ism ataması yapılan yerde yapılacaktek değişiklikle programda kullandığımız o sabitin değeriniprogramda geçtiği tüm yerler için değiştirmek olanaklı olacaktıtr.Sentaksı  şöyledir:
1abe 1 CON sabit
Örnekler:
mice CON mice  3
Traps CON mice * 1000
7)Semboller:
SYMBOL ile değişkenler ve sabitlere değer atamak  mümkündür.BS1 ile uyuilu olmak kaygısı ile yer verilmiştir .Değişken beyanında kulanılamaz . Lakabın atandığı değişken veya sabit mutlaka dahaönce tanımlanmış olmalıdır.
Dog VAR byte            Â‘dog byte boyutunda bir değişkendir.
SYMBOL doggy= dog       Â‘dog daha önce tanımlanan bir değişken
8)Sayısal Sabitler:
sayısal sabitler 3 ayrı şekilde belirlenir.Bunlar sayının on onaltı ve iki  tabanındaki değerlerini ifade eder.İkili değerler için % imgesi  onaltılı dayılar için $  imgesi kullanılır.Yazılan sayının önüne getirildiklerinde  değerin tipini belirtmiş olurlar.
        100        Â‘onlu sayı (100)
        % 100      Â‘ikili sayı onlu değeri 4)
        $100        Â‘oınaltılı sayı (onlu değeri  256)
programlamanın kolaylaştırılması açısından tek karakterler ascıı karşılıklarına  çevrilir. Rakam olmayan karakterler tırnağa alınmalı   ve tek lmalıdırlar.Aksi taktirde stin olarak yorumlanırlar.
‘A'                      Â‘ onlu sayı ( 100 )
%100                Â‘ ikli sayı    (onlu  değeri  4)
$ 100                 onaltılı sayı  (onlu değeri 256)
programlamanın kolaylaştırılması açısından  tek karakterler ASCII karşılıklarına çevrilir.Rakam olmayan karakterler tırnağa alınmalı ve tek   olmalıdırlar.Aksi taktirde  sting olarak  yorumlanır.
‘A'            onlu 65 ‘in ASCII imgesi
‘d'            onlu 100 ‘ün ASCII imgesi
stringler karakterler listesi gibi işlenirler:
SAYISAL sabitler:
PBP'nin stringlerini içeren hesaplama yapma kapasitesi yoktur.Ama yinede bazı komutlarla string kullanılabilmektedir.String bir ve ya daha fazla karakterden oluşmaktadır ve ‘...'  İŞARETLERİ arasında gösterilmektedir.
Lcdout     ‘Merhaba'
Komutu aşağıdaki komut ile aynı işlevi
Lcdout  Â‘M','e','r','h','a','b','a'
Görmektedir.

   10)portlar ve diğer yazmaçlar:PIC'lerin yazmaçlarına erişim Byte tipi değişkenler erişim gibidir.Yani eşitliklerde doğrudan doğruya kulanılabir.
PORTA=% 01010101            Â‘A portuna yazılacak  ikili değer
Altkisim= PORT & $  0F        Â‘B portunun alt 4 bitini ayirip
                                                       Â‘altkisim isimli değişkene koyar
    11)BACAKLAR:
pport bacaklarına çeşitli şekillerde erişilebilir.En dolaysız yöntem portu ve bacağını belirtip değerini atamaktır.
PORTB.1=1                            Â‘Bportunun 1. Bacağı /biti ‘1' yapıldı.
Bacağın hangi amaçla kullanıldığını belirtmek için isim verilebilir.
Led varporta.0   ‘Aportunun  0. Bitine led ismi verildi.
High led              Â‘led isimli bgit lojik ‘1' yapıldı.
Bacakları 0-15 arası numaralandırmak BASICstamp ile uymluluk kaygısından kaynaklanır.Bu bacakların bir pıc üzerinde nasıl yerleştiği entegrenin bacak sayısıyla ilgildir.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Bir portta 8 bacak yoksa sadece mevcut bacak numaraları kullanılır.bu bacak numarasının pıcin fiziksel bacak numarası ile ilgisi yoktur.kullanılan pıce bağlı olarak 0 bacak numarasının bacak karşılığı 6,21 ve ya  33 olabilir.Her durumda bu bacaklar portb dedir.(ve ya 8 bacaklılar için GPIO.0'da 14C000 için PORTC.0'dadır.)
Bacak referansları 0 15 arası sayılarda PINO şeklinde veya tanımlayacağınız başka bir şekilde belirlenebilir.Ayrıca BS1DEFS ve BS2DEFS dosyaları yüklenerek oradaki isimler kullanılabilir.pıce enerji verilmesi ile birlikte tüm bacaklar giriş olarak belirlenir.Dolayısıyla çıkış olarak belirlenecek bacakların özel  olarak ayarlanması gerekir.Bu işlem port ya da tek başına bir bacak için yapılabilir.
Bir bacağı ya da bir portu çıkış olarak ayarlarken TRIS yazmacı kullanılanılır.O porta ait TRIS yazmacının  bir biti 0 yapılırsa  o bacak çıkış ;1 olarak ayarlanırsa o bacak giriş olarak ayarlanır.a portunun tüm bacaklarını çıkış yapmak için :TRISA=%00000000     TRISA=0 şeklinde de yazılabilir.
B portunun tüm bacaklarını giriş yapmak için:
TRISB=11111111          TRISB=255 yazılabilir.
C portunun  tek sayılı bacaklarını giriş çift sayılı bacaklarını çıkış yapmak için :
TRISC=%10101010
A portunun sadece 0 nolu bitini / bacağını çıkış yapmak için :
TRISA.0 =0
-Basic stampın Dirs,Dirh, Dirl ve Dir0-Dir15 değişken isimleri PBP'de tanımsızdır.Aynı işi TRISle halletmek mümkündür.
12)AÇIKLAMALAR:
PBP'de açıklama yazarken satırın başına REM ve ya apostrof (‘) assembly satırlarda  ise noktalı virgül(;) konulur.Bunları takip eden karakterler derlemede göz ardı edilir.PBP'de ilk hecesi REM olan kelimeler  değişken ismi olarak kullanılabilir.Ancak tek başına REMadlı bir isim kullanamazsınız.
13)SATIRLAR:   
Stırı yazarken iki nokta üst üste (:) ile yeni   satıra geçilir.Yani bu imge satır ayıracıdır.Farklı satırda yazılan ifadeleri bu şekilde yazmak mümkündür.(bu durum programın büyüklüğünü değiştirmez.)
W2=w0
W0=w1
W1=w2
Yukarıdaki tümceler aşağıdaki ile aynıdır.
W2=w0:w0= w1 :w1=W2
14)SATIR DEVAMI KARAKTERLER:
PBP'nin bir satırında en çok 256 karakter gösterilebiir.Bu değerin aşılması halinde alt çizgi kullanılarak (-)aşağıya geçilr.Fakat aynı satıra devam edilmiş olunur.
Branch b0 ,[1abe10,1abe11 , 1abe12,1abe13, 1abe14, 1abe15 ,1abe16, 1abe17 ,1abe18,...]
15)EK DOSYA YÜKLEME(include):
yeni çalışma dosyasına başka basic kaynak dosyalarının eklenmesi için kullanılır.Standartlaştırdırdığınız   rutinler  tanımlar vb. gibi hemen her   zaman kullandığınız birtakım  program parçalarını  bağımsız dosyalarda saklayıp daha sonra İNCLUDE  komutu ile yeni çalışmanızıa kolaylık ile ekleyebilirsiniz.
PBP ek dosyada bulunan tüm komutları  İNCLUDE  komutunun yazıldığı yerden  başlayak şekilde sanki satır satır aktarılmış gibi yeni çalışma dosyasını derler.
INCLUDE    Â‘modedefs  .bas'
16)TANIMLAR:
Saat osilatör frekansi ve lcd pin terleştirmeleri gibi bazı  unsurlar PBP'de önceden belirlenmiştir.Bu öndeğerleri değiştirmek için DEFINE  kullanılır.DEBUG bacakları baud hızı ve başka büyüklüklerde bu yöntemle değiştirilebilir. (ek b'ye bknz)
17)OPERATÖRLER:
PBP'de matematik işlemlerinin uygulama önceliği kurallıdır.Örneğin parantez içindeki işlemler en önce çarpma ve bölme daha sonra toplama ve çıkarma ise en sonra yapılır.Bu nedenle işlemlerin istenilen sırada yürütülmesini  garantilemenin en iyi yolu grupları belirlemektir.
A=(B+C)  *(D_E)
Matematik işlemler işsretsiz ve 16 bit duyarlıktsdır.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ÇARPMA:
Pbp'DE ÇARPMA İŞLEMİ 16 bit  x 16 –bit ve işsretsiz kullanılır.'*' operatörü  32 bit sonucunalt 16 bitini verir.Bu yapı hemen hemen tüm programlama  dillerinde kullanılan yapıdır.'**'  operatörü ise 32 bit sonucun üst 16 bitini verir.   
Dolayısı ile ikisi birden 16- bit x 16 bit çarpma işleminin  32 bit sonucunu elde etmekte kullanılabilir.
W1=w0  *1000   ‘w0'  1000    Â‘w0 ‘  1000 ‘ le çarp sonucu w1'e koy
W2= w0 ** 1000  W0'ı 1000 ‘le çarp , üst 16 biti w2'ye koy
                                    */operatörü 32 bitlik sonucunorta 16 bitini alır.
W3=w1 * / w0         ‘w1' le w0'ı çarp orta 16 biti w3'e  koy
BÖLME:                                 PBP'de bölmede işemi 16-bit  x16 bit ve işaretsiz uygulanır.'/' operatörü 16 bit sonuç verir.'//' operatörüyse kalanı vermektedir ki bazen ilgili sayının  modu oarakta ifade edilmektedir.
   W1= w0 / 100     ‘ w0' ı 100'e böler  ve sonucu w1'de saklar.
   W2=w0// 1000     ‘w0'ı 1000 ‘e böler ve kalanı w2'de saklar.
    Kaydırma:
‘<<'ve ‘>>' operatörleri bir değişkenin bitlerini sola veya sağa kaydırırlar.Bit kaydırma aynı değişkende en fazla 15 kez yapılabilr.yeni giren bitlere ‘'0''değeri atanır.
B0 var byte
W1 var word
B0=<<  3
      
                                  ‘B0 byte değişkeninin bitlerini 3hane sola
                                  ‘kaydırır.Böylece 0. Bit 3. Bitin , 1. Bit 4. Bitin
                                  ‘0. Bitin yerine  kayacaktır.15. bitin yeni
                                  ‘değeriyse ‘0' olacaktır.
W1=w0 >> 1              Â‘w0 word değişkeninin bitlerini 1 hane sağa
                                  ‘kaydırı r .Böylece 25. Bit 14. Bitin ....1. bit ise
                                  ‘değeriyse ‘0 ‘ olacaktır.
Abs:
ABS operatörü üzerinde işlem  yaptığı değişkenin /sabitin mutlak değerini sonuç olarak verir. Eğer değişken / sabit bayt ç boyutundaysa ve değeri 127'den büyükse yani 7. ‘1''se, ABS işleminin sonucu 256 olarak verilecektir.Değişken/sabit word boyutunda ve değeri  32767 ‘den büyükse yani 15.biti ‘1'' se ABS bu sefer  65536 sonucunu  verecektir.
B1=ABS B0
Cos:  
cos operatörü üzerinde işlem yaptığı  değişkenin /sabitin kosinüsünü sonuç olarak verir.COS operatörü 0...359  derece arası değerler yerine 0...255 arası ikili radyan  (brad=binary radion)değerlerinin kosinüsünü sonuç olarak verir.Örneğin 90 derece =64 brad'a karşılık  gelmektedir. Bunu basit bir orantı kurarak hesaplayabiliriz.
Bread=(derece/360)x256
COS operatörünün verdiği sonuç negatif değerleride  gösterebilmek için ikinin tamlayanı biçiminde düzenlenmiştir  , yani-127 ...127 aralığındadır. Dolayısıyla COS orjinde yani 0 derece /brad'dda 127, 45 derece (32brad) 90,90 derece (64 brad)0, 180 derce (128 brad)_!'/ ;'/= DERECE (12 brad)0 sonucunu verecektir.
B1= COS B0
DCD:
DCD, 0...15 arası değeri alır ve yalnız o biti ‘1' diğerleri ‘0' olan 8 veya 16 bitlik (kullanılan değişken için seçilen boyuta bağlıdır)bir sonuç verir.
Sayi  var byte
Sayi =DCD  5              Â‘sayi = %00100000 olmuştur.
DIG:                     
                                    
DIG, 0..4 arası işlem değerini alır ve 8 veya 16 bitlik  bir değerin onlu karşılığının  işlem değeriyle belirtilen  hanesindeki  rakamı  verir.0. hane en sağdaki hanedir.
B0=187
B1=B0 DIG 1           ‘işlem sonucu B1 = 8 olacaktır.
DIV 32:
Pbp2de çarpma işlemi 16x 16 bit olarak yapılır.ve sonuç 32 bittir.Ama PBP'de  en büyük 16 bit boyutunda değişkenleri desteklediğinden  ,çarpma işemi iki adımda sonuçlanır.Örneğin a ve b gibi   iki 16 bitlik değişkeni c=b*a çarpma sonucunun  alt 16 bitini verirken d=b*a sonucunun üst 16 bitini vermektedir.Tek hamlede 32 bit sonuca ulaşmanın olanağı yoktur.bazen 32 bit çarpımsonucunun ortalama almak veya ölçeklendirmek amacıyla 16 bitlik bir sayıya bölünmesi gerekmektedir.İşte bu amaçla DIV 32 fonksiyonu kullanılmaktadır.DıV32 31 bit işaretsiz tam sayının (en büyük214748 3647) 15 bit işaretsiz tam sayıya (32767)bölünmesi ile sınırlıdır.
PBP  derleyicisi en fazla 16 bit büyüklüğünde değişkene izin verdiğinden DIV 32 kullanılan tümceden hemen önce  çarpım işleminin kendisinin yapılması gerekmektedir. Çünkü tam bu anda derleyicini kullandığı içsel değikenler henüz 32 bitdeğer saklamaktadır.dolayısıyla çarpma işleminin yer aldığı tümce ileDIV 32 içerentümce arasında  başka hiçbir işlemyapılmamaktadır.arada yapılacak başka bir işlem  32 bit çarpma sonucunun saklandığı  içsel deişkenlerin içerini  değiştirebileceğinden elde edilecek sonuçda haliyle yanlış olacaktır.
Bunun yanı sıra PBP kesmesi kullanılıyorsa ON İNTERRUPT  tümcesi DISABLE komutu ile devre dışı bırakılalı ve Dıv32 içeren tümceden sonra ENAble komutu ile yeniden devreye alınmalıdır.ASSEmBLER'la yazılmış kesmelerin içsel değişkenler üzerinde bir etkisi olmadığından devre dışı bırakılmaları gerekmez.
A  VAR word
B var word
C Var word
Dummy VAR word
B=500
C=1000
disable                              Â‘ON  INTERRUPT kullanılıyorsa
Dummy=b*c                     ‘** veya */ işlemide olabilir.    
A=Dıv 32  100
Enable                           ON İNTERRUPT kullanılıyorsa

Yukarıdaki program parçası ‘b2 değişkenine 500 ‘c değişkenine  ise 1000 değerini atamaktadır. Sonucun 100'e bölünmesini ve bununda ‘a' değişkeninde saklanmasını istiyoruz.b ve c'nin çarpımı sonucunda elde edilecek değer  yani 500.000 word boyutunda bir değikene sığmayacaktır.Dolayısıyla Dummy isimli değişkende 500.000 ‘ karşılık  gelen ikili değerin alt 16 biti yer alacaktır.
500.000=%1111010000100100000
dmmy=%1010000100100000=41248'dir.
Dummy değişkenini kullanımı ile DIV 32 fonksiyonunun kullanımı ile hiçbir ilgisi yoktur.DIV 32 derleyicisinin içsel işlemlerde kullanıcının kullanımına kapalı olan yazmaçları kulanmaktadır.Önemli olan  başka bir işlemin araya girip  derleyicinin  bu içsel işlem yazmaçlarında değişiklere neden olmasının önüne geçer.
Eğer iki 16 bitlik çarpım sonucunu  daha sonra yine 16 bitlik bir sayıya çevirmemiz gerekiyorsa  ve çarpım sonucunun 16 bite sığmasını  garanti edemiyorsak   bölme işleminde Dıv yerine Dıv 32 kullanmak doğru olacaktır.Verdiğimiz örnekte bölme işleminin sonucu olan 5000 değeri ‘a' değikeninde saklanmaktadır.
MAX VE MİN:
MAX VE MIN fonsiyonları iki sayıya iki sayıyı karşılaştırır ve büyük (MAX için )yada küçük (MIN için ) olnı değşikende saklar.
B1= B0 MAX  100                    Â‘B0 deişkeni ile 100 değerinden
                                                ‘hangisi büyükse B1 ‘de o değer saklanır.
B1= B0  MIN 100                     ‘B0 değişkeni  ile 100 değerinden
‘hangisi küçükse B1'de o değer saklanır.  
NCD:
Ncd 8  16 veya  bitlik değişken /sabitte lojik değeri 1 olan en üst  bitin numarasına bir ekler ve sonucu bir değişkende saklar.Eğer hiçbir bit ‘1' değilse NCD fonksiyonunun  sonucu ‘0' olacaktır.
B0= %01001000             Â‘B0'da saklanan sayının 6. biti ‘1''dir.
B1=%NCD B0                 Â‘B1=7 olacaktır.(7=6+1)
REV:
REV işlem yaptığı 8 veya 16 bitlik değişken /sabit üzerinde belirtilen sayıda bitin (en sağdan başlamak üzere)sırasını tersine çevrir.Sırası tersine çevrilecek bit sayısı 1...16 arasıdır.
B0= %01000101                     ‘B0'da saklanan sayının yalnız  4
              Â‘bitinin sırası değiştirelecektir.
B1=% B0 REV  4        Â‘B1=% 00001010 olacaktır.
SIN:
Sın operatörü üzerinde işlemyaptığı değişkenin /sabitin sinüsünü sonuç olarak verir.Sin operatörü 0...359  derece arası değerler yerine –0...2555 arası ikili  radyan (brad=binary radian)değerlerinin sinüsünü sonuç olarak vermektedir.Örneğin 90derce = 64 brad'a karşılıkgelmektedir.bunu basit bir orantı kurarak hesaplıyoruz.
Brad=(derece/360)x 256



SIN operatörünün gösterdiği sonuç negatif değeride gösterbilmek için ikinin tamlayanı biçiminde düzenlenmüştir.Yani-127...127 aralığındadır.dolayısıyla sinorjinde  yani 0 derece/brad'de 0,45 derece (32brad)90 90 derece (64 brad)127180derece(128  brad) 0, 270 derece   (192brad) –127 sonucunu verecektir.
B1= SIN  B0

SQR:
SQR  fonksiyonu üzerinde işlemyaptığı değişkenin/ sabitin kare kçkünü 8 bit büyüklüğünde bir tamsayı olarak verir.
B0=SQR   W1            Â‘b0'da  W1'in   karekökünü saklqamaktadır.
BİT OPERATÖRLERİ:
Bit düzeyindekiş operatörler  bir değerin her bitinde  diğer bitlerden  bağımsız olarak işlem yapar.BOOL cebirine ait doğruluk tabloları bire bir geçerlidir. Bir değerdeki bazı bitleri  yalıtmak veya bitler eklemek için kullanılır.
B0=%00001111
B1=%10101001
B2=B0&B1            Â‘AND işlemi  b2=%00001001
B2=B0   I   B1            Â‘OR işlemi   B2=%10101111
B2=B0 ^ B1            Â‘XOR işlemi B2=%10100110   
B2=   B1            Â‘Not işlemi  B2=% 01010110
KARŞILAŞTIRMA OPERATÖRLERİ:
Karşılaştırma operatörleri İF ..THEN   tümcelerinde bir ifadeyi  başkabir ifadeyle karşılaştırmada kulanılır.Karşılaştırma operatörleri işlemleri işaretsiz olarak yaparlar.Dolatısıyla bir sayının 02dan küçük olup olmadığını  bu operatörleri  kullanarak saptayamazsınız.    
      

                                                                                                                                                                                                                                                                                                   İf sayac  >10 then   ledyak               Â‘sayac değeri 10'dan büyükse
                                                            Â‘program akışı ledyak  Â‘tan devam
                        Â‘eder               led yak:                  
MANTIK OPERATÖRLERİ:
Mantık işlemlerinde kullanılan operatörler bit operatörlerinden farklıdır.Kullandıkları işlemde doğru yada yanlış sonuç üretirler.Sonuç değeri ‘0'' sa yanlış'1' ise doğru olarak değerlendirilir.Çoğunlukla karşılaştırma operatörleriyle birlikte İF...THEN tümcelerinde kullanılırlar.                                                                                                                                                                                                                     
İf      ( sayac   >  =  10 )  (buton  = 0 ) then  LedYak
.
LedYak
.
‘sayac değeri 10'dan büyükse ve  aynı   zamanda buton değeri ‘" 0" a eşitse program akışı LedYak'dan devam eder.
PBP'nin işlemleri doğru sırada yapması içinmutlaka parantez kullanmak gerekmektedir.

Notlar:


























PBP ile Programlama:
Buraya kadar anlatılan bölümlerde PBP derleme seçenekleri  kullanılan değişkenler sabitlerin yapısı  matematik işlem operatörleri hakkında bir fikir sahibi  oldunuz.Bu bölümdeyse  programda dallanma ve döngüler gibi alt bileşenler den bahsedilecektir.
Çalışan bir program anlamlı tümceler listesi olarak düşünülebilir.
Tümce-1
Tümce-2
Tümce-3
.
.
End  
 Bu yapı çok basit görünmesine karşın  geçerli bir program yapısıdır.Ama programı oluşturan tümceler genelde  yukarıdaki gibi doğrudan birbirine bağlanmazlar.Program akışı başka tümce bloklarına dallanmalarla  alt rutinlerin çağrılması ile  döngülerin kurulması ile  vb. program  program bloklarının  birbirine bağlanması ile oluşturulur.
DALLANMA- Program akışının yönünde değiştirilmesi:     
                                    Dallanma komutları     doğrusal program akışının patikasını değiştiren komut üretir.Program eğer bir dallanma icra ederse   çok büyük bir olasılıkla bir sonraki yerine dallanma komutunun gösterdiği tümceyi icra edecektir.Program akışı artık bir yerlere "git"miş  ve oradan devam  edecektir.Dallanma komutlarını  koşullu ve koşulsuz  olarak  iki  kategoride değerlendirmek mümkündür.
Koşulsuz dallanmaya bir örnek aşağıdaki gibi olabilir.
.
Tümce –1
Tümce-2
GOTO devamet
Tümce-3
Devam et:
Tümce-4
.
Buna  koşulsuz dallanma denmektedir.Çünkü her zaman gerçekleşmektedir. Dikkat edilirse Tümce –1 ve Tümce –2 icra edildikten sonra program akışı Tümce –3'ü pas geçmekte ve Tümce 4-‘ü icra etmektedir.DevamEt , program belleğinde Tümce –4'ün başladığı adresin etiketidir.
Belli durumlarda gerçekleşmesine göre program akışının dallanmasına  ise  koşullu dallanma diyoruz.Koşulsuz dallanma örneğimizi azıcık değiştirip şöyle bir program oluşturabiliriz.
.
Tümce –1
Tümce-2
IF  koşulu 1-1  THEN  DevamEt
Tümce-3
DevamEt:
Tümce-4
.
Tek değişiklik GOTO  DevamEt  tümcesinin If  koşul –1 then Devam Et tümcesi ile yer değiştirilmesinden ibaretttir.Ama ilkinde program  her hal ve şartta Tümce-3 ü  pas geçip DevamEt etiketinden yani Tümce –4  icra ederek devam ederken     ikinciside  ancak koşu1-1 gerçekleşmesi durumunda Tümce –3'ü pas geçip DevamEt  etiketine sıçramakta ve Tümce -4'ü icra etmektedir.  Eğer koşul-1 gerçekleşmez ise Tümce-3 icra edilecektir.

    Birden fazla koşul program yapısı içinde bulunabilir.                  

.
IF koşul_1  THEN    DevamEt
IF koşul_2 THEN    BuyurBurdanYak
IF koşul_3 THEN   YeterArtık      
.

Yukarıdaki yapı şöyle kurgulanabilir:

.
BRANCH Koşul , [ Devam Et ,BuyurBurdanYak  , YeterArtık]
Koşul değişkeninin aldığı değerlere göre  program akışı köşeli parantez içindeki  etiketlerden birine dallanacaktır.(koşul"0" sa  DevamEt  "1"se Buyurburadanyak"2"ise yeter artık etiketi)
Şöyle bir yapıda geçerli ve işlevseldir.
If koşul_1 THEN
    Tümce_1
ELSE
Tümce_2
ENDIF
Bu yapıda koşul_1 gerçekleşirse Tümce_1, gerçekleşmezse Tümce_2 icra edilmektedir.
Pbp'de bulunan dallanma komutlarını aşağıdaki gibi sınıflandıra biliriz.
Koşulsuz dallanma:
.GOTO
koşullu dallanma:
.IF..THEN..ELSE..ENDIF
.BRANCH ve BRANCHL
.SELECT..CASE
   DÖNGÜ Â– Kodu defalarca icra etme
Program içinde döngü oluşturma, bir grup tümcenin birden fazla tekrarlanmasını sağlar.Döngü senaryoları oluşturulurken hem koşullu hem de koşulsuz dallanma komutlarından yararlanılır.
.
  Başla:
Tümce_1
Tümce_2
IF koşul_1 THEN Başla
          Tümce_3
.
Yukarıdaki döngüde Koşul_1 gerçekleştiği sürece program Başla etiketi ile IF ..THEN ifadesi arasında kalan tümceleri defalarca icra edecektir. Program akışı sırasında koşul_1 hiçbir zaman gerçekleşmese de, Başla etiketi ile IF..THEN ifadesi arasında kalan tümcelerin bir kere icra edileceğine dikkat edin.Bu durumu önlemek için koşulun test edildiği tümceyi döngünün başlangıcında bir yerlere koymalısınız.
.
Başla:
    IF NOT koşul_1 THEN Devam et
   Tümce_1
  Tümce_2
 GOTO başla
 Devam et:
 Tümce_3
Diğer bir döngü senaryosu ise FOR..NEXT komutuyla gerçekleşebilir.
.
FOR  KontrolDeğişkeni =Başlangıcı TO bitiş STEP Adım
  Tümce_1
 Tümce_2   
NEXT Kontroldeğişkeni   
Devamet :
Tümce_3
.
Yukarıdaki döngükugusunda Tümce_1 ve Tümce_2 kontroldeğişkeni tarafından tarif edilen sayı kadar icra edilir.Bu sayı Başlangıç, Bitiş  ve adım değerlerinin arasındaki matematiksel bağıntıdır.Örneğin döngünün çift sayılarda gerçekleşmesini istiyorsak şöyle bir kurgu yapmalıyız.
.
FOR KontrolDeğişkeni  = 2 TO 30 STEP 2
  Tümce_1
  Tümce_2
NEXT KontrolDeğişkeni
Devam et:
Tümce_3
.
PBP'de bulunan döngü komutları aşağıdaki gibi sınıflandırılabiliriz.
. FOR..NEXT  
.WHILE..WEND
Altrutinler
Son olarak tartışacağımız bileşen altrutinler. Altrutini program akışının her hangi bir yerinden çağrılan program parçaları olarak düşenebiliriz.Program içinde sıklıkla tekrarlanan bazı işlemleri birden fazla kere icra etmek için bu işlemleri program içinde defalarca tekrarlanmaya gerek yoktur.Bunun yerine kodu bir defa yazdıktan sonra GOSUB komutuyla program akışına lüzum gördüğümüz yerlerde altrutine dallandırılarak tekrar tekrar icra edebiliriz. Altrutinler genelde programın sonuna yazılır  ve RETURN komutuyla biterler.RETURN komutu, program akışının altrutine dallandığı yere geri dönmesini ve GOSUB içeren tümceden bir sonraki tümceyi icra etmesini sağlar.
.
Başlangıç:
 Tümce_1
 GOSUB AltRutin_1
 Tümce_2
 GOSUB Altrutin_1
 GOTO Başlangıç
AltRutin_1:
Tümce_3
RETURN
.
Yukarıdaki  kod örneğinde bir flaş ör tasarlanmıştır. Tümce_1 aracılığıyla LED yakılmakta ve bir saniye gecikme sağlayan AltRutin_1 çağrılmaktadır.Bir saniye geçtikten sonra RETURN komutuyla program akışı bir sonraki tümce olan Tümce_2'yi icra etmekte yani LED'i söndürmektedir. Akabinde program akışı yine GOSUB komutuyla bir saniyelik gecikmeyi sağlamakta ve bir 1 saniyeyi doldurduktan sonra RETURN komutuyla bir sonraki tümce olan GOTO Başlangıç tümcesi icra edilmektedir.Döngü bu şekilde süre gitmektedir.
Bu örnekte altrutin kullanarak bir saniyelik gecikmeyi sadece bir defa yazdık.Böylece hem bellek alanından tasarruf sağladık hem de takibi daha kolay bir program yazmış olduk.
PBP' de bulunan  altrutin çağırma komutlarını aşağıdaki gibi sınıflandırabilirz.
.GOSUB
.RETURN
.CALL(assembly altrutinler için)

 PROGRAM SİTİLİ
PBP ile program yazmak çok kolay olmasına rağmen yine de takip edilebilir ve anlaşılabilir program yazmak için aşagıdaki gibi bir şablon kullanmanızı öneririz.

Başlık bölümü:Burada PBP dosyasının ismi, hangi PIC' in kullanıldığı, varsa ek donanım özellikleri, program yazarının ismi, tarih , revizyon numarası vb. belirtilebilir.
DEFINE bölümü:Saat osilatör frekansı ve PIC' in LCD' ye  LCD' ye bağlanan bacakları gibi bazı unsurlar PBP' de önden belirlenmiş. Bu öndeğerleri değiştirmek için DEFİNE kullanılır. DEBUG bacakları, baud hızı ve başka büyükle de bu yöntemle değiştirilebilir.(8ek b2 ye bakınız.)Kulanıldığı programın hemen başında yer almalıdır.
Deklarasyon bölümü:Programda kullanacağınız değişkenlerin ve sabitlerin deklare edildiği bölüm.
Başlangıç disketi:programda kullanılan değişkenlere başlangıç değerlerinin atandığı, port yapılandırılmaların yapıldığı bölüm.
Kod:Ana programın yer aldığı bölüm.
Altrutinler:Programda kullanılan altrutinlerin yer aldığı bölüm.
‘=======================================================
‘Başlık bölümü
‘Dosya adı: SABLON.BAS
‘Revisyon:v 1.1
‘PIC:16F877
‘=======================================================
‘DEFINE tanımları
‘=======================================================
‘Değişken ve sabit deklarasyonu
‘=======================================================
‘Başlangıç işlemleri
‘=======================================================
‘Kod
AnaProgram:
.
.
.
GOTO AnaProgram
End
‘=======================================================
‘AltRutinler
‘=======================================================

UYGULAMALR
Uygulamalarda deney platformu olarak PICLab ya da PICBoard Pro uygulama geliştirme ve proje kartları kullanılmıştır.Bu kartları INFOGATE' den temin edebilirsiniz.Ya da "Başlangıç"bölümündeki temel Pıc devrelerinde uygun olanı  kurup burada anlatılan programları deneyebilirsinz.
Devre şemalarında PIC ve güç kaynağına ait devreler  gösterilmemiştir.Devrelerin PIC kısımı, aksi belitilmedikçe kitabın "Başlangıç"bölümdeki temel PIC devreleriyle aynıdırş.Uygulama devrelerinde, devre elemanlarının  pıc' in hangi portunun hangi bitlerine bağlanacağı gösterilmiştir.
Led'li flaşör- 1.  seçenek:
Bu örnekle kitap boyunca o kadar çok karşılaştınız ki şüphesiz canınız sıkılmıştır.Ama yinede PBP'nin birçok komutunu ve fonksiyonunu tanıtmak açısından ideal bir uygulama örneğidir.
Kullanılan PBP komutları ve ifadeleri
.VAR
.CON
.HIGH
.LOW
.PAUSE
.GOTO
devre: PIC16f877 kullanılmıştır.D portunun 0. bitine direnç üzerinden bir led bağlanmıştır.
  Şeması uyg- 1 ‘deki gibidir.




                                                                                                                                                                                                                                                                                                                                                                                                       Â‘dosya adı:FLAŞÖR1. BAS
   Â‘EVİZYON:1. SEÇENEK
‘PIC:16F877
‘deney kartı :PIClab veya PICboardPRO
led var portD.0            Â‘D portunun 0. biti  için led değişkeni
                  Â‘kullanılııyor.
                  Â‘yanma /sönme süresi 500 msn.
sure con  500
ana progrram:
HIGHled
pause   sure
low led

pause sure
GOTO anaprogram
end                                                                                                                     
Led ‘iyani PORTD.0'2ı çıkış ve
‘lojik seviyesini "1"yap yani YAK!
‘sure kadar yani 500 msn bekle
‘ledi yani PORTD.0'ı çıkış ve
‘lojik seviyesini "0" yap yani SÖNDÜR!
‘sure kadar 500 msn bekle
‘başa dön ve tekrar et.
LED'Lİ FLAŞÖR- 2. SEÇENEK
Şimdi programımızı biraz değiştirelim.fonksiyon olarak yapılacak iş aynııdır.PORTD.0'abağlı led saniyedde bir kez yanıp sönecektir.yanık ve sönük kalma süresi birbirinden farklıdır.
‘Dosya adı:FLASOR2.BAS
‘Revizyon:2. SEÇENEK
‘PIC:16F877
‘deney kartı:PIClab veya  PICboardPRO
Led var  PORTD.0                           ‘D  portunun 0. biti  için led değişkeni
                                                        ‘ kullanılıyor.
Yanik  CON  250                               ‘yanma süresi  250 msn.
Saonuk CON  750                             ‘yanma süresi 750 msn.
2başlangıç işlemleri
TRISD.0=0                                    Â‘TRISD,D portunun yön yazmacıdır.
                                                      ‘0. bitini  "0" yaptığımızda  bu bit
                                                      ‘ÇIKIŞ olacaktır.
LED=0                                            Â‘PORTD.02ın lojik durumu programın
‘başında "0" olarak tanımlanıyor.
                                                                                                                                                                                   
=====================================================
ana progrram:
led=1                                                           ‘Led'in yani PORTD.0'ın lojik
                                                                   Â‘seviyesini "1"  yap yani YAK!
PAUSE  YANİK                                         ‘yanik kadar 250  msn bekle
Led=0                                                        Â‘Led'in portd.0'ın lojik
                                                                  ‘seviyesini "0" yap yani söndür!
PAUSE  sonuuk                                          Â‘sonok kadar yani 500 msn bekle
GOTO  anaprogrram                                  Â‘başa ön tekrar et.
End
İki programı karşılaştırdığımızda2.'de PORTD'nin 0. biti  TRISD.0  = 0 ifadesiyle çıkış olarak atanırken birincisinde böyle bir atama yapmamasıdır.Çünkü portd.2nin  0. bitinin  lojik durumunu değiştiren HIGH veLOW  komutları üzerinde işlem yaptığı port bitlerini  önce çıkış yapar (yani o portun TRIS yazmacının ilgilii  bitini "0" yapar)lojik durumunu değiştirir.PORT bitlerinin lojik   durumunu değiştirirken  hangi yöntemi kullanmanın daha iyi olduğu konusunda  bir şey söylemek zordur.  Hangisi kolayınıza geliyorssa onu kullanın. Ama sistematik biryaklaşımı  tüm programlarda kullanmak istiyorsanız  2. seçeneği kullanmanızı  öneririz.
LED'li SAYICI:
Şimdi de PIC16F877'nin D portunun  büyün  kanallarına/ bitlerine   330 ohm direnç  üzerinden birer led bağlayalım Uygulamada sayaç adını verdiğimiz   bir değişkenin değerini  0'dan başlayarak 255'e kadar artırııp  sayaç değerini D7..D0  bitlerinde bağlı ledlerle görüntüleyeceğiz.Devre  uyg-2'deki gibidir.
KullanılanPBP  komutları ve ifadeleri
.for..next
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ==================================================
‘Dosya adı:SAYICI.BAS
‘Reviizyon:
‘PIC:16F877
‘Deney kartı:PIClab  veya  PICboardPro
sayac  VAR  BYTE                          Â‘SAYICI DEĞİŞKENİ
‘Başlangıç işlemleri
TRISD=% 00000000                      Â‘TRISD, D portunun yön yazmacıdır.
                                                        ‘tüm kanalları /bitleri  ÇIKIŞ'   tır.
PORTD=%00000000                       ‘PORTD'nin tüm bitlerine  programın
‘başınalojik"0" atanıyor.
                                                                                                                                                                                                                             



sayac=0                                  Â‘Sayıcının başlangıç değeri  "0"'dır.
Ana  program :
FORsayac=0  0  TO  255
PORTD=SAYAC                             ‘Sayıcının değerini PORTD'ye  ata.
                                                        ‘500 msn  bekle ve sayıcıyı bir arttır.
Pause  500
NEXT  sayac


GOTO  Ana program                         ‘Sayıcının değeri  255 olduktan sonra
                                                            ‘başa dön ve yeniden saymaya başla .
End
1)@
Sözdizimi:
@  tümce
Açıklama:
PBP  programında satırın başında kullanılan @ karakteri o satırdaki lodun  assembly dilinde yazılmış bir tümce  (statement)  olduğunu anlatan bir kısayol gibi   çalışır. Bununla PBP programının içine assembly satırları eklemek mümkündür.
...
i var  byte
for  i =1 to4
@ rlf_ rollme,  F ; Baytı bir kez sola döndür.
Next  i
...
@ kısayolu dosyaya bir başka dosyadan (örneğin fp. Asm adlı dosyadan ) assembly rutinler  almak amacı ilede kullanabilir:
...
@include"fp.asm"


@, assembly komutlarını yürütmeye  başlamadan önce yazmaç sayfasını 0 olarak belirler.dolayısı ile bu sayfada @ kullanarak değişiklik yapmamak gerekir.
2)ADCIN:
SÖZDİZİMİ:
ADCIN CHANNEL  VAR
AÇIKLAMA:
Yongadaki ADC'inchannel kanalından okuma yapar ve sonucu Var adlı bir değişkene aktarır.ADC yazmaçlarına erişimin doğrudan olması ,ADCIN'nın süreci basitleştirmesini sağlar.
ADCIN'in kullanılabilmesi için,istenilen bacakları giriş yapmak üzere TRIS yazmacının set edilmesi gerekir.Aynı şekilde,istenilen bacakları analog girişlere tahsis etmek bazen de sonucun formatını ve saat kaynağını belirlemek için ADCON1'inde set edilmesi gerekir.
Yazmalarla ilgili ek bilgiler ve bunların belli bir cihaza yönelik set edilişleri için Microchip'in data sheet'lerine başvurulmalıdır.
Bir cihazın ADC'si,tipine göre8-,,10-ya da 12  bitlik çözünürlükte  olabilir.sonucun sola/sağa hizalı olması ADCON1'in  en üst biti ile (7.bit)kontrol edilir.
8 bit çözünürlükte A/D  çevrimsonucu elde etmekiçin  sonuç  olarak (ADCON1.7=1  ) ayarlanmalıdır.

ADCIN  komutuyla   analog  kanalardan yapılan okumanın  sayısal  veriye  dönüştürülmesi  aşamasında   yonga  üzeri  A/D   çeviricide  kullanılan  parametreler   DEFİNE   direktifi   kullanılarak    ayarlanmaktadır.  Eğer  define kullanarak  paremetre değişikliği  yapmazsanız   ADCIN komutu   ön değerleri  varsayarak   işlevini  yerini getirecektir.ADCİN   paremetreleri  ön  değerleri  aşağıdaki gibidir.
DEFİNE  ADC_  BİTS  8                  Â‘A/D çevrim sonucundaki   bit sayısını  ayarlar.
                                                        ‘(8,10 veya 12 bit çözünürlük)
DEFİNE  ADC_CLOCK  3                Â‘Saat  kaynağını  ayarlar  (rc=3)
DEFİNE  ADC  _SAMPLEUS  50      Â‘Mikro saniye cinsinden örnekleme süresi
ADC SAMPLEUS,  kanalın ayarlanması ile      A/D dönüşümün başlaması  arasındaprogramın  beklemede kaldığı  zamanı mikrosaniye  cinsinden gösterir.    
...
TRISA=%11111111                 ‘  PORTA'nın  tüm bitleri giriş  yapıldı.
ADCON  0,    B0                     ‘PORTA'nın  girişolarak  atanan bitleri  analog,
                                              ‘ve  çevrim  sonucu  sola  yaslamalıdır.
                                                ‘0. kanaldan okunan  değer  B0 değişkenine  
                                                   Â‘aktarılır.
3)ASM....ENDAMS:
sözdizimi
ASM
...
tümceler
...
ENDAMS
Açıklama
ASM  ve  ENDAMS  arasında  yazılan ifadeleri  assembly  dilinde olması  gerekir.
Programdaki  bir assembly  metni maksimum 8k  olabilir.Bu büyüklük  sadece  o anda  yazılmakda  olan assembly  kod  bloğu  için  geçerlidir. Derleme  sonucunda  üretilecek kodun boyutuna ilişkin bir sınır değildir.Dolayısı ile  assembly  metin  bloğunun  8k'dan  büyük olması  halinde   bir  kaç  ASM...ENDAMS   şeklinde    düzenlenmesi  veya  başka bir  dosyada  tutulması  gerekmektedir.

ASM...ENDAMS    arasındaki  assembly  kod  yazmaç sayfasını  değiştirmiş  olabilir.  Dolayısıyla   ENDAMS'dan  önce yazmaç sayfasının   yeniden  sıfırlanması  (0.bank) şarttır.
ASM
...
...
...
bsf   PORTA,0       ; PORTA'da  bit  0 set ediliyor.
Bcf  PORTB, 0      ;PORTB'debit0set  ediliyor
...
...
...
bck  STATÜS   RP1  : 0. yazmaç  bankına  geri
bck  STATÜS   RP0:dönülüyor.
ENDAMS
4) BRANCH
SÖZDİZİMİ
BRANCH İndeks,(label) {label...}]
Açıklama:  
Bu tümce  program  akışının bir indeks  değişkeninin  0....255    arasındaki değere  bağlı  olarak   label adı  ile  tanıtılan  etiket satırından  devam  etmesini  sağlar. Program  akışı  indeksin  aldığı  değere  göre  dallanır.program akışı  indeks  Â‘0'sa   listede  gösterilen birinci  tikete  "1"se  ikinci  etrikete  dallanacaktır.yani  indeks değeri   listede belirtilen  etiketlerin sayısından  büyük veya  bu sayıya eşitse  BRANCH'dan  sonra   satıra geçilir ancak bu sayıdan  küçükse  karşılık gelen etişkete  gidilir. Bu tümcede  255  adet  etiket kullanılabilir.(18Cxxx'de 256)12 ve 14 bitlik entegrelerle 17Cxxx  grubu  için  etiketile  BRANCHtalimatının  bulunduğu kod  sayfası  aynı  olmalıdır.Bunların aynı  kod sayfasında olduklarından  emin olunamıyorsa BRANCHL  kullanılmalıdır.
18Cxxx  grubunda  BRANCH'da  göreli dallanıyorsa  etiket  bu talimatın1K'sı içinde olmak  zorundadır.Eğerbu  1K  içinde değilse  yinB RANCHL   kullanmak  gerekir.
...
BRANCH B4,    [dog cat  fish]
...
tümcesi  aşağıdaki yapı ile  aynıdır.:
...                              
if B4=0 Then dog
if B4= 1 Then cat
if B4=   Then   fish
...
Tümcedeki"dog","cat","fish" etiket isimleridir.
5)BRANCHL
SÖZDİZİMİBRACHL   İNDEKS,8LABEL{,LABEL....}]
AÇIKLAMA
Kullanımı  BRANCH  talimatı ile  aynıdır. BRANCH  talimatının  bulunduğu  kod  sayfası   ile etiketler aynıkod sayfasında değillerse mutlaka   BRANCHL kullanılır.Kullanılan PIC'DE birden fazla  kod sayfası  varsa ve BRANCH talimatı ile  etiketin aynı kod  sayfasında olduğundan   emin olunamıuorsa BRANCHL kullanmakta  yarar   vardır.Üretilen kod BRANCHiile üretilecek lankodun iki katı  büyüklüktedir.Etiketlerin  talimatla aynı kod sayfasında  olduğundan  emin olunması  veya entegrede  sadece bir kod  sayfası  bulunması  durumunda ise BRANCH  kullanılır. BRANCHL  ile  en fazla  127  adet   etiket kullanılabilir.(18Cxxx'de  256).
...
BRANCHL  B4[dog,cat ,fish]
...
tümcesi  aşağıdaki yapı ile  aynıdır.ama BRANCH için verilen örnektekinin iki katı  kod üretilmektedir.
...
if  B4=0  then dog
if  B4 =1 then cat
if B4=2   then fish
...

Tümcedeki"dog","cat","fish" etiket isimleridir
6) BUTTON
SÖZDİZİMİ
BUTTONPin,down,delay,,rate,bvar,action,label
Açıklama
Bu tümce ile PIN  adlı bacak okunur.kontak sürtünmesinden  kaynaklanan  bıton okuma  hatalarını  gidermek içingecikme(opsiyonel)  ve otomatik tekrar (auto  repeat)(opsiyonel) işleme konulr.Bacak otomatik olarak    giriş yapılır.Pın  0....15  arası  bir  sayı 0...15 arası bir  sayı içeren  bir değişken  (örneğin B0,B3  gibi)  veya bir  bacağın  adı olabilir.(örneğin  PORTB.0)
Down:Butona basılma eylemi sonucunda  PIN  bacağındaki lojik  durumdur.(0...1)
Delay:otomatik tekrar  başlamadan  önce butonun ne kadar basılı kalması gerektiğini çevrim adedi (0...255)  cinsinden  veren değişken .Eğer"0" ise ne  kontak gecikmesi  ne de tekrar işleme sokulur.Eğer255  ise kontak gecikmesi  icra edilir,fakat  otomatik tekrar  icra edilmez.
Rate :
Otomatik tekrar haddi(0...255).
BVar:
Gecikme /tekrar sayımda  içsel  olarak kullanılan  byte büyüklüklü değişken.İlk  değerinin 0 olmasıve  başka yerde   kullanılmaması gerekir.
ACTİON:
Program akışının  label etiketine yönlenmesi için  butonun alması gereken lojik değer (basılmış ise1  basılmamış ise0)
LABEL:
Butonun ACTION'da belirtilen değeri almaması  halinde program akışının yönleneceği etiket.                                                                                                                                                                                                                  Butona bastığınızda ya kontaklar birbirine değer yada  değen kontaklar bırakır.Butona basma anında  kontakların birbirni sürtmesinden kaynaklı 1...20 msn arasında  elektriksel  bir gürültü sinyali oluşur. Mikrokontrolörün bu gürültü  sinyalini  butona birkaçkez  peşi  sıra  basılmışgibi  algılaması  tehlikesine karşı    butonun  lojik durumunu kontrol ederken iki kontrol işlemi arasında  gürültü  sinyalinin kendi  kendine sönmesini garanti   edecek kadar bir gecikme uygulamagerekmektedir.BUTTON komutu DELAY  parametresi "0" olmamak kaydıyla bu gecikmeyi garanti etmektedir.Bu gecikmenin  ön ayar değeri  10 msn ‘dir.    Bu değeri aşağıdaki tanım ifadesini kullanarak değiştirmek  olanaklıdır.Parametre milisaniye cinsindendir.
DEFİNE BUTTON_PAUSE  50  Â‘Kontak gecimesi 500  msn ye  ayarlandı.
                                    DEFİNE BUTTON_PAUSE  ifadesi  mutlaka  büyük harfle yazılmalıdır.12 bit entegreler  için maksimum  gecikme 65msn  dir.BUTTON komutu bir  PC klavyede bir tuşa basıldığında   ekranda  o karakterleri  görürsünüz. Eğer  tuşu basılı tutarsanız  kısa birgecikmeden sonra  aynı karakterlerin ekranda  sel  gibi  aktığını görürsünüz. Bu durum tuşu bırakana  kadar  sürer.BUTTON  komutunun otomatik tekrar   bu durumu gerçekleştirebilmemizi  olanaklı kılmaktadır. BUTTON komutu  bir döngü  içinde   kullanılacak şekilde  tasarlanmıştır.Her döngüye girişte PİN'in lojik durumu  kontrol  edilmektedir.Down parametresinde belirtilen  ilk kez   oluştuğunda BUTTON komutu  kontak sürene kadar  gecikme uygular.ve ACTION'DA  belirtilen değere göre program akışını LABEL adresine yönlendirir.(veya yönlendirmez.)
Eğer buton hala DOWN'da belirtilen lojik  durumdaysa BUTTON  bu sefer DELAY  paremetresi ile  belirtilen sayıda döngü  yapar.ve ACTİON ile LABEL'DE  gösterilen işi  bir daha tetikler.  Bu andan sonra  buton hala DOWN'da belirtilen lojik durumu koruyorsa BUTTON  bu sefer  RATE ile  belirtilen sayıda  döngü  yaparak ACTION ile LABEL ‘de gösterilen işi peşi sıra tetikler.
‘bu tümcede PORTB.2 deki butona basılmazsa program akışı
‘devamet etiketinden devam edecektir.
.
B2=0
Butonkontrol:
BUTTON PORTB.2,0,200,100,B2,0,Devamet
‘..butona basıldığında icraedilecekkomular.
Got butonkontrol
Devamet:
.
end
genelde birbacağındeğeri okunurken BUTTON yerine İF..THEN  koşul cümlesini kullanmak daha kolaydır.Örneğin:
IF PORTB.2=1 THEN DEVAMeT    Â‘Bacak değeri "1" ise devam et'e git
7)CALL
SÖZDİZİMİ
CALL Label
Açıklama
Label etiketi ile belirtilen  assembly  kod rutinini  ortaya  koyar.
PBP  program akışında   bizzat PBP  ile hazırlanmış  alt rutinler  çağırılarak icra ederkenGOSUB tümcesi  kulanılır.Halbuki kimi    uygulamalarda assembly diliyleyazılmışalt rutinlerde PBP program akışında  kulanmak gerekebilir.Assembly ile hazırlanmış bir rutine  ise ancak CALL  kommutu erişebilir.
...
CALL  pass   ‘-pass isimli bir assembly rutini  icra edilecektir.
...
8)CLEAR
sözdizimi
AÇIKLAMA
 
HER banktaki bütün ram yazmaçlarını 0 yapar.Bu komut yürütüldükten sonra    içsel sistem değişkenleride dahil bütün değişkenler sıfırlanmış  olur.Bu işlem programın çalışması ile  otomatik olarak gerçekleşmez.Yani progra   başladığında değişkenler otomatik olarak o değerli değildir.
CLEAR  komutunu icra ederek  kullanılan kullanılmayan bütün yazmaçları sıfırlayarak bunların lojik durumunu  belirli bir seviyeye getirmektense  kullanılan değişkenlere ön  değerler atanması  tercih edilmektedir.
9)CLEARWDT
sözdizimi
clearwdt
açıklama:
watchdog zaman sayarı PIC'in belli bir sürenin ardından uyandırılmasında SLEEP veNAP tümceleriyle birlikte kullanılabildiği gibi  program akışının olağan dışı birseyir izlemesi (özetle pıcın  sapıtması) durumunda PIC'ı resetetmekte kullanılır.normal şartlar altıyken  bu zaman sayarın zaman aşımına uğrayarakPIC'i reset etmemesi içinPBP derleyicisi tarafından  programın uygun  yerlerine  watchdog  zaman sayarını otomatik olarak  sıfırlayan assembly talimatlar(clrwdt) yerleştirilir.
Kimi uygulamalar da PBP program akışında watchdog  zaman sayarını  derleyicinin  otomatik olarak sıfırlanmasının dışında da  sıfırlamak gerekebilir. İşte CLEARWDT  watchdog zaman sayarını  sıfırlayan assembly talimatının (clrwdt9 ilave olarak ekendi denetimimizde yerleştirilmesine olanak tanır.  
...
CLEARWDT                                Â‘Watchdog zaman sayarını temizler
...
watchdog zamansayarının sıfırlanmasıı tümüyle kendi denetiminiz altında tutmakistediğinizde  programa otomatik olarak yerleştirilen  "clrwdt" assembly talimatlarını  temizlemek için aşağıdaki talimatı kullanınız.
...
DEFİNE  NO_  CLRWDT    1           ‘assembly  CLRWDT'ler programdan temizlenir.
...
amabu durumda program akışı içinde  gerekli yerlere  CLRWDT komutunu yerleştirmek tamamen sizin sorumluğunuzdadır.Eğer CLRWDT komutu program akışı içinde  uygunyere konulmazsa PIC düzenli olarak reset olacaktır.
10)COUNT
sözdizimi
COUNT pin,period ,var
Açılama
Period adlı değişkenin değeriyle belirlenen  sürede PIN  bacağındaki darbelerin sayısını VAR değişkeninde tutar.PIN otomatik olarak giriş yapılır.PIN 0..15 arası bir sayı 0..15 arasıı bir sayı içeren bir değişken (B0, B3 vb.)  veya bir bacağın adı olabilir.(örneğinPORTA.0)
Periodun çözünürlğü milisaniye  cinsindendir ve
DEFİNE OSC 4   ;  MHZ  cinsinden osilatör frekansı
Tanımıyla verilen osilatör frekansını takipeder.
Bu tümce, dar bir döngüde Pin'in değerine 20microsaniye bir kontrol eder. Osilatör 20MHZ ise bu aralık 4 microsaniye olur. Buradan hareketle, hesaplanabilecek en yüksek darbe frekansı- frekansın iş çevrimi %50 iken- 4MHz osilatörle 25MHz ve 20MHz osilatörle 125MHz olur.


...
COUNT PortB.1,100,w1         "PORTB1'de 100ms içinde gerçekleşen
                                                                     "darbelerin(düşükten yükseğe geçiş)
                                                                     "sayısını w1 değişkeninden tutar.
...
COUNT PORTA.2,1000,w1          "PORTA2'de 100 msn.de yani 1sn içinde
                                                                       "gerçekleşen darbelerin sayısını w1
                                                                       "değişkeninde tutar.Bu da dikkat edilir                               "PORTA2'ye uygulanan sinyalin
                     "frekansıdır.
Serout PORTB.0,n2400,[w1]      "Frekans değerini 2400bps'te        PORTB.0'dan gönder.

...


  11)DATA
Söz dizimi
{labe1} DATA{@Location ,}Constant{,Constant....}
Açıklama:
İlk kez programlanması sırasında bir takım sabit değerinde Pıc'in yonga DATA
EEPROM'unda saklar.Location isimli tercihe bağlı adres değişkeni kullanılmazsa,ilk DATA EEPROM başlangıç adresine atfen kullanılmak üzere tümceye bir label vermek üzere tümceye bir label vermek mümkündür. Diğer etiketlerden farklı olarak burada Label'dan sonra":"KULLANILMAZ.
Constant(sabit değer)bir sayı veya karakter dizisi(string)olabilir.Word durum ifadesi (modifier)kullanıldğı sürece, sayısal değerlerin en düşük baytı tutulur.Word durum ifadesi kullanıldığında, önce sayısal değerlerin düşük baytı sonrada yüksek baytı tutulur. Karakter türü  büyüklükler (stringler) ASCIIdeğerli ardışık baytlarolarak saklanır. Ek uzunluk veya otomatik bir sonlandırıcı içermezler.
Data sadece PIC16F84 ,PIC16C84, PIC16F87x serisinden yongada data EEPROM  olan   entegrede iş görür.12CE67x ve 16CE62x gibi  I kare C arabirimli seri EEPROM ‘lu yongalarda çalışmaz.EEPROM değişmez birbellekolduğu (nonvolatile)  için güç kesildiğizamanda  verileri olduğu gibi kalacaktır.
DATA komutu PIOC'in ilk kez programlanması sırasında yonga DATA  EEPROMU'NA veri yazılmak istendiğinde kullanılır. Bu komut PIC'in olaÄ

electrotechnics

bitti zannediyorsanız yanılıyorsunuz.


[code]
17)DTMFOUT
SÖZDİZİMİ
DTMFOUT  Pın {onms,offms,} [tone {,tone...}]
Açıklama:
Pın bacağında DTMF  tuştonlu Tone dizisi  üretilir.pın otomatik olarak çıkış olur.  Pın 0..15 arası bir sayı  ,0...15 arası birsayı  içeren bir değişken (örneğim B0 ,B3 vb. )veya birbacağın adı olabilir. (örneğin PORTA.0)
ONMS her bir ton  için mili saniye cinsindentınlama süresi   offms ise  sessiz kalma süresini verir. Özel olarak belirtilmemeleri halinde   ön ayarları Onms için  200 msn offmsn  için  50ms ‘dir.
Ton değerleri0..15  arası numaralandırılmıştır.0-9  arası değerleri  telefon değerleriyle aynıdır.10 nolu ton *11 nolu ton    # tuşuna  karşlık gelir.12- 15 arası tuşlar iseA-D  tuşlarının karşılığıdır. Dual tonlar için FREQOUT  kullanlır. FREQOUT ile darbe genişlii modülasyonlu tonlar üretilir. Bacaktan gelen ham  veriler  kirlidir. Sinyali bir sinüs dalgasına çevirebilmek için harmoniklerden kurtulmak gerekir.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       DTMFOUT  en iyi 20MHZ  osilatör ile işler. Bununla birlikte 10MHZ  ve hatta 4MHZ  osilatörle çalışması da mümkündür .Ancak bu durumda hem filtrelenmesi zor olur .hemde oldukça üşük genlikli bir sinyal elde edilir.
Başka birosilatör frekansının kullanılması  DTMFOUT ‘unkullanılan osilatörün frekansıyla  belli bir oranda sinyal üretmesine yol açacağından ellde edilecek sinyal DTMFOUT ton olmayacaktır.12- bit grubu PIIC'lerRAM ve istif (stack) sınırlamaları nedeniyle DTMFOUT'u desteklemez.
...
DTMFOUT   PORTB.[2,1,2,]   ‘B portunun 1. bacağına 212 için DTMF  tonları
‘gönderir.
...      
18)EEPROM
SÖZDİZİMİ
Eeprom {locatıon}[constant{constant...]}
Açıklama
  İlk kez programlanması sırasında birtakım sabit değerleri PIC'ın yonga DATA  EEPROM  Â‘unda  saklar.    LOCATIN isimli tercihe bağlı adres değişkeni kullanılmazsa  ilk EEPROM  tümcesi adreslemeye 0'dan başlar, sonrakiler bunu izleyerek adreslenir. Constant  sayısal veya string olabilir.sayısal değerin en düşük baytı saklanır.sonlandırıcı veya uzunluk terimi içermezler. EEPROM  komutu sadece PIC16F84 PIC16C8x serisinden yongada DATA  EEPROM  olan entegrede iş görür.12CE67x ve 16CE62x gibi  I  kare arabirimliseri  EEPROMLU  yongalarda çalışmazlar.  
                EEPROM değişmez  bir bellek olduğu için güç kesildiği zamanda verileri olduğu gibi  kalacaktır.  EEPROM komutu  PIC'in programlanması sırasında yonga DATA    EEPROM'una veri yazılmak istendiğinde kullanılır. Bu komut PIC'in olağan çalışmasında DATA  EEPROM'una veri  yazmakiçin kullanılmaz . olağan çalışma sırasında yonga DATA  EEPROM'undaki değerler WRITE  kulanarak değiştirebilir. Verileri  okumakiçinde READ kullanılır.
...
‘4. adresten başlayarak 10,20,ve30 değerleri saklar.
EEPROM  4,[20,20,30]
...      
19) ENABLE DEBUG
SÖZDİZİMİ
ENABLE
AÇIKALAMA
Daha önce devre dışı bırakılmış  kesme rutini ve debug monitör programının izleyen  program satırlarına yeniden devreye alınmasını sağlar. Yönerge mahiyetindedir..(DISABLE  program örneğine bknz.)
Ayrıntılı bilgi için ON DEBUG ve  ON INTERRUPT'a BKNZ.
             
20 )ENBLE DEBUG
sözdizimi
enable debug
açıklama
daha önce DİSABLE veya DİSABLE DEBUG  ifadesiyle devre dışı bırakılmış debug monitör programının  izleyen program satırlarında  yeniden devreye alınmasını sağlar. Yönerge mahiyetindedir..(DISABLE DEBUG   program örneğine bknz.)
Ayrıntılı bilgi için ON DEBUG ‘a bknz.
  21 )ENBLE INTERRUPT
sözdizimi
end
açıklama
Daha önce DİSABLE veya DİSABLE INTERRUPT   ifadesiyle devre dışı bırakılmış kesme rutininin   izleyen program satırlarında  yeniden devreye alınmasını sağlar. Yönerge mahiyetindedir..(DISABLE INTERRUPT
  program örneğine bknz.)
Ayrıntılı bilgi için ON INTERRUPT‘a bknz.
                                                                     
   22) END
SÖZDİZİMİ
END
AÇIKLAMA
Programın akışını durdurur ve düşük güç moduna geçer.  Bütün I/O bacakları son durumlarıyla kalır.  Bir döngü içindeki SLEEP  talimatı çalıştırılırsa da END meydana gelir.END ,STOP, GOTO2nun her programın sonuna yerleştirilmesinde  yarar vardır. Böylece program sayacının  program belleğinin  en son adresine  kadar gidip yeniden program belleğinin  en son adresine kadar gidip yeniden program belleğinin  ilk adresine  dönmesi sonucu PIC'ın kontrolsuz döngüye girmesi önlenir.
...
...
END
                                 
   23)FOR.. NEXT
SÖZDİXİMİ
For count =start  TO  end { STEP {-}   Inc
{tümceler}
NEXT {count}
Açıklama
Bir dizi tümcenin  COUNT  adlı sayacın START  değerinden başlayıp END değerine  kadar her dönüşteSTEP adlı basamak kadar artarak işlem görmesini sağlar.
a)   START'ın değeri  indeks değişkeni  olan COUNT'a  aktarılır.
b)   tümceler icra görür. Bunlar boş tümcelerde olabilir. Bu durumdadöngü birgecikmedöngüsü  olur.
c)   C)INC'in değeri START'a eklenir (veya"-" ise START'tan  çıkartılır.)INC değeri belirtilmemişseCOUNT  1 artar.
d)   Eğer COUNT'un değeriEND  ile belirlenen   değerin dışına çıkmamş ise   döngü  sona erer. Çıkmışise(a)'ya dönülür.
Döngüdeki  COUNT'un 255'den fazla  sayması gerekiyorsa   word büyüklübirsayaç değişkeni  kullanılmalıdır (veya  aynı anlamda,COUNT  bu şekilde tanımlanmalıdır.)
...
for i= to 10                                    Â‘1'den 10'a  kadar değer alınıyor ve
serout PORTB.0 ,N2400, [# i," "] ‘, her değer arasında boşluk olacak
‘ şekilde  ,B portunun 0. bacağına seri      
               Â‘olarak gönderiliyor.
Next  i                                                 ‘sıradaki sayaç değerini   almaya gidiyor
Serout  PORTB.0, N2400,[10]           ‘linefeed gönderildi.
...
for  B2=20  to  10   STEP  -2                 ‘20'den 10'a kadar değer  2azalarak
seroutPORTB.0 ,N2400,[#B2,"  "] ‘her değerasında boşluk olacak                                                                                            
          ‘Şekilde B portunun 0.bacağına seri
          ‘olarak gönderiliyor.

Next B2               Â‘Sıradaki sayaç değerini almaya gidiyor
Serout PORTB.0,N2400,[10]         Â‘Linefeed gönderildi.
...
24)FREQOUT
Sözdizimi
FREQOUT Pin,onms,Frequency1{freqency2}
     Açıklama:
  Pinbacağında onms' lik Freqency büyüklükte frekans üretir. Pin otamatik olarak çıkış olur. Pin, 0...15 arasında bir sayı, 0...15 arası bir sayı içeren bir değişken (örneğin B0,B3 vb.)veya bir bacağın adı olabilir.(örneğin PORTA.A)
Belli bir anda 0- 32767 hertz aralığında ikiayrı frekans  üretilebilir.
DTMFOUT için söylenilenler FREQOUT  için geçerlidir.( DTMFOUT ‘ta verilen şekle bknz.)12 bit grubu PIC'ler RAM  ve istif (stack ) sınırlamaları nedeniyle FREQOUT  Â‘u desteklemez.
...
FREOQUT  PORTB.1 ,2000,1000               ‘B portunun 1.bitine 2 saniye süreyle
                  1khz  Â‘lik sinyal gönderilmektedir.
...
FREOQUT   PORTB.1,2000,350,440        Â‘B  Portunun 1. bitine  2 saniye süreyle
                  Â‘350hz/ 440hz (telefon çevir sesi)
                  Â‘yolar.
...
25)GOSUB
SÖZDİZİMİ
GOSUB LABEL
AÇIKLAMA
 Dönüş adresini istife saklayarak program akışını  LABEL ile gösterilen etiketi   izleyen satırlara yönlendirir. Program akışı bu etiketi  izleyen  tümceleri uyguladıktan sonra RETURN  talimatını görünce   geldiği gosub ifadesini   izleyen program satırına döner . istenilen sayıda alt rutin kullanmak     bunları içiçe kullanmak mümkündür. Yani birbirini  çağıran  alt rutinler  kurubilmekle birlikte  bunlarınsayısı 42den fazla olamaz.(17CXXX için 12, 18CXXX  için 27)
...
GOSUB  BEEP                                     BEEP  adlı rutine gider            
...
...
beep:                                                   ‘beep  rutininin   başlangıcı(etiket)
high  PORTB.0                                    Â‘B portunun 0.bitine bağlı LED'i yakar.
Sound  1,[80,10]                                 ‘pin1'e bağlı hoparlör
Low PORTB.0                                    Â‘B pottunun 0.bitine bağlı LED'isöndürür.
RETURN                                             ‘gosub beep ‘te sonraki satıra gider        
26)   GOTO
SÖZDİZİMİ
GOTO LABEL
AÇIKLAMA
     PROGRAMN AKIŞINI  label  ile belirtilen  etiketi  izleyen satıra yönlendirir. Akış etiketi  takip eden satırları izleyerek devam eder.
...
GOTO send                                          Â‘send adlı etikete  gider
...
...
send:
serout PORTB.0,N2400,["HEY"]   ‘B portunun0.biine seri  "HEY!"
                  Â‘gönderir.
...

27)HIGH
SÖZDİZİMİ
 HIGH PIN
AÇIKLAMA:
PIN'İ LOJİK "1"  yapar. Bacak otomatik olarak çıkış olur. Pin 0..15 arası bir sayı  içeren bir değişken(örneğin B0,B3) veya bir bacağın adı olabilir.    (örneğinPORTA.0)
...
HIGH  0            Â‘PIN0 ÇIKIŞ VELOJİK"1" (5v)  YAPILIR.

...
HIGH PORTA.0         Â‘PORTA'nın 0. biti  çıkışve lojik"1"
               (5V) yapılır.

...
led VAR   PORTB.0      Â‘PORTB'nin0.biti   led olarak tanımlandı.
               Â‘led,  çıkış ve lojik"1" (5V) yapılır.
HIGH  led
...
çokış olarak  yapılandırılmış  birbacağı doğrudan lojik "1" yapmakda mümkündür.
...
TRISB.0=0            Â‘PORTB'nin  0.biti  ÇIKIŞ  olarakyapılandırılır.
...                                    
PORTB.0=1            Â‘PORTB'nin  0.biti  lojik "1" (5V )  yapılır.
...   

28)HPWM
sözdizimi
hpwm  chanel, dutcycle,freqency
bazı PIC'lerde  bulunan PWM  donanımını kullanarak darbe geişlik  modülasyonlu bir darbe katarıüretir. Program diğer işlemleri yürütürken  arkada durmaksızın çalışabilir.channel PWM donanımkanalınıifade eder. Bazı entegrelerde1,2,ya da 3PWM  kanalı olabilir.2 kanallı cihazlarda  her iki kanaldaki  FREQENCY  frekans değerlerininaynı olması  şarttır.
DUTYSYCLE   ise sinyalin  açık/kapalı (yüksek /düşük) oranını belirler.0 ile 255 arasında değer alabilir.0 her zamandüşük(kapalı)oldudğunu ;255 her zaman  yüksek  (açık) olduğunu anlatır.127  değeri  iş çevriminin  (kare dalga) yarısını verir.
FREQUENCY   PWM  sinyalin arzulanan  frekansıdır. Her frekans bütün osilatör ayarlarında mümkün değildir.  Her hangi bir osilatör ayarı için en yüksek  frekans    32767Hz'dir. Her osilatör ayarı için kullanılabilecek en düşük HPWM frekansı tabloda gösterilmektedir.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        PIC18C452 gibi  bazı cihazların HPWM  için kullanılabilen  alternatif bacakları  vardır. Karşılık gelen bacaklar aşağıdaki tanımlarla kullanılabilir.
DEFİNE CCP1_ REG PORTC         Â‘HPWM 1 PORTU         
DEFİNE CCP1_ BIT 2             Â‘HPWM 1 BİTİ   
DEFİNE CCP2_ REG PORTC         Â‘HPWM 2 PORTU         
DEFİNE CCP2_ BIT 1            Â‘ HPWM 2 BİTİ
Aşağıda PIC17C7xx  entegrelerinde PWM   kanal 2 ve kanal3 ile hangi  zaman sayarın (TIMER1 veya TIMER2)    kullanılacağı tanımlanmaktadır. Tanımlama yapılmazsa ön ayar gereğimceTIMER1 kullanılır.
   DEFİNE HPWM2_tımer 1           ‘Hpwm2zaman sayarı seçimi
DEFİNE  HPWM3_ tımer  1        Â‘Hpwm3   zaman sayarı seçimi
HPWM  1,127,1000                     ‘1KHZ'te %50 iş çevrimli PWM sinyali          HPWM  1,64,2000                        Â‘2KHZ ‘te %25  iş çevrimli PWM  sinyali
29)HSERIN:
sözdizimi
HSERIN{psritylabel,}{tımeout,label,}[ıtem{,...}]
Açıklama
 Donanımyla asenkron  seri haberleşmeyi  destekleyen PIC'lerde donanımın  seri portundan  bir veya daha fazla  ıtem adlı kalem alır.

Yerleşik asenkron seri fonksiyonlarından biridir.  Sadce USART donanımı olan PIC'lerle kullanılır.  Seri giriş bacağı ve diğer parametrelerine  ilişkin bilgileri o PIC'in bilgi  sayfasından edinmek gerekir.seri parametreler ve baud hızı tanımlanabilir.:
DEFİNE HSER_RCSTA   90h  Â‘Seri alıcıyı etkinleştirmek içinRCSTA
            Â‘yazmacının ayarlandığı değer

DEFİNE HSER_TXSTA  20h ‘ seri vericiyi  etkinleştirmek için  TXSTA
            Â‘yazmacının ayarladığı değer

DEFİNE HSER_BAUD  2400  Â‘baud hızının ayarlanması

DEFİNE HSER_SPBRG  25   ‘normalde HSER_ BAUD ile ayarlanan  SPBRG

            Â‘^yazmacını doğrudan ayarlar.
HSER_RCSTA,HSER_TXSTA veHSER _SPBRG'den her biri sırasıyla  ilgili PIC'lerin RCSTA,TXSTA,SPBRG YAZMAÇLARINI BELİRTİLEN  hex sayıya ayrlar.
TXSTA  yazmacının BRGH  biti  (bit 2)baud hızı üretecinin   yüksekhız modunu denetler.  Belli osilatör hızlarındaki    belli baud hızlarında sağlıklı   iş görmesi için  bu bitin set edilmesini  gerrektirir. Bu amaçla HSER_TXSTA  20 h yerine 24h  olarak ayarlanmalıdır.
Baud hızı hesabında  HSERIN  osılatörü  4mhz  olarak var sayar.  Baud  hızı zamanlamasını diğer osilatör değerleri ile  birlikte kullanmak için OSC değerlerini DEFINE  yardımı ile yeni osilatör değerine  göre belirlemek gerekir.    
TIMEOUT  zaman aşımı değeri ve label etiketi tercihan    eklenerek belli bir zaman içinde bilgi alınmaması halinde programın devam etmesi istenebilir.TIMEOUT değeri 1 milisaniyelik birimler şeklinde belirlenir. Tımeout ile belirlenen süre içinde   giriş bacağı boşkalıyorsa      program HSERIN'den label ile gösterilen kısma  yönelir.
8N1  formatı kulanılır.7E1 veya 7o1 formatları için tanım yapmak gerekir.

DEFİNE HSER_EVEN  1           ‘ Sadece çift parite arzu ediyorsa                                   
DEFİNE HSER_ODD  1   Â‘sadece  tek parıte  arzu ediyorsa            parıte  ayarları  diğer tüm HSER  tanımlarıylabirlikte  HSERIN     yanında  HSEROUT   daetkiler.  
Parıtylabel     parıte etiket değeri kullanmak tercihe  bağlıdır. Birkarakter parite hatasıyla alınırsa   programın akışı bu yerleşimden devam eder. Donanımın seri port   giriştamponu  2 bayttır. Dolayısıyla yeterli sıklıkta okuma yapılmaması  halinde     taşma kaçınılmazdır.   Bu durumda USART  yeni  karakter  alımını keser. Bu ise yeniden set edilmesini  gerektirir.  Taşmayı  reset etmek için RCSTA  yazmacının CREN  bitinin  düzeyi  değiştirilir.  Böylebir hatayı otomatik olarak temizlemek için  tanım  yapmak gerekir. Ancak bu durunda da hata oduğunda farkına varmak mümkün olaz  karakter  kaybolur.

DEFİNE HSER_CLROERR    1
Veye  manuel temizleme için:
RCTA.4=0
RCTA.4=1
Seri alımdonanımla yyapıldığı için RS-232  sürücüsünü  elimine  etmek  üzere  düzeyleri tersindirmek mümkün olmaz.  Bu nedenle  HSERIN'le  birlikte   uygun bir sürücü  (örn.MAX232 VEYA MUADİLİ) kullanmak gerekir.
2 seri  portlu 17cxxx cihazlarda  HSERIN  sadece  ilk porta  erişir. İkncininayarlanması ve yazmaçlara  doğrudan erişerek  okunması gerekmektedir.
HSERIN ,SERIN2 ile aynı durum belirteçlerini  destekler. Bu  konuda SERIN2'ye  bknz.
Durum belirteci            operation
=========            ======
BIN{1...16      2- tabanlı (binary) digit alımı
DEC{1..5}         10- tabanlı (decimal  digit  alımı   
HEX }   {1..4}         16- tabanlı (hexadecimal)digit alımı
SKIP n            alınan n adet karakteri görmez
STR arrayVar\n{\c}       tercihan c karakteriyle bitern n adet karakteri  alır   
   WAIT ( )      karakter  dizisi  için bekler   
WAITSTR ArrayVar{\n}   n karakterli  terimi bekler
...            
HSERIN [B0,DEC  W1]   Â‘ilk karakteri B0 değişkeninde  takip eden
            Â‘ karakterleri  ise 10 tabanında W1
            Â‘değişkeninde saklar.   

...      
30)HSEROUT
SÖZDİZİMİ
HSEROT[ITEM{,ITEM...}]
AÇIKLAMA
donanımıyla seri asenkron haberleşmeyi  destekleyen pıc'lerde  donanımın seri portuna birveya daha fazla ıtemadlı kalem gönderir.
Yerleşik asenkron seri  fonksiyonlardan biridir. Sadece USART  donanımı olan portlarla kullanılır.seri  çıkış bacağı ve diğer parametrelerine ilişkin bilgileri oPIC'in bilgi  sayfasından edinmek gerekir. Seri  haberleşme parametreleri  ve baud  hızı tanımlanabilir.(HSERIN'E BKNZ) bu  tanımlar  HEM hserın    HEMDE hserout  komutları için geçerlidir.  Ve programın hemen başında  bir kez yapılır.8n1 seri  formatı kullanılır.7E1veya 7O1  formatları için tanım yapmak gerekir.(HSERIN'e bknz.)
RS-232  srücüsü  ve 2 seri   portlu 17Cxxx  grubu  için söylenenler burda da geçerlidir.
HSEROUT  veSEROUT2 ile aynı durum belirtecini   kullanır.daha ayrıntılıbilgi için SEROUT2'ye bknz.
Durum belirteci            operation
========               ======
{I}  {S} BIN{1...16         2- tabanlı (binary) digt  gönderimı
{I}  {S }  DEC{1..5}         10- tabanlı (decimal  digit  gönderimi
{I}  {S}HEX }   {1..4}         16- tabanlı (hexadecimal)digit gönderimi
REP c/n            c karakterinin  n defa gnderimi
STR  arrayVar{\n}         n karakterli terim gönderimi
...
HSEROUT [DEC B0,10]      USART donanımdan B0 değişkeninin 10
               Â‘yabanındakideğerini  ve lınefeed yollar
31)12CREAD
sözdizimi
12cread  data pin ,clockpın,control,{addres,}[var{,var...}]{,label}
açıklama
    clock pin saat bacağına ve data pın veri bacağına  kontrol baytları ve tercihan adres baytları gnderir. Aldığı baytları Var ile belirtilen değişkene saklar.saaat ve veri bacağı değerleri  0...15  arasıbirsayı 0..15 arası birsayı değişken içeren  bir değişken (örneğin B0,B3 vb.)veya bir bacağın adı olabilirler.(örneğin PORTA.A)
12CREAD  ve 12CWRITE  ile mıcrochıp  24LC01B vebenzeri  iki yolla I  kare C   ara birimli bir seri EEPROM  üzerine  yazma ve okuma yapılabilir. Bu durum verinin  harici  bir değişmez  bellekte kalıcı olarak saklanmasına olanaktanır. Komutlar I kare C modunda çalşıır. Öte yandan sıcaklık sensörleri ve A/D   çeviriciler gibi I kare C arabirimli cihazlarla haberleşmede kullanılabilir.
Salt 12 bit PIC' lerde I kare C saat ve veri bacakları derleme anında   define ifadesi ile  tanımlanarak   sabirlenir. Bununla birlikte   mutlaka 12CREAD  tümcesinde de ayrıca belirtilmesi   gereklidir.
DEFİNE  I2C_SCL  PORTA, 1      Â‘sadece  12_ bit grubu  için
DEFİNE  I2C_SDA  PORTA, 0      Â‘sadece  12_ bit grubu  için
Control baytının 7 üst biti  bağlantı yapılan yongaya   bağlı olarak yonga seçimi    ve ek adres bilgisi ile birlikte bunlara ait kontrol kodunu içerir. Düşük mertebeli bit dahili  bir bayrak  (flag) olup komutun okuma / yazma ayrımını yapar ve  lojik "0" tutulması gerekir.
Örneğin 24LC01B ile haberleşmede kontrol kodu%1010'dür.(binary değer)yonga seçimi kullanılmaz ve böylece CONTROL  baytı %10100000 veya  $A0 (her değeri ) olur. Bazı farklı entegreleriçin  CONTROL  baytının formatlarışöyledir.
Cihaz         kapasite      kontrol      adres büyüklüğü
===         =====      ====      =========
24LC01B      128 bayt      % 1010xxx0      1 bayt
24LC02B      256 bayt      %  1010xxx0      1 bayt
24LC04B      512 bayt      % 1010xxb0      1 bayt
24LC08B      1K bayt      %1010xbb0      1 bayt
24LC16B      2K bayt      %1010bbb0
24LC32B   4K bayt         %1010ddd0      2 bayt
24LC65   8K bayt         %1010ddd0      2 bayt
   bbb0 blok seçim(high  mertebe adres) bitleri
   ddd= yonga seçimbitleri (oyongaya ait bilgi sayfasına bknz.)
   xxx= fark etmez.
Gönderilen ADRESS büyüklüğü   (bayt veya word)   kullanılan değişkenin büyüklüğüile belirlenir. Bayt boyutlu değişken kullanıldıysa adres 8 bit gider.  Word gönderildiyse 16 bi tadres gider. Haberleşilecek cihaz için gereken boyutu  kullanmak çok önemlidir. Adress için sabit kullanılmaz.öte yandan ifadelere başvurmakda yanlışlığa neden olabilir.
Var ile belirtilen  değişkenword boyutlu ise 2 bayt okumayapılır. Ve ilki var'ın yüksek  baytını  ikincisi  düşük baytı yazılır. Yani burada değişkenlere uygulanan prensip   tam tersine uygulanmaktadır.
Değişken adı içerisinde STR  durum belirteci yer alabilir. Bu bir defada bir   strıng diziyi  yükleybilir. STR  belirtiliyorsa izleyen değişken word'un veya bayt dizinin ismi olmak zorundadır. Ve ardına bir(\)ilesayaç eklenir.
A var byte [8]
12CREAD  PORTC.4,PORTC.3,$a0,0,[STR  a\8]
dizi  word boyutlu ise 2 bayt önce düşük bayttan okunur. bu durum word'lerin okunma kolaylığı ile tezatlık oluşturur.bu durum derleyicinin  word boyutlu değişkenleri   normal saklama yoluyla tutarlıdır.
Eğer  label kullanıldıysa I kare C  entegreden bir onay        alınmaması halinde  atlanacak  etiketin   adını ifade  eder.
I kare C  talimatları 12Cexxx  ve 16Cexxx  gibi  entegrede seriEEPROM'a erişimde kullanılabilir.I kareC  komutunun  parçası  olarak dahili uygunhatlar için sadece bacak numaralarının  belirlenmesi ve programın  başında aşağıdaki  tanımın yapılması yeterlidir:
Define ı2C- ınternal 1
12CE67x entegreler için veri yolu GPIO.6, saat yolu ise GPIO.72dir.16CE62x'ler için veri yolu EEINTF.1 ve saat yolu   EEINTF.2' dir.
Standart hızlı (100khz)cihazlarda 8 mhz saat hızlarında  erişebilmekiçin I kare C talimatlarnın zamanlaması ayarlanır. Yüksek hızlar (400khz)için 20mhz kullanılabilir. 8 mhz ‘in üstünde  saaat hızıyla  standart cihazlara erişim arzu edliyorsa aşağıdaki tanımı yapmak  gerekir.
Define ı2C-slow  1
Bellek ve istif sınırlamalarınedeniyle12 bit PIC'ler için bu tanım bir işe yaramaz . düşükhızlı (100khz) I kare C cihazlarda 4 mhz kullanılır.bunun üstünde yüksek hızlı (400khz)  cihazların kullanılması gerekir.
I kare C bus üzerinden trnsfer alıcıcihazın saat hattınıdüşük tutarak bekletilebilir.(12 bitPIC ‘lerde desteği yoktur.) bunun için şutanıma başvurulur:
Define ı2C-HOLD  1
ı kare c saat ve veri  hatları    her ikisinin de  iki yönlü  açık kollektörtarzında  çalışmaları sebebiyle  4k7 dirençler üzerinden  vcc  ye  çekilmelidir.ı'c  saat hattını açık kollektör yerine bipolar  yapmak için şu tanım kullanılır.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ... Define ı2C-SCLOUT  1
...
add  var BYTE
cont con %10100000
add=17                  Â‘adres 17'ye ayarlanır
ıCREAD   PORTA.0,PRTA.1,cont,addr,[2]      Â‘17 adresindeki  veriB2
...                     Â‘değişkeninde saklanır.
32)I2CWRITE
SÖZDİZİMİ
I2WRITE DATAPIN ,CLOCKPIN,CONTROL,{ADRESS,08VAULE{,...}]  {,LABEL}
AÇIKLAMA

12CWRITE 12C clock pın saat bacağına ve datapın veri bacağına izleyen  value değerlerini kontrol ve tercihan  adress baytları olarak gönderir.söz konusu saat  ve veri  bacağı değerleri  0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
salt 12bit pıclerde 12c saat ve veri  bacakları derleme anında  DEFINE   ifadesi  ile tanımlanarak sabitlenir. Bununla birlikte   mutlaka 12CWRITE  tümcesininde belirtilmesi  gerekir.
Define ı2C-SCL  PORTA,1            Â‘sadece 12 bit grubu için
Define ı2C-SDA PORTA,0            Â‘sadece 12 bit grubu için
gönderilen adres büyüklüğü (bayt veya  word  )  kullanılan değişkenin  büyüklüğüyle belirlenir.  bayt  boyutlu değişken kullanıldıysa   adres 8 bit gider.  Word gönderildiyse 16 bit  adres gider.  Haberleşilecek cihazlar için gereken boyutu kullanmak çok önemlidir. Adress için sabit kullanılmaz.    Öte yandan  ifadelere başvurmak da  yanlışlığa yol açabilir.
Bir seri EEPROM'a yazarken EEPROM'la  yeniden haberleşmeye geçebilmek için 10msn  (EEPROM'a bağldır) beklemek gerekir. Eğer yazım tamamlanmadan   birbirini izleyen 12CREAD     ve  12CWRITE   gönderilirse erişim sağlanmaz.
Bir defada çok sayıda bayt yazmak için   bir   adet  12CWRITE   tümcesi kullanılması
Halinde  yukarıda anlatılan durumla      karşılaşır. Ancak bazı seri EEPROMlarda bu olanak bulunmaktadır. Yani  bunlarda tekbir sayfaya  çok sayıda bayt bir  anda yazılabilir.
Value  word boyutlubelirlenirse 2 bayt gönderilir:önce düşük sonra yüksek bayt gider.  Buradada değişkenlere  uygulanan   prensip tam tersinden  uygulanmaktadır.
Değişken adı içerisinde STR  durum belirteci  yer alabilir. Bu bir defada   bir  strıng diziyi  yükleyebilir. Böylece seri EEPROM'un   sayfa modu avantajından yararlanmak  mümkündür.  Verinin  tekEEPROM sayfasına sığması  zorunludur. Sayfa  ise  ilgili  EEPROM   ‘agöredeğişir. STR  belirtiliyorsa  izleyendeğişkenwordun  veya bayt  dizinin ismi olmak zorundadır. Ve ardına bir (\) ile birsayaçeklenir.
A  var  byte [8]
I2CREAD  PORTC.4,PORTC.3,$a0,0,[STR  a\8]
Word boyutlu dizi  halinde2 bayt  önce düşük bayttan okunur. Bu durum wordlerin   yazılma kolaylığıyla tezat oluşturur       .bu durum derleyicinin word boyutlu  değişkenleri  normal saklama yoluyla tutarlıdır. Eğer label kullanıldıysa  12C entegreden bir onay alınmaması halinde atlanacak etiketin adını ifade eder.12C talimatı12Cexxx  ve  16Cexxx   gibi  entegrelerde  yongadaki seri EEPROM'a girişde kullanlabilir.12C  komutunun  parçası  olarak  dahili uygun haller için  sadece bacak numaralarının  belirlenmesi ve programın başında  aşağıdaki tanımın   yapılması gerekir.
DEFINE  I2C_ INTERNAL 1
12ce67X  entegreler için veriyolu GPIO.6,saat yolu  ise  GPIO.7;   16CE62x  Â‘ler   için  veri yolu EEINTF.1  ve saat  yolu   EEINTF.2'dir.
standarthızlı (1000khz)    12C  entegrelere   8mhz  saat hızlarında erişebilmek için 12C  talimatlarının zamanlaması ayarlanır. Yüksük hızlılar (400KHz) için 20MHz kullanılabilir. 8MHz'in üstünde saat hızıyla standart I2C entegre erişim arzu ediliyorsa aşağıdaki tanımı yapmak gerekir :
DEFİNE ı2c_SLOW 1
           Bellek ve istif sınırları nedeniyle 12-bit PIC'ler için bu tanım bir işe yaramaz. Düşük hızlı (100kHz) 12C entegrede 4MHz kullanılabilir.Bunun üstünde yüksek hızlı (400kHz) entegrenin kullanılması gerekir.
        I2C bus üzerinden transfer , alıcı entegrenin saat hattını düşük tutarak bekletilebilir (12-bit PIC'lerde desteği yoktur). Bunu için şu tanıma baş vurulur:  
DEFİNE ı2c_HOLD 1
I2C saat hattını açık-kolektör yerine bipolar yapmak için şu tanım kullanılır:
DEFİNE ı2c_SCLOUT
Diğer ayrıntılar için I2CREAD'e bakınız.
...
addr var byte
cont con %10100000
addr = 17                                                                             ‘Adres 17'ye ayarlanır .
ı2CWRITE PORTA.0, PORTA .1 cont,addr,[6]            Â‘17 Adresine 6 gönderilir.
Pause 10                                                                              Â‘Yazımın tamamlanması için
                                                                                            ‘10ms beklenir.
Addr = 1                                                                              Â‘Adres 1'ayarlanır.
ı2CWRITE PORTA.0, PORTA .1 cont,addr,[B2]         ‘B2 değişkenin diğeri
                                                                                             Â‘1 adresin egönderilir.
                                                                                       Â‘Yazımın tamamlanması için            
Pause 10                                                                               ‘10ms beklenir.
33) IF..THEN
Söz dizimi
IF Comp  {AND/OR Comp...} THEN Label
IF Comp  {AND/OR Comp...} THEN
             Tümceler...
ELSE
              Tümceler...
EDNDIF
Açıklama
  Muhtelif sayıda karşılaştırma yaparken kullanılır.Her Comp terimi bir değişkeni, bir sabit veya diğer  değişken ile intilendirilir.

   Karşılaştımalar doğru/yanlış temelinde yürütülür.Değerlendirme doğru ise THEN'den sonraki tümceler yürütülür ; yanlış ise tümce sona erer ‘0' veren sonuçlar yanlış diğer sonuçlar doğru olarak değerlendirilir. PBP karşılaştırma değerlerini işaretsiz olduğu kabul edilir. Öncekileri belirlemek için parantez kullanmak en doğru yaklaşımdır IF..THEN iki yapıda çalışır birinci yapıda THEN bir çeşit GO TO gibi iş görür doğru durumunda THEN'den sonraki ifade uygulanır yanlış durumunda tümceyi izleyen satıra gidilir.
If Pin0 = 0 Then pushd                                     ‘Pin0 ‘ a bağlı butona basılırsa (lojik )''0'  '                                 Â‘pusd  etiketine git.   
If  B0  > =  40  then old                Â‘B0ın değeri 40'dan büyük veya eşitse
                  Â‘old etiketine git.
If  PORTB.0  THEN Itson         Â‘portb.0 bacağı lojik 1 ise itsona git.
İf (B0=10)  AND  (b1=20) RHEN LOOP
ikinci yapıda doğru    durumda  THEN'İ  izleyen tümceler  yanlış durumda  da ELSE'i izleyen tümceler çalıştırılır.bu yapının ENDIf ile bitmesi şarttır.
...
ıf B0< > 10 then         Â‘B0 deişkeni 10'dan farklı ise B0'ı bir
               Â‘ artırır. B1 ise 1 azaltır.B0=10 ise
               Â‘ENDIf ‘ten sonraki tümce icra edilecektir..
ENDIF
...
ıf B0= 20 THEN
led=1               Â‘B0 değişkeni 20 ise ledi yak değilse
ELSE
Led=0
Endıf

               ledi  söndür. Led değişkeninin her hangi
               Â‘bir port bacağına bağlı bir led olduğu
               Â‘varsayılmıştır



34)INPUT

SÖZDİXİMİ                                     
INPUT PİN
AÇIKLAMA
 PIN2İGİRİŞ YAPAR.  PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
INPUT  0                               ‘PIN0  giriş
INPUT  PORTA.3                   ‘PORTA 3.  bacak giriş
      öte yandan bir pın şu şekilde de giriş yapabilir.

TRISB.0=1               Â‘PORT  0.  bacak giriş
TRIS yazmacının tüm bitlerinin lojik  "1"'e  ayarlanması ile   bir portun tüm bacakları giriş olarak tayin edilebilir.
TRISB= %  11111111  Â‘portb'nin tüm bacakları giriştir.
35)LCDIN
SÖZDİZİMİ
LCDIN {address,}[VAR{,VAR}]
AÇIKLAMA
ADDRESS  ile belirtilen adresten LCD  RAM'ı okur ve VAR  değişkenine yükler.
LCD ‘lerde  karakterrler için kullanılan bir bellek bulunur. Bu RAM'a LCDOUT  kullanarak bir yazım yapılır. LCDIN  ise okunmasını sağlar.
Karakter üreteci  ram $40'tan $7F  adres aralığında çalışır. Gösterge ram2ı ise $80  adresinde başlar.LCDIN  veLCDOUT  komutlarının bir arada kullanılabilmesi için LCD oku/yaz hattı PIC'in bir bacağı tarafından kontrol edilmektedir. Bunun için şu tanımlara başvurulur.
Define LCD_ RWREG  PORTE         Â‘LCD  oku/ yaz bacak portu
Define LCD_RWBIT  2            Â‘LCD oku/ yaz bacak biti
LCD göstergesinin PIC'e bağlantısı için LCDOUT  komutuna bknz.

LCD  [B0]
36)LCDOUT
SÖZDİZİMİ
LCDOUT  ITEM  {, ITEM ...}
AÇIKLAMA
Akılı LCD  üzerinde ıtemleri gösterir. PBP'nin hıtachı 44780 kontrolörlü LCD modül desteği vardır. Bir yanda 14 veya 16  pın tekil veya çift sıra başlık vardır.
Item'in önünde #  bulunuyorsa  LCD'ye karakterin Ascıı  formu gönderilir. 12 bit entegreler hariç her cihazda LCDOUT ve SEROUT2 ‘de  kullanılan durum belirteçleri kulanılır. Belirteçlerin ayrıntılı kulanımları için SEROUT22ye bknz.
Durum belirteci            operasyon
gönde{I}  {S} BIN{1...16         2- tabanlı (binary) digt  gönderimı
{I}  {S }  DEC{1..5}         10- tabanlı (decimal  digit  gönderimi
{I}  {S}HEX }   {1..4}         16- tabanlı (hexadecimal)digit rimi
REP c/n            c karakterinin  n defa gnderimi
STR  arrayVar{\n}         n karakterli terim gönderimi
LCD'ye ilk defa komut göndermeden önce  programın en az yarım saniye beklemesi gerekmektedir. Bu LCD'de kullanılan HD44780  veya uyumlu mikrokontrolörün  LCD için gerekli ayarları yapması için gerekli süredir.
LCD'nin ilk başlatılmasında LCD  out kullanılarak  bir karakter veya komut gönderimi ile gerçekleşir.  Güç kesilirse veya faaliyet sırasında  bir sebeple güç yeniden verilirse  içsel bir bayrak reset edilerek  programa bir dahaki  LcdOUT  kullanımı sırasında  LCD'yi  yeniden  başlatması söylenebilir.
FLAGS=0
LCD'ye komut gönderimi  komutun önüne $FE  konarak  yapılır.
      Komut            operasyon
      ====            ======
$FE,   1            ekranı temizle      
$FE,  2            birinci satırın başına dön
$FE,  $0C            imleç kapalı
$FE,    $0E             altçizgi imleç
$FE,    $0F            yanar söner imleç
$FE,   $10            imleci  bir pozisyonda sola taşı
$FE,   $14            imleci  bir pozisyonda sağa taşı
$FE,   $C0            imleci 2. satırın başına taşı
$FE,   $94            imleci  3. satırın başına taşı
$FE,   $D4            imleci 4. satırın başına  taşı
görüntülenen karakterler ve satırlar  LCD'lerin  pek çoğunda görüntü belleğinde sıralı bulunmazlar.yerleşimler arasında kesinti vardır.16x2 ekranlarda ilk satır $0'da ikinci satırda #40 da başlar.tablodaki imleci ikinci satırın başından konumlanarak başlar.16X1 ekranlar 8X2 formatlıdır. İlk 8 ve ikinci 8 karakter grubu için  bellek yerleşimleri bir aralıkla ayrılır.4 satır ekranların bellek haritası bunların karmasıdır.
LCDOUT  $FE,1,"hello"         Â‘ekranı siler ve "hello" yazar
LCDOUT  $FE, $C0,"world"      Â‘2. satıra geçer ve "world" yazar
LCDOUT  $FE,b0, #B1         Â‘B0'ın ASCII  değerini  ve B1'in 10
                  Â‘tabanındaki değerini  görüntüler. yani
                     B0=65 ise

















bu kurgu 2 satır LCD  ekranın 4bitmodda data bus ‘un PORTB'nin  üst4bitine RS'nin PORTB.1'e ve  E'nin de  PORTB.0'a bağlı olduğunu belirlemektedir.PBP derleme anında şu yapılandırmayı dikkate alacaktır.
Aşağıdaki şematikteLCD'nin ön değerlerle PIC'ebağlanışıgörülmektedir.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
37)LET
sözdizimi
{LET}  var = value
açıklama
   var   ile belirtilen değişkene değer atamak için kullanılır.    Value sabit bir değer başka bir değişken veya  bir ifade olabilir. Operatörlerin kullanımına yönelik ayrıntılı bilgi  için  önceki bölümlere bknz. LET'in kullanımı  tercihe bağlıdır.
LET  B0=B1*B2+3
Yerine
B0=B1*B2+B3
Yazılması hiçbirşeyi  değiştirmez.
38) LOOKDOWN2
sözdizimi
LOKDOWN2  search,[constant{,constant...}],var
Search değerinin 8bitlik CONSTANT  ile gösterilen  sabit değerler listesinde olup olmadığına bakılır.      Aranan değerler bulunursa indeks değeri  var ile belirtilen    değişkende saklanır. Eğer aranan değer listedeki birinci   değerse  var değikenine "0"ikinci değerse1"1atanır. Değer bulunamıyorsa var'da değişiklik           olmaz. Sabit listesinin sayısal ve sabit strıngler içermesi  mümkündür. Strıng  içindeki  her karaktere  kendi  ASCII  değeriyle ayrı bir sabit muamelesi  yapılır.      
Listeden en  fazla  255  sabit değer bulunabilir.(18Cxxx'te  256)
Her ne kadar sabit elemanlı dizi  değişkenleri  LOOKDOWN     komutunda kullanılabiliyorsa da  değişken elemanlı  dizi     değişkenleri  bu  komutla kullanılmaz.
Serin  1,n2400,B0            Â‘pın1'den seri  alınan  karakter
‘B0'da saklanır.

"LOOKDOWN   B0, [0123456789ABCDEF" ],B1   Â‘B0'daki  karakterin dizin  değeri                       Â‘bulunur  ve B1 de saklanır.
‘ böylece seri  porttan alınan ‘0.. F arası hex değeri 10
‘tabanına çevrilmiş  olur.
Serout  0, N2400,[#B1]               Â‘B1'de  10 tabanına çevrilmiş
                        Â‘ Olarak saklanan veri  ,yine 10
                        Â‘tabanına görepın0'dan seri
                        Â‘olarak gönderilir.
Örneğin pın1'den seri  olarak alınan "C" karakteri  lisrtesinin  12.  elamanı  olduğu için "12"değeri  (karakter) pın0'dan seri  olarak gönderilmektedir. Dikkat edilirse  hex"C" nin 10  tabanındaki karşılığı 12 dir. Bu şekilde hex ‘den 10 tabanına  basit birçevrim işlemini  gerçekleştirebiliriz.
39)LOOKDOWN2
sözdizimi
lookdown2  search ,{test}[value{,value...}],var
açıklama
search' ın içerdiği value  ile belirtilen değerler listesini  arar. Bulması anında indeks değerini VAR'a katdeder.eğer aranana değerlistedeki1.değerse  var değişkenine "0" 2.değer se "1" atanır. Değer bulunamıyorsa var'da değişiklik olmaz.
Listede enfazla 85 değer (sabir ya da değişken )bulunabilir.(18Cxxx'te 256)
Test tercihan kullanılır. Kullanıldığında ">," "<" vs. gibi  "=" olma dışında bir krıtere göre bir arama yapılır. Value değerlistesi  8-ve 16 bit sayısal ve strıng  sabit ve değişkenleri  içerir.strıng  içindeki her karekterekendi  ASCII   değerleri  ile ayrı bir sabit muamelesi  yapılır.  Value listesinde ifade kullanılmaz. Ancak seach değeri  olarak kullanılmaları mümkündür.
Her nek adar sabit elemanlı  dizi  değişkenleri  LOOKDOWN2  komutundakullanılabiliyorsa  da değişken elemanlı dizi dizi  değişkenleri  bu komutla kullanılmaz.
Bu    tümceyle üretilen kod LOOKDOWN ile üretilenden  3 kat daha büyüktür. Arama listesi  sadece  8 bit sabitlerden ve strınglerden oluşuyorsa LOOKDOWN    kullanılması doğru  olur.
LOOKDOWN2   W0,[512,W1,1024] ,B0
LOOKDOWN2   W0,<[10,100,1000],B0
40) LOOKUP
sözdizimi
lookup  ındex,[value,{value...}],var
Açıklama
8 bit sabitler tablosundan değer seçmekte kullanılır. INDEX'in 0 değeri  için var ilk sabiti ,İndex'in artan değeri içinde izleyen sabitleri alınır.
Liste sayısal ve string değerler içerebilir.String içindeki her karaktere ,kendi ASCII değeriyle ayrı bir sabit muamelesi yapılır.i
  Listeden en fazla 255 sabit değer bulunabilir(18Cxxx'te 256).
  Her ne kadar sabit elemanlı dizi değişkenleri LOOKUP komutunda kullanılabiliyorsa da ,değişken elemanlı dizi değişkenleri bu komutu kullanmaz.
For B0 = 0 To 5
LOOKUP B0,[''Hello!''],B1             Â‘''Hello!'' stringinin B0 no ‘lu karakteri
                                          Â‘ B1 değişkeninde saklanır.
Serout 0 ,N2400 ,[B1   ]                 Â‘B1 ‘deki karakter seriolrak Pin0 ‘a                                    Â‘gönderilir.Böylece ''Hello!'' strigini
                                                       ‘oluşuran tüm karakterler  6 kerede
                      ‘sıryla gönderilmiş olur.
Next B0

41)LOOKUP2
Sözdizimi
LOOKUP Index ,(Value{,Value...}],Var
Açıklama
   Değerler tablosundan seçim yapmak için kullanılır. Index'in artan değeri için de izleyen Vaule değerini alır.
     Vaule değerle listesi 8- ve16-bit sayısal ve string sabit değişkenleri içerir.string içindeki her karaktere, kendi ASCII değeriyle ayrı bir sabit muamelesi yapılır.
Value  değerler listesi 8- ve 16-bit sayısal ve string  savit ve değişkenleri içerir.
String içindeki her karaktere ,kendi ASCII değeriyle ayrı bir sabit muamelesi yapılır.i
Value listesi ifade kullanılmaz . ancak index değeri olarak kullanımları mümkündür.
Her ne kadar sabit elemanlı dizi değişkenleri LOOKUP2 komutunda kullanılabiliyorsa da değişken elemanlı dizi değişkenleri   bu komutla kullanılmaz. Listede en fazla 85 değer bulunabilir.
LOOKUP ‘a kıyasla 3 kat daha büyük kod üretir. 8 bit sabit ve strıngler için LOOKUP kullanılması  daha doğrudur.
LOOKUP2  B0, [256,512,1024],W1
42)LOW
SÖZDİZİMİ
LOW PIN
AÇIKLAMA
belirtilen pıni lojik"0" yapar.pın otomatik olarak çıkış olur.    PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)

...
LOW 0         Â‘PIN0 çıkış yapılır ve lojik seviyesi"0" a
         Â‘çekilir.
...
LOW PORTA.0   Â‘PORTA'NIN 0.biti çıkış ' yapılır ve lojik
‘Seviyesi "0" a çekilir.
...
led var PORTB.0   Â‘led olarak tanımlanan PORTB'nin 0. biti çıkış
         Â‘yapılır ve lojik seviyesi  "0" açekilir.
Zaten çıkış olarak yapılandırılmış bir bacak daha basit bir şekilde de lojik"0" a çekilebilir.
...
PORTB.0=0
43)NAP
SÖZDİZİMİ
NAP PERİOD
AÇIKLAMA
Entegreyi kısa süreler için düşük güç moduna geçirir. NAP  süresince PIC'in çektiği akım en az seviyededir. Listelenen süreler yaklaşık değerlerdir. Bunun sebebi zamanlamanın Watchdog  zaman sayarından türetilmiş olmasıdır. Bu zaman sayar R/C ile sürülür. Yongaya ve sıcaklığa bağlı büyük farklılıklar gösterir.NAP bu zaman sayarla çalıştığı için  zamanlama ile osilatör frekansı  arasında  bağlantı yoktur.
Perıod                gecikme(yaklaşık)
0      18 msn      
1   36msn
2   72msn
3   144msn
4   288msn
5   576msn
6   1.152sn
7   2.304sn
...
NAP 7         Â‘PICyaklaşık 2.3 saniye boyunca düşük güç
         Â‘modunda beklemeye geçer.
...
44)ON DEBUG
Söz dizimi
     ONDEBUG GOTO Label
   Açıklama
   Bu tümceyle PBP talimatları arasında kullanıcı tarafından hazırlanan özel bir izleme (debug monitör) programının çalıması sağlanır.
ON INTER PUT GOTO ile bir çok benzerlik vardır. ON INTER PUT GOTO görüldüğünde, programdaki herPBP talimatı önüne, belirtilen etiketten bir çağrı girilir. Bu işlem DISABLE DEBUG ile engellenir. ENABLE DEBUG çağrı girişini yeniler.
   Her talimattan önce aktive edilecek bir izleme (debug monitör) rutini yazmak mümkündür. Bu rutin ile LCD ‘ye veya bir seri bir Haberleşme  programına veri yollanabilir. Bu şekilde program akışına yönelik herhangi bir bilginin görüntülenmesi yada değiştirilebilmesi olanaklıdır böyle bir izleme programına web sitemizden ulaşabilirsiniz.
   Programın, izleme rutininin ON DEBU GOTO ile çağırılmasından önceki adresini sayacak ,BANK0'ta tanımlanmış word boyutlu bir sistem değişkenine gerek vardır:
DEBUG_ADDRESS VAR WORD BANK0 SYSTEM
   Ayrıca cari program istifinin seviyesini  almakta kullanılacak bir değişken (byte boyutlu) daha kullanılabilir.
DEBUG_STACK VAR BYTE BANK0 SYSTEM
12- VE 14- bit PIC'ler için bu seviyenin kesinlikle 4'den büyük olmaması gerekir.Bu üst sınır 17Cxxx için 12; 18Cxxx cihazlar içinde 27'dir. Sunulan değişken her GOSUB icrasında artacak buna karşılık her RETURN icrasında eksilecektir bu değişkenin programın başında sıfırlanması gerekir.
45)ON INTERRUPT
Sözdizimi
ON INTERRUPT GOTO Label
Açıklama
Bu yapı entegre kesmelerinin idaresini sağlayan bir PBP alt rutinine olanak verir. PBP ile kesmeler iki şekilde idare edebilir :
Birincisi asseply kesme rutini yazmaktır. Bu gecikmelerin en kısa ilave yüklerinde en az olduğu durumdur.
İkinci yöntem: PBP kesme rutini yazmaktır. Diğer PBP rutinlerinde RESUME komutu ile bitmesi yönünde farklılık gösterir. Kesme meydana geldiği zaman kesme bayrağı etkilenir. O  sırata işlenen  PBP tümcesi tamamlanınca program Label ile belirtilen rutine yönlenir buradaki yürütmede sona erince RESUME ile kesmenin tetiklendiği noktaya dönülür.
DISABLE ve ENABLE PBP program farklı kısımlarının kesilmeksizin çalışmasını mümkün kılar. DISABLE ‘in kullanılabileceği en iyi yer kesme rutininin hemen önüdür.  Diğer uygun bir yer ise ON INTERRUPT önü, kesme bayrağının ilk ON INTERRUPT ile kontrol edilmesinden önceki noktadır.
Buradaki gecikme kesmenin tetiklendiği an ile kesme rutinin başladığı an arasındaki farka ilişkindir PBP tümcelerinin aynı ada uygulanamaması kesme rutinin devreye girmesin de hatırı sayılır bir gecikmeye yol açar PBP kesme rutinini devreye sokmak için o sırda icra gören tümcenin sona ermesini bekler. Tümcenin PAUSE ya da SERİN olması halinde kesmenin onaylanması epey bir süre alacaktır. Dolayısıyla  programın bu tür gecikmeler dikkate alınarak tasarlanması gerekir. Makul görünmüyorsa kesmelerin çok daha hızlı çalışması isteniyorsa assembly  ile  hazırlanmıştır rutinleriyle çalışmayı düşünmek gerekir. Programa binen ek yükler ise ayrı bir konudur bir kesme meydana gelsin ya da gelmesin,ON INTERRUPT ile her tümcenin önüne bir bir talimat  eklenecektir.DISABLE ile bu ekler devre dışı bırakılabilmektedir.ENABLE ise bunları yeniden devreye sokmaktadır. Bu ekler genelde ciddi bir sorun çıkarmamakla birlikte program belleği kapasitedeki entegrelerde sıkıntıya seep olurlar ON INTERRUPT ‘ların sayısı birden fazla olabilir.
ON INTERRUPT  GOTO  myint      Â‘kesme olunca myin'e git
INTCON %=10010000         Â‘RB0=  kesmesi devrede
...
DISABLE               Â‘kesme rutini  devre dışı
Myınt:                  Â‘ kesme  maşasının adı
Led=1                  Â‘kesme halinde ledi yak
RESUME               Â‘progragram gövdesine dön
ENABLE               Â‘kesme rutini  yeniden devrede.


ON  INTERRUPT'tan sonra kesmeleri gerekinceye kadar  tamamen kapatmak için

INTCON=$80

Kkomutu  yürütülür.
46) OUTPUT
SÖZDİZİMİ
OUTPUTPIN
AÇIKLAMA
PIN'İ çıkış yapar. PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)

OUTPUT  0         Â‘pın0 çıkış olarak belirlendi.
OUTPUT  PORTA.0      Â‘pota'nın 0. bacağı çıkış olarakbelirlendi.
Bir bacağı dolaysız olarak belirlemenin bir yolu  daha vardır.

TRISB.0=0         Â‘PORTB'nin  tüm bacakları çıkış yapıldı.
   Bir portun tüm bacakları benzer şekilde çıkış olarak belirlendi.
TRISB=%00000000      Â‘PORTB'nin  tüm bacakları çıkış yapıldı.
47)OWIN
OWIN PIN ,MODE,[ITEM...]
AÇIKLAMA
Tek telli ("one wire" protokolünü destekleyen entegreler) bir  entegreye reset darbesi gönderir. Entegreye bir veya birkaç bayt  yada bayt yazar. Bir değer reset darbesi ile sona erer. PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
Mode reset darbesinin   operasyondan önce/sonra  gönderimini ve veri kaleminin bit bayt boyutunu belirler.
Mode  bit no         sonuç
========         ===
0   reset darbesi, 1=veriden önce, =YOK
1   reset darbesi, 1=veriden sonra, =YOK   
2   0= bayt boyutlu veri,1=bit boyutlu veri
mode örnekleri:
0 mode eğeri reset darbesinin olmayacağını  verinin bayt boyutunda olaxağını ;1 mode değeri resetin  önce yapılacağını veri boyutunun bayt olacağını 4 mode değeri reset darbesi olamayacağını verinin boyutunun bit olacağını anlatır.
Item ayısı birden fazla olabilir. Bunlar ya bir değşken ya da bir durum belirtecidir. Mümkün belirteçler şunlardır.STR,SKIP. İlki veriyi  bayt dizi değişkenine almak içindir. İkincisi ise giriş değerlerinin adedini  pas geçmeyi sağlar. Bu iki belirteç RAM ve istif belirteçleri nedeniyle 12 bit pıc ler için tnımsızdır.
OWIN PORTC.0 ,0 [temparature  /2,SKIP  4 count_remain , count per_c]
Yukarıdaki tümce ile tek telli  entegreye bağlanan PORTC'nin 0. bacağından reset darbesi görmeksizin bayt alınır. 2 bayt alım yapılır. Bu iki bayt temparature   adlı dizi değişkenine konulur. İzleyen 4 bayt görülmez. Ardında gelen iki bayttan biri  count _ remain adlı değikene diğeride count_per_c adlı değişkene yerleştirilir.
48)OWOUT
SÖZDİZİMİ
OWOUT PIN MODE ,[ITEM...)
AÇIKLAMA

 
Tek telli ("one wire" protokolünü destekleyen entegreler) bir  entegreye reset darbesi gönderir. Entegreye bir veya birkaç bayt  yada bayt yazar. Bir değer reset darbesi ile sona erer. PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
Mode reset darbesinin   operasyondan önce/sonra  gönderimini ve veri kaleminin bit bayt boyutunu belirler.
Mode  bit no   
      sonuç
   0   1=reste darbesi veriden önce
1   1=reset darbesi veriden sonra
   2   0=bayt bouytlu veri,1=bit boyutlu veri         

      
                     
         


mode örnekleri:                    
0 mode eğeri reset darbesinin olmayacağını  verinin bayt boyutunda olaxağını ;1 mode değeri resetin  önce yapılacağını veri boyutunun bayt olacağını 4 mode değeri reset darbesi olamayacağını verinin boyutunun bit olacağını anlatır.
Item ayısı birden fazla olabilir. Bunlar ya bir değşken ya da bir durum belirtecidir. Mümkün belirteçler şunlardır.STR,REP. İlki veriyi  bayt dizi değişkenine almak içindir. İkincisi ise giriş değerlerinin adedini  pas geçmeyi sağlar. Bu iki belirteç RAM ve istif belirteçleri nedeniyle 12 bit pıc ler için tnımsızdır.
OWIN PORTC.0 ,1,[$cc,$be]
Yukarıdaki tümce ile tek telli entegreye PORTC'de 0. bacak üzerinden  bir reset darbesi ve ardından $cc ile $be gönderilir.
49) PAUSE
SÖZDİZİMİ
PAUSE PERİOD
AÇIKLAMA
Program akışını perıod ile belirtilen  milisaniye sayısı kadar  durdurur.) Kullanılan perıod 16 bitlik olduğu için  gecikme 65535 milisaniye (yaklaşık  bir dakikadan uzun bir süre kadar çıkabilir.NAP  ve SLEP  gibi  fonksiyonlardan farkı  entegreyi düşük güç moduna sokmamasıdır. Ancak bu yöntemle elde edilen gecikme süresi daha hassatır.(sistem saatı ile aynı ölçüde)
PAUSE' de osilatör frekansının + MHZ olduğu kabul edilir. Bunu değiştirmek için DEFİNE  OSC kullanılır.
...
PAUSE   !000            Â‘1 saniye bekleme
...
50)PAUSEUS
SÖZDİZİMİ
PAUSEUS  PERIOD
AÇIKLAMA
Program akışını perıod ile belirtilen mikrosaniye sayısı kadar durdurur. Kullanılan perıod 16 bitlik olduğu için  gecikme 65535 milisaniye (yaklaşık  bir dakikadan uzun bir süre) kadar uzatılabilir. Güç sarfında PAUSE  ile aynı özelliktedir.
Bu tümce faaliyetinde  minimum çevrim sayısını aldığı için  osilatör frekansına göre belirlenen  minimum mikrosaniye   sayısındandaha küçük gecikmelere olanak tanımaz. Böyle kısa gecikmelerin assembly rutinleri ile durdurulması gerekir.






















PAUSEUS'da osilatör frekansının 4mhz loduğu kabul edilir. Bunu değiştirmek için DEFINE  OSC  kullanılmalıdır.
...
PAUSE   1000            Â‘1 saniye bekleme
...
51)PEEK
SÖZDİZİMİ
PEEK ADRES ,VAR
AÇIKLAMA
Entegrenin ADRSS  ile belirtilen  ram adresindeki yazmacı okur. Sonucu VAR  ile  gösterilien değişkene atar.A/D  konvertörleri  ve ek I/Q  portları gibi PIC'e özgü yapılarda PEEK ile okuma yapılır.
ADRES  birsabit ise  o numaralı yazmacın  içeriği VAR  ile temsil edilen  değişkenlere konulur.  Eğer ADRESS  özel bir fonksiyon yazmacının adıysa (örneğin PORTA) bu yazmacın içeriği  yine VAR'a yazılır.ADRESS' in bir ram yerleşimi  olması   halindeyse önce bu yerleşimin değeri okunur. Ve bu yazmacın  bu değrle belirlenen içeriği   değişkene yazılır.
Bununla birlikte PIC yazmaçlarına PEEK  yada  POKE kullanmaksızın ulaşılabilir.PBP  bu yazmaçların 8 bit değşken olduğunu varsayar.böylece bayt boyutlu değişkenler olarak kullanımı mümkündür. Doğrudan okunabilir. Yada  eşitliklerde kullanılabilirler.
Aşağıdaki ifade
...
PEEK   $5  ,B0         Â‘PORTA'nın  hali hazır değerlerini  B0'a alır.
      Â‘PORTA,PIC'in 0.RAM  bankında $5 no.lu                  Â‘ adrestedir.
...
takıp eden örnekle  aynı işleve sahiptir.
...
B0 =PORTA            Â‘PORTA'nın  halihazır değerlerini B0'a alır.
...
52)POKE
SÖZDİZİMİ
POKE ADRESS , VALUE
AÇIKLAMA
Entegrenin belirtilen  ADRESS'teki  ile yazmacına VALUE ile verilen değeri    yazar.A/D  konvertörleri  ve ek I/Q  portları gibi PIC'e özgü yapılarda POKE  ile yazım  yapılır.
ADRES  bir sabit ise  o numaralı yazmaca  konulur.   Eğer ADRESS  özel bir fonksiyon yazmacının adıysa (örneğin PORTA) value değeri  yine bu yazmacakonulacaktır.ADRESS' in bir ram yerleşimi  olması   halindeyse önce bu yerleşimin değeri okunur. Ve value  bu  içerikle belirlenen yazmaca yüklenir.  
Bununla birlikte PIC yazmaçlarına PEEK  yada  POKE kullanmaksızın ulaşılabilir.PBP  bu yazmaçların 8 bit değşken olduğunu varsayar.böylece bayt boyutlu değişkenler olarak kullanımı mümkündür. Doğrudan okunabilir. Yada  eşitliklerde kullanılabilirler.
Aşağıdaki ifade
...
POKE  $85,0            Â‘PORTA'nın tüm bitleri çıkış yapılır.TRISA, 1. RAM
               Â‘bankı $85no.lu adestedir. Daha sonra PORTA'ya
               Â‘1 değeri yazılır.bu da 0. bitin lojik "1",

electrotechnics

SON SURAT DEVAM
60)READCODE 
SÖZDİZİMİ
READCODE ADRESS,VAR
AÇIKLAMA
Adress  Â‘deki  word boyutlu kodu okur ve VAR'a koyar.
PIC16F87x  entegreler çalışma anında  progam bellek alanından  kodun okunmasına ve bu alana kod yazılmasına izin verirler.Program belleğini değiştiren kod yazmak  oldukça riskli bir işlemdir ve çok dikkatli tasarlanmalıdır.
READCODE   100,W				‘program belleği 100 deki kodu w'de saklar.
61)RESUME
SÖZDİZİMİ
RESUME{LABEL}
AÇIKLAMA
 Kesme sürecinin çıkışında program akışını kaldığı yere döndürür.RETURN  komutuna çok benzer.  Fark pıc basıc pro  kesme rutinlerinin dönüşünde kulanılmasıdır. Label ile belirtilen etikete  dönmesi programcının tercihine kalmıştır. Ancak bu durumda  daima bu etikete yönlenir.yığındaki  diğer dönüş adreslerine   erişim mümkün olmaz.
INTERRUPT'a bknz.
Clockınt:
Seconds= seconds  +1		‘süre sayımı
RESUME  			‘kesmeyle kalınan noktaya döner.

Error:
Hıgh errorled
RESUME  restart			‘hata ledini  yakar
   	Restart satırına gider.
62)RETURN
SÖZDİZİMİ
RETURN
AÇIKLAMA
Altrutinlerden dönüş GOSUB ile yönlenilen rutinin dönüşüdür. Sonraki satırdan devam eder.
Gosub sub1		sub1 etiketi BASIC  rutinine gider..
...
sub1:
serout  0,N2400,["lunch"] 	‘pın0'a"lunch" ı seri gönderir			‘ana programda gosub komutu takip
	‘eden komuta döner.
63)RESERVE
SÖZDİZİMİ
RESERVE PIN
AÇIKLAMA
Giriş (çıkış )olan bir pın çıkışa (girişe)çevirir. PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
Output 4		‘pın4 çıkış 
RESERVE  4		‘pın4 giriş yapıldı
64)  SELECT CASE	
SÖZDİZİMİ
SELECT CASE  VAR 
CASE EXPR1{,EXPR....}
TÜMCELER...
{CASE ELSE 
TÜMCELER...}
END  SELECT
AÇIKLAMA
IF...THEN  bloklarının yerine kullanılabilir. Değeri incelenwecek değişken VAR  ile temsil edilir.her kıyaslamada SELECT  CASE  satırındaki içerik esas alınır. CASEleri izleyen tümceler CASE  satırında belirtilen koşulun   doğru olması halinde icra görür.END  SELECT  iadesi tümceyi kapatır.
SELECT CASE  x
CASE 1
Y=10
CASE  2,3
Y=20
CASE IS > 5
Y=100
CASE ELSE
Y=0
END SELECT
65)SERIN 
SÖZDİZİMİ
SERINPIN ,MODE{TIMEOUT,,LABEL,{[QAİFİER...]{ITEM}
AÇIKLAMA
PIN üzerinden standart  asenkron seri  formatla (8N1)bir ya da daha fazla sayıda ıtem alır.	. Pın otomatik olarak giriştir. PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
Mode'lar MODEDEFS.BAS isimli mod tanımlarını   içeren BASIC  dosyasında bulunur.eklemek için programın başına aşağıdaki satırı  yazmak gerekir.
Include  "modedefs.bas"
Bu dosya BS1DEFS.BAS ve BS2DEFS.BAS  dosyaları tarafından içerilmektedir.dolayısıyla ikisinden biri yüklendiyse MODEDEDEFS.BAS'Iyüklamamak ğerekir.dosyayaı yüklemeksizin aşağıdakiMode değerini kullanmak mümkündür.				











Belli bir zaman içinde karakter alımmması halindede proğramın devam etmesi istenirse tımeout zaman aşımı degeri ile label adıyla belirtilen bir etiket kullanılabilir.seri ğiriş bacağı msn olarak ölçülen zaman aşımı süresince aylak durumda kalırsa proğramın akışı etiketle belirtilen satıra ğider.
 Item alınacak veri maddelerini anlatır.bunların başına bir veya daha fazla niteleyciQualifier
Ğetirmek proğramcı şisterse mümkündür.bu niteleyiciler köşeli parantez içinde yazılırlar ve içerdiği baylar SERINtarafından mutlak sürette ıtem lerdan önce ve verilen sırada alınırlar bir bayt niteleyici sıralamsındaki izlayan bayta uymazsa nitelendirme süreci başa döner: yani sıradaki ilk bayt niteleyici listesindeki birinci kalemle karşılaştırılır.bir niteleyici sabit,değişken veya strinğ sabir olabilir. Strinğ içindeki her karakter münferit bir niteleyici olarak değerlendirilir.niteleyiciler saglanıyorsa SERIN verileri karşılık ğelen Item'lara tamaya başlar. Değişken ismi ek almadan yani yalnız başına kullanıldıysa değişkende alınan ASCII karakterlerinin degeri yer alacaktır. Eğer değişken ismin önüne (#)konulursa SERIN aldığı ASCII degeri onluk sistemdeki karşılığını değişkene koyar.bu onlu degeri ilk hanesine kadar alınan rakam olmayan terimler ğöz ardı edilir.aynı şekilde onlu degerin sonundaki rakam olmayan terimde ğöz ardı edilir.SERIN bit zamanlaması üretirken osilataörüm 4mhz oldugunu var sayar. Farklı osilatör ile BAUD hızı zamanlamsının uyumu içim OSC degeri tanımlanmalıdır. Tek yonga RS-232 düzey çeviricileri yaygın ve ucuz olduğu halde piclerin ğelişkin I\O sipesifikasyonları sayesinde hemen hemen bütün uygulamalar düzey çevirici kullanmadam çalıştırılabilir. Akıl sınırlayıcı bir dirençle baglantılı bir tersinmiş ğiriş (N 300..N 9600)kullanmak yeterlidir.









SERIN 1,N2400,[‘'A''],B0         ‘PİN1'den A karakterini bekler,alınca
                                                    Â‘sıradaki karakteri BO koyar.

66 SERIN2
SÖZDİZİMİ
SERIN 2 DATAPİN (\FLOWPİN),MODE,(PARİTYLABEL,)(TİMEOUT,LABEL,)[ITEM..]
AÇIKLAMA
Datapin üzerinden standar asenkron seri formatta 1 yada daha fazla sayıda Item alır BS2 serın komutunun benzeridir. Datapin otomatık olarak ğiriş olurFlowpin tercihan kullanılır ve otomatik olarak çıkış olur. Her ikiside 0 15 arası 1 sabit 0-15 arasında degerler alabilen bir değişken(BO B1vb..) yada bir bacağın (PORT.0 ĞİBİ )adı olabilir flowpin opsiyonel olarak seri veri alış verişinde akış kontrolü amacıyla kullanılmaktadır. Kullanımı halinde her karakterin iletimine olanak tanıyacak şekilde etkin durum degerine otomatik olarak ayarlanır. Söz konusu etkin durum degeri verinin mode ile ğösterilen polaritesiyle belirlenir. 
MODE ‘UN kullanım amacı BAUD hızını ve seri transferin çalışma parametrelerini belirlemektir. 0-12 bitleri BAUD hızını anlatır. Bu bitler bit hızını msn/20 şeklinde belirtir. Burada verilen BAUD hızı (1000000\BAUD)-20 eşitliğinden elde edilebilir 13 no'lu bir parite durumunu ğösterir bit 14 ise tersinmiş/doğru düzey ifade eder. Bit 15 degerlendirme dışıdır. Standart BAUD hızları tabloda ğösterilmektedir.









Bit 13,parite(13=1)vaya parite yok (13=0)şaçiminde kullanılır. Normalde seri iletimlerde veri 8N1(8 veri biti,parite yok,1 stop   biti)formatındadır parite var ise veri alımı 7E1(7veri biti çift parite ,1 stop )formatında ğerçekleşir. Pariteyi ‘'çift''yerine ‘'tek''yapmak için tanıma ihtiyaç duyulur:
DEFINE  SER2_ODD  1
 Bit 14 İle  Veri Ve Akış Kontrol  Bacaklarının düzey seçimi  yapılır. bit 14=0 ise alınan veri  rs-232 sürücüleriyle  kulanıma yönelik olarak "doğru" formdadır.bit 14=0  veri  alımı  tersinmiş formda yapılır.mode örnekleri şöyledir.

Mode=84	(9600baud,parite yok,doğru)
Mode =16780	(2400baudparite yok,tersinmiş)
Mode=27889	(300 baud,çift parite,tersinmiş)

Paritylabel/(parite etikenti),kötü pariteli bir karakter bir karakter alınması halinde proğram akışının yöneleceği satırı işaret eder. Anacak bunun için bit 13=1 oalarak belirlenmiş olmalıdır.
Timeout zaman aşımı degeri ile label,belli bir zaman içinde karakter alınmaması halinde de proğramın devam etmesi isteniyosa kullanılır. Seri ğiriş bacağı msn olarak ölçülen zamanaşımı süresince aylak durumda kalırsa,proğramın akışı label (etiket)ile belirtilen satıra gider.
Veri biti adedi 8'den farklı (veya pariteli7)olacaksa bunun tanımlanması ğerekir.SER2_BITS veri bitlerden sayısı tanımlanmak kaydıyla 4 ile 8 arasında olabilir. Tanımlandığı takdirde ön-ayar degeri 8 olur. Paritenin etkileştirilmesi belirlenen sayıda bit kullanımı saglar.
SER2_BITS2in 9 olarak tanımlanması 8 bit okumaya,9 .parite bitiyle birlikte yazıma imkan verir.

Parite devre dışı ise (ön-ayar durumu):
DEFINE SER2_BITS 4                     ‘SERIN2 VE  SEROUT2 VERİ BİTLERİ 4'E AYARLI
DEFINE SERS2_BIT5                      Â‘SERIN2 VE SEROUT2 VERİ BİTLERİ 5'E AYARLI
DEFINE SERS2_BIT6                     ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 6E AYARLI
DEFINE SERS2_BIT7                 ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 7E AYARLI	
DEFINE SERS2_BIT8                     ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 8E AYARLI

Parite eklenirken

DEFINE SERS2_BIT5                      Â‘SERIN2 VE SEROUT2 VERİ BİTLERİ 5'E AYARLI
DEFINE SERS2_BIT6                     ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 6E AYARLI
DEFINE SERS2_BIT7                     ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 7E AYARLI
DEFINE SERS2_BIT8                     ‘SERIN2 VE SEROUT2 VERİ BİTLERİ 8E AYARLI

SERIN2 çok çeşitli veri belirtecinin destekler. Bunlar çeşitli ğiriş formatları arz edecek şekilde harmanlanabilir. Ve tekil bir SERIN2 tümcesine rahatça uyabilirler.
          Durum belirtici                                           işlem
BIN(1..16)                                                        Binary rakam alır
DEC(1...5)                                                       onlu rakam alır
HEX(1..4)                                                       onaltılı rakam alır
SKIP n                                                           alınan n karakteri hesaba katmaz
STR arrayVar\n{\c}                                       c ile biten n karakterli strınğ alır
WAIT ( )                                                        bir karakter dizisi bekler
WAITSTR ArrayVar{\n}                                n uzunlukta bir strınğ bekler

1)	bir değişkenin başında BIN varsa ve alınan ASCII karakterler ğeçerli ikili sayıların ASCII karakterleri ise(‘0've ‘1'),ardışık karakterlerin ikili karşılığı değişkene aktarılır. Örneğin komutta BIN B0 ifadesi kullanılırsa ve datapin den birbirinin peşi sıra ‘1000!karakterleri alınırsa B0 değişkenine bu karakterlerinin ikili karşılığı olan 8 degeri (B0=00001000)atanır
2)	bir değişkenin başında DEC varsa ve alınan ASCII karakterler ğeçerli onlu sayıların ASCII karakterleri ise(‘0'..'9' arası)ardışık karakterlerin onlu karşılğı değişkene aktarılır.örneğin komutta DCE B0 ifadesi kullanılırsa datapinden  birbirinin peşi sıra ‘123'karakterleri alınırsa B0 değişkenine bu karakterlerinin onlu karşılığı olan 123 degeri (B0=01111011)atanır
3)	degişkenin başında HEX varsa ve alınan ASCII karakterler ğeçerli onaltılı sayıların AASCII karakterleri ise (‘0'..'F' arası)ardışık karakterlerin onaltılı karşılığı değişkene aktarılır.örneğin komutta HEX B0 ifadesi kullanılırsa ve data pinden birbirinin peşi sıra ‘FE'karakterleri alınırsa B0 değişkenine bu karakterlerin onaltılı karşılığı olan FE degeri (B0=11111110)atanır.
4)	SKIP kullanılırsa onu takip eden degerin ğösterdiği sayıda karakter pas geçilir.SKIP 4 ,4 karakterin ihmal edilleceğini alınmayacağını söyler.
5)	STR'yi izleyen bayt dizi değişkeni bir karakter dizisi alır.alınacak strinğ in uzunluğu n degeri ile yada posiyonel olarak karakter dizisinin sonuna konan c karakteri ile belirlenir.
6)	Alınacak veri dizisi için bir vaya birkaç adet niteleyici kullanılabilir.bu nitaleyiciler WAIT komutundan sonra kullanılan parantez içine sırayla yaılmalıdır.SERIN2 bunları sırayla ve veriyi almadan önce almalıdır.aksi takdirde yani alınan bayt ın niteleyici listesinin sıradaki bayt ın uymaması halınde süreç yeniden başlar ve bir sonraki bayt niteleyici listesindeki ilk elemanla kıyaslanır.bir niteleyici sabit değişken yada STRINĞ sabit olabilir.STRINĞ deki her karakter münferit bir niteleyici olarak ğörülür.
7)	WAITSTR, WAIT  gibidir.belli uzunlukta bir strıng dizisi  niteleyici  olarak kullanılmaktadır.alınacak strıng'in uzunluğu için opsiyonel  olarak n değeri kullanılabilir.
WAIT ve  WAITSTR  niteleyicilerinin  karşılanması ile SERIN2  ile  alınan  veriler ilgili Item2a  konulur.değişken isminin  yalın olarak  kullanılması  halinde değişkenin içeriği alınan  Ascıı  karakteri  değeri olur.değikenin  başında  BIN  , BEC  veya HEX  bulunuyorsa bu  kez az önce  anlatılan  işlemler  yapılır ve değişkene  buradan çıkan  sonuç koyulur.onlu değerin ilk  hanesine kadar alınan  rakam olmayan terimler göz ardı  edilir.aynı şekilde onlu değerin sonundaki  rakam olmayan terimler  göz ardı edilir.BIN  ;DEC ve HEX  (bitişik)bir sayı takip edebilir.normalde bu belirteçler  girişde ne kadar rakam varsa  hepsini  alırlar.ancak  belirteci  izleyen bir sayı  varsa SERIN2 o kadar  haneli sayıyı  alır. Diğer ilave rakamları   atlar.
SERIN2 bit zamanlaması üretirken osilatörün 4 mhz olduğunu varsayar. Farklı  osilatör ile BAUD  hızı zamanlamasının uyumu  için OSC  değeri tanımlanmalıdır.4mhz  daha yüksek bir osilatör hızı  9600  BAUD  ve  daha üstünde güvenilir bir operasyonda gerekecektir.
Tek yonga RS –232 düzey  çeviricileri  yaygın ve ucuz  olduğu  halde pıclerin gelişkin I/0  spesifikasyonları sayesinde hemen hemen bütün uygulamalar  düzey  çevirici  kullanmadan çalıştırılabilir.akım sınırlayıcı  bir dirençle bağlantılı bir  tersinmiş TTL  (MODEBIT 14=1)  kullanmak yeterlidir.(kullanılan RS-232  portu  devreyi tolere  edebilir.)
SERIN2, 12 bit pıclerce (ram ve istif sınırlamaları  nedeniyle )desteklenmez.











SERIN2  1,16780,[WAIT("A"),B0]	‘pın1'de A karakterlerini bekle
	‘alınca sıradakini  B0'a koy
SERIN2  PORTA.1,84,[SKIP  2,DEC4,B0]	‘2 karakteri  geç ,sıradaki  4
	‘haneli  karakter dizisini al
	‘ve karşılık gelen onlu değeri
	‘B0'a aktar.seri veri Porta.1
	‘üzerinden alınmaktadır.




67)SEROUT
SÖZDİZİMİ
SEROUTPIN –MODE  [ITEM{,ITEM...}]
AÇIKLAMA
8N1 standart  asenkron seri formatla  pın'e veri  yollar.pın otomatik  olarak  çıkış  yapılır.pın  0-15  arasında  bir sabit  0-15  arasında değerler  alabilen bir değiken  (B0,B1)veya bir bacağınadı  olabilir.(portb.0)
mode'lar  (T2400)örneğin MODEDEFS.BAS'ta tanımlıdır. Bunlar programın  başına  eklenecek
ınculide  "modedefs.bas"
satırıyla  programa dahil  edilebilir. Bu dosyaya dahil etmedende  mode  değerlerini  kullanmak  mümkündür.


























SEROUT  3 farklı  veri tipine  olanak tanır. Bunlar birbirine  harmanlanabilir ve  tek bir SEROUT   tümcesinde serbestçe  kullanılabilir.
1)bir strıng  sabit harf  karakterler strıngi olarak  çıkış demektir.
2)sayısal bir değer (değişken ,sabit)karşılık gelen ASCII  değeri  yollar.örneğin 13<enter>tuşunu  simgeleyen ASCII  değer 10  ise  satır beslemeyi  simgeleyen değerdir.
3)öncesinde (#)  gelen bir sayısal değer  onlu değerinin  ASCII  karşılığını  gönderir.örneğin program akışında W0=123  olmuşsa  komutta  yer alan #W0  ifadesi  bu  veriyi  bayt  yerine 123  onlu değerninin ASCII  karakterleri  olan  "1","2","3", karakterleri  olarak  toplam  3 baytta  gönderecektir.
SEROUT bit  zamanlaması  üretirken  osilatörün 4  mhz olduğunu  varsayar. Farklı  osilatörün BAUD  hızı  zamanlaması ile  uyumu için OSC  değeri  tanımlanmalıdır. Bazı  durumlardaki  SEROUT  talimatlarındaki karakterler   alıcının bazısını  kaççırmasına  sebep  olacak   düzeyde  hızlı  iletilebilir. Bundan korunmak  amacıyla  seri  çıkışlar için bazı   tanımlamalar  yapılabilir. Böylece  iletilecek  karakterler arasına  65535  mikro saniyeye  (65.535milisaniye)varan  gecikmeler  koymak  mümkündür.
DEFINE   CHAR_PACING  1000	‘karakterler  arasında  1milisaniye  gecikme
Tek yonga RS_232 düzey  çeviricileri yaygın  ve  ucuz  olduğu halde, PIC'lerin  gelişkin  I/Q  spesikasyonları ile uygulamalar  düzey  çevirici  kullanmadan çalıştırılabilir. Akım sınırlayıcı bir dirençle  bağlantılı bir tersinmiş TTL  (N300...N9600)kullanmak  yeterlidir.(kullanılan RS-232  portu  kısa devreyi  tolere edebilmelidir.)
















SEROUT  0,N2400,[#B0,10]		‘pın0'a B0'ın onlu  karşılığını oluşturan
					‘rakamların  ASCII  değerleri sonuna satır  besleme
					‘karakterleri de  eklenerek  gönderilir.
68)SEROUT2
SÖZDİZİMİ 
SEROUT DATAPIN {\ FLOWPIN},MODE,{PACE,}{TİMEOUT,LABEL,}[ITEM..]
AÇIKLAMA
DATAPIN  üzerinden standart  asenkron  seriformatta bir  ya da daha fazla sayıda  ıtem gönderilir. Data  pın otomatik olarak	 çıkış olur .  flow pın tercihan  kullanılır.ve  otomatik  olarak  giriş  yapılır.her ikiside  0-15 arasında bir  sabit  0-15 arasında değerler  albilen bir değişken (B0,B1)yada  bir bacağın  (PORTB.0)adı  olabilir.
Flowpın opsiyonel olarak seri  veri  alışverişinde   akış  kontrolü  amacıyla  kullanılmaktadır.kullanımı  halinde  hatasız durum değerini almadıkça  seri veri  gönderilmez. Söz konusu  etkin  durum değeri verinin  MODE  ile gösterilen polaritesi ile belirlenir.
TIMEOUT  zaman aşımı değeri  ile  label FLOWPIN'in belli bir zaman içinde  etkin  durum değerine  geçmemesi  halinde  programın devam etmesi isteniyorsa  kullanılır. FLOWPIN  milisaniye  cinsinden olarak  ölçülen zaman aşımı süresince devre  dışı kalırsa programın  akışı  LABEL  ile belirtilen  satıra  gider.
Bazı  durumlarda SEROUT2 talimatlarındaki  karakterler  alıcının bazılarını kaçırmasına  sebep olacak düzeyde  hızlı iletilebilir.ayrıca  akış  kontrolünde ekstra  bir bacak  kullanımı   da gereksiz  görülebilir.tercihe  bağlı  olarak PACE ile karakterler arasına  gecikme koymak mümkündür.PACE  ile iletilecek  karakterler arasına 65535 mikro saniyeye  (65.535milisaniye)kadar  gecikme konulabilir.
MODE  ile BAUD  hızı ve seri transferin çalışma parametreleri  belirlenir.0-12 bitleri  BAUD  hızını  gösterir. Bu  bitler bit  hızını mikro saniye –20 şeklinde  belirtir. Burada verilen BAUD  hızı  değeri  (1000000/baud)-20 eşitliğinden  elde edilebilir. 13no'lu bit  parıte  durumunu  gösterir.bit 14 ise tersinmiş /doğru düzey ifade  eder.bit  15  sürülü veya  açık  olma seçimi  içindir.standart  baud hızları için SERIN2'deki baud tablosuna  bknz.
Bit  13 parıte (13=1)veya  parıte yok (13=0)  seçiminde  kulanılır.normalde  seri iltimlerde 8N1 (8  veri biti , parite yok,  1stop  biti) formatındadır. Parıte  var ise  veri  alımı 7E1 (7 veri  biti çift parite ,1 stop)formatında  gerçekleşir. Parıteyi "çift" yerine "tek" yapmak için tanıma   ihtiyaç  duyulur:
DEFINE  SER2_ ODD  1
Mode örnekleri  şöyledir:
Mode=84	(9600  baud ,parıte yok,doğru,daima sürülü)
Mode 16780	(2400 baudd,parıte yok,tersinmiş sürülü)
Mode=60657	(300 baud,çift parıte ,tersinmiş,açık)
Veri  biti  adedi 8'den faklı (veya  parıteli 7)olacaksa bunun tanımlanması gerekir.SER2_BITS veri bitlerinin sayısı tanımlanmak  kaydıyla 4 ile 8 arasında olabilir tanımlanmadığı takdirde ön ayar değeri 8  olur.parıtenin  etkinleştirilmesi  belirtilen sayıda bir kullanımı  sağlar.
SER2_BITS'in 9  olarak tanımlanması 8 bit okumaya ,9 parıte biti ile birlikte yazıma imkan verir.
Parıte devre dışı  ise (ön ayar durumu ):
DEFINE  SER2 _BITS  4			‘serın2 ve serout veri bitleri 4'e ayarlı
DEFINE  SER2 _BITS  5			‘serın2 ve serout veri bitleri 5'e ayarlı
DEFINE  SER2 _BITS  6			‘serın2 ve serout veri bitleri 6'e ayarlı
DEFINE  SER2 _BITS  7			‘serın2 ve serout veri bitleri 7'e ayarlı
DEFINE  SER2 _BITS  8			‘serın2 ve serout veri bitleri 8'e ayarlı
Parıte etkinken:
DEFINE  SER2 _BITS  5			‘serın2 ve serout veri bitleri 5'e ayarlı
DEFINE  SER2 _BITS  6			‘serın2 ve serout veri bitleri 6'e ayarlı
DEFINE  SER2 _BITS  7			‘serın2 ve serout veri bitleri 7'e ayarlı
DEFINE  SER2 _BITS  8			‘serın2 ve serout veri bitleri 8'e ayarlı
SEROUT2  çokçeşitli veri belirtecini  desteler .bunlar çeşitli  giriş formatını arz edecek şekilde harmanlanabilir. Ve tekil bir  SEROUT2 tümcesine  rahatça uyabilirler.
Durum belirteci			işlem
{I} {S}BIN {1..16}			ikili  rakam  gönderir.	
{I} {S}DEC{1..5}			onlu rakam  gönderir.	
{I} {S}HEX{1..4}			onaltılı rakam  gönderir.
REP c/n				c karakterini n kez tekrarlar
STRArrayVar{\n}			n karakterli strıng gönderir

1)	1)      bir string sabiti harf karakterlri stringi olarak gönderilirler.
2)	2)      Sayısal değerler (sabit ya da değişken )mmmukabil ASCI  karakterler ile gider.
3)	3)      Başında BIN bulunan bir sayısal değer için  odeğerin ikili  karşılığının ASCII karakterleri yollanır. Örneğin komutta BIN  B0 ifadesi  kullanılırsa  ve B0değişkeninin ddeğeri program akışı içinde 8 olursa DATAPIN'den birbirinin  peşi sıra "1000" karakterleri gönderilir.
4)	4)       Başında DEC  bulunan bir sayısal değer için o değerin onlu karşılığının ASCII  karşılığı yollanır. Örneğin komutta DEC  B0  ifadesi  kullanılırsa ve B0değişkeninin değeri program akışı  içinde 123 olursa datapın'den birbirinin peşi  sıra "123" karakterleri  gönderilir.
5)	5)      Başında HEX  bulunan  bir sayısal değer için o değerin onaltılı karşılığının ASCII  karakterlerini  yollar. Örneğin komutta  HEX  B0 ifadesi  kullanılırsa  ve B0 değişkeninin  program akışı  içinde 254 olursa datapın'den birbirinin peşi sıra "FE" karakterleri  gönderilir.
6)	6)      REP  ile takip eden "c" gibi  karakterlerin n defa gönderimi  yapılır.örneğin REP"0"\4 için "0000"gidecektir.
7)	7)      STR ile nelemandan oluşan bir strıng dizisi  gönderilir. Strıng  uzunluk değeri olan n'in kullanılması  opsiyoneldir.
BIN ,DEC, HEX  başına veya sonuna çeşitli parametreler koymak imkan dahilindedir.  Örneğin bu belirteçlerin başına konan    ı , göstergeli anlamına gelir.bu durmda ççıkışın başına "%","#"veya "$" olacaktır.bunlar değerin sırası ile ikili onlu veya onaltılı olduğunu  işaret edecektir.
S ile başlayan bir ifade  terimin işaretli  (-)  olduğunu anlatır. Bu durumda verininen  yüksek mertebeli biti"1" ‘dir.böylece eksi sayıların  iletimi sağlanır. Bu noktada  unutulmaması gereken şey  şudur:PBP'de  matematik işlemler işaretsizdir. Dolatısı ile işaretsiz bir işlem örneğin B0=9-10'da olduğu gibi işaretli bir sonuç (-1)  verebileceği için DEC  B0'ın sonucu "255"  olur.SDEC  B0  ile bunu  düzeltmek mümkündür.bunun  sonucu ise"-1"  olacaktır.
BIN,DEC,HEX  Ã®n (bitişik) bir sayı  olabilir.bunlar gönderilecek değerin hanesini  gösterir.SEROUT2 böyle bir durumda tamamlayana  kadar başına 0 ekleyerek bu sayıda hane  gönderecektir.örneğin BIN6  8 ile "001000" gitmesinde  olduğu  gibi .öte yandan ve BIN2  8  ile "00" gider.yani  ilk iki terim olan 10 kırpılır.
 Bu belirteçlrin hepsi  aynı anda kullanılabilmetedir.:ISDEC4  B0.
SEROUT2'de bit zamanlaması  üretiminde osilatörün 4mhz olduğu varsayılılr. Farklı osilatörün baud hızıyla zamanlama uyumu OSC değerinin tanımlanması gerekir.4mhz'ten daha yüksek bir osilatör hızı 9600baud ve daha üstü  için güvenilir  operasyonlarda gerekir.
Tek yonga RS-232 düzey  çeviricileri yaygın ve ucuz olduğu halde PIC'lerin gelişin I/Q  spesifikasyonları sayesindehemen hemen bütün uygulamalar düzey    çevirici  kullanmadan  çalıştırılabilir. Akım sınırlayıcı bir dirençle bağlantılı bir tersinmiş TTL (mode bit 14=1)kullanmak  yeterlidir.(kullanılan RS-232 portu kısa devreye  tolere  edilebilmelidir.9
12 bit pıcler RAM  ve istif sınırlamaları  nedeniyle SEROUT2'yi desteklemez.   


































 

 











SEROUT2 0 16780 [DEC   B0, 10]	‘PIN0 ‘dan2400 baud ‘da B0'ın onlu
	‘değerinin rakamına karşılık
	‘gelen ASCII  karakterler ve 				‘satır besleme gönderiliyor.
SERIN2  PORTA.1 ,84,["B0=",IHEX4  B0]	‘"B0="  ve B0'ın ikili değerinin 			‘rakamlarına karşılık 	
			‘gelen ASCII  karakterler v 
			‘satırbesleme gönderiliyor.
			‘gönderilenin ikili sistemde 
			‘olduğu başına ı konarak								‘gösteriliyor. Veri, PORTA.1 ‘den
			‘9600 baud ‘da gönderilir.
69)SHIFTIN
SÖZDİZİMİ
                SHIFTIN data  pın  ,clock pın mode,[var{\bits}...]
Açıklama:
 Clock pın bacağındaki saat sinyali ile  senkronize  olacak şekilde 	DATA  PIN  deki  bitleri kaydırır ve alınan veriyi  VAR'a koyar. DATA  PIN  ve  CLOCK    PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın adı olabilir.(örneğin porta.0)
\bits kaydırılacak bit sayısını gösterir. Kullanımı tercihe bağlıdır. Belirtilmemesi  halinde değişken bitinden bağımsız olarak 8 bit kaydırma yapılır.öte yandan kaydırılan bitler  kullanılan MODE'a göre LSB  yada  MSB  seçilmelerinden bağımsız olarak   daima düşük bitlerdeki  mertebedeki  bitlerden oluşmaktadır.
Mode'alar MODEDEFS.BAS'ta belirtilirler."ınclude "komutu ile dahil edilebililer.	
 Ayrıca mode numaralarını  doğrudan kullanmak mümkündür. Bu dosyanın dahil edilmesi gerekmez.0-3 arası mode  larda saat sinyali boştayken lojik seviyesi düşükdür. Komut biti kaydırmak için saatin lojik seviyesini  yükseğe getirir.biti kaydırır ve lojik seviyesini yeniden düşüğe getirir.
4-7 arası mode larda  saat sinyali boştayken lojik seviyesi yüksektir. Komut biti kaydırmak için saatin lojik seviyesini düşüğe getirir.biti kaydırır ve satin lojik seviyesini  yeniden yükseğe getirir.























 Kaydırma saati  osilatöre bağlı olarak 50khz civarında çalışır.aktif durum minimum 2 mikro saniyeye oturtulmuştur.saat hızını düşürmek amacıyla bunu 65535 mikrosaniyeye kadar ilave yaparak uzatmak mümkündür.minimumm ilave gecikme PAUSEUS  zamanlaması ile tanımlanır.12 bit pıc  lerde tanımlama yapılmamaktadır. Ötnekte 100 mikro saniye ek yapılarak saat yavaşlatılmaktadır.
DEFINE  SHIFT _PAUSEUS  100
SHIFTIN 0,1,MSBPRE, [b0,B1\4]
70)SHIFTOUT
SÖZDİZİMİ
SHIFTOUT  datapın ,clock pın ,mode,[var{\bits}...]
Açıklama
Clock pın bacağındaki saat sinyali ile  senkronize  olacak şekilde 	VAR  deki  bitleri kaydırır ve alınan veriyi  DATAPIN 'a kaydırır. DATA  PIN  ve  CLOCK    adı PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın olabilir.(örneğin porta.0)
\bits kaydırılacak bit sayısını gösterir. Kullanımı tercihe bağlıdır. Belirtilmemesi  halinde değişken bitinden bağımsız olarak 8 bit kaydırma yapılır.öte yandan kaydırılan bitler  kullanılan MODE'a göre LSB  yada  MSB  seçilmelerinden bağımsız olarak   daima düşük bitlerdeki  mertebedeki  bitlerden oluşmaktadır.
Mode'alar MODEDEFS.BAS'ta belirtilirler."ınclude "komutu ile dahil edilebililer.her mode'nin adı yoktur.	
 Ayrıca mode numaralarını  doğrudan kullanmak mümkündür. Bu dosyanın dahil edilmesi gerekmez.0-3 arası mode  larda saat sinyali boştayken lojik seviyesi düşükdür. Komut biti kaydırmak için saatin lojik seviyesini  yükseğe getirir.biti kaydırır ve lojik seviyesini yeniden düşüğe getirir.
4-7 arası mode larda  saat sinyali boştayken lojik seviyesi yüksektir. Komut biti kaydırmak için saatin lojik seviyesini düşüğe getirir.biti kaydırır ve satin lojik seviyesini  yeniden yükseğe getirir.


















Kaydırma saati  osilatöre bağlı olarak 50khz civarında çalışır.aktif durum minimum 2 mikro saniyeye oturtulmuştur.saat hızını düşürmek amacıyla bunu 65535 mikrosaniyeye kadar ilave yaparak uzatmak mümkündür.minimumm ilave gecikme PAUSEUS  zamanlaması ile tanımlanır.12 bit pıc  lerde tanımlama yapılmamaktadır. Ötnekte 100 mikro saniye ek yapılarak saat yavaşlatılmaktadır.
DEFINE  SHIFT _PAUSEUS  100
SHIFTOUT   0,1,MSBRE,[B0,B1]
SHIFTIN PORTA.1,PORTA.2,1[WORDVAR\4]
71)SLEEP
SÖZDİZİMİ
SLEEP PERİOD
AÇIKLAMA
Entegreyi perıod ile belirtilen süre boyunca düşük güç modund tutar. 16 bitlik bir değerdir.gecikmeler 65535 saniyeye çıkartılabilir.
SLEEP  watchdog zaman sayarını kullandığı için  osilatör frekansından etkilenmez. Ortam sıcaklığ ve  cihazın özelliklerine göre değişebilen  çözünürlük 2.3 saniye civarındadır. Farklılığın sebebi  PIC'in watchdog zaman sayar resetini  çalıştırmasıdır. Böylece dahili yazmaçlarda yeniden ön değerlere set edilir. Bu değerler programın gereklerine bağlı olarak değişkenlik gösterecektir.SLEEP'i  kalibre etmeksizin çalıştırarak sorundan kurtulmak mümkündür.
SLEEP  60  			‘1 dakika boyunca uyu
72)SOUND
SÖZDİZİMİ
SOUND    PIN [NOTE ,DURATİON{,NOTE,DURATION.....}]
AÇIKLAMA
pın ile gösterilen bacakta  bir ton veyahut beyaz gürültü üretir. Kendiliğinden çıkış olan PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın olabilir.(örneğin porta.0)
 note değeri "0" olduğunda sessizlik elde edilir.1- 127 değerler arası nota 128-255  arası değerler ise beyaz gürültü oluşturur.nota ve beyaz gürültü artan özelliklerdir.yani 1-127 düşük frekanslı 127-255  yüksek frekanslıdır. Note 1'in frekansı 78.74hz,127'nin  10000hz'dir.
DURATION  ile notanın tınlama süresi verilir.0-255 arasında bir değer olabilir.ardışık iki değer arasındaki artış değeri 12 milisaniye civarındadır.gerek NOTE  gerek DURATION sabit değildir.











SOUND  TTL  düzeyli kare dalga çıkışı verir.PIC'lerin I/Q  karakteristikleri sayesinde kapasitör üzerinden hoparlör sürülebilmektedir. Kapasitörün değerinin  ilgili frekanslar ve hoparlör  yükü temelinde belirtilmesi gerekir.pıezo hoparlörler doğrudan sürülebilir.
SOUND  PORTB.7,[100,10,50,10]   ‘pın7'ye ardışık iki ses gönderir.
73)STOP
SÖZDİZİMİ
STOP
AÇIKLAMA
Programın sonsuz bir döngüye girmesine sebep olur.ancak bu durumda entegre düşük güç moduna girmediği gibi  aynı tempoda çalışmaya devam eder.
74)SWAP
SWAP  VAR1,VAR2
AÇIKLAMA
İki değişkenin değerlerini birbirine aktarır. Bunlar bir bayt veya word boyutlu olabilirler. SWAP  kullanılmaması halinde aracı bir değişkene ihtiyaç doğar. Sabit indexli dizi değişkenler SWAP'da kullanılabilirler.(değişkenindeksliler kullanılmaz.)
B0 ile B1'in içeriklerini  karşılıklı olarak değiştirmek için  ya
Temp=B0
B0=B1
B1=temp
Ya da bunun yerine
SWAP  B0,B1
Kullanılabilir.
75)TOGGLE
SÖZDİZİMİ
TOGGLE PIN
AÇIKLAMA

 pın ile gösterilen bacağın durum değerni  tersindirir. Karşılıkgelen bacak kendiliğinden çıkış olur.  PIN   0..15 arasıbirsayı 0..15 arasıbirsayı  içerenbir değişken  (örneğin B0,,B3)   veya   bir bacağın olabilir.(örneğin porta.0)
LOW  0		‘pın0 lojik düşük
TOGGLE  0	‘pın0 yükseğe  çevrildi
76)USBIN

 sözdizimi
usbin endpoınt buffer  countvar label
açıklama 
 end poınt ile gösterilen uç noktaya  yönelik hazır USB verisini  buffer ile işaret edilen tampona  koyar.
		Burada  bufer veriyi tutabilecek uzunlukta bir bayt dizi  olmak durumundadır.bu tampona transfer dilecek bayt adedi COUNTVAR'da yer alır. Veri olmaması halinde  porgram akışının yöneleceği satır label ile belirlenir.
Bu yapı sadece PIC16C745  ve Pıc16C765  gibi  yonga üzerinde   USB  potu olan  entegrelerde kulanılır.
Mıcrochıp  USB  kütüphaneleri program  örnekleri ile beraber  PIC  BASIC PRO^nun USB  alt klasöründe yer almaktadır.USB  programlarının çalışması için ek  dosyalara ihtiyaç vardır. Bunların ir kısmının uygulamaya göre deitirilmesi  şarttır.
USB  haberleşmesi  gerek senkron  (SHIFTIN  SHIFTOUT)  gerekse asenkron (SERIN  SEROUT)haberleşmeye göre çok daha karmaşıkdır. Konuyla ilgili daha  ayrıntılı bilgi  için JAN  axELSON'un   HER  YÖNüyle  USB  kitabı  bu konudaki  kaynakalrınnbaşında  gelmektedir.
USBIN  1,buffer,cnt,idleloop		‘uçnokta1'den alınıan ve cnt ile ifade
						‘edilen sayıda baytı buffer'e aktarır.
77)USBINIT
SÖZDİZİMİ
USBINIT
AÇIKLAMA
Usb  haberleşmesi  ile çalışan bir programın ilk tümcelerinden biri USBINIT  olmak zorundadır.PIC'deki  USB  kısmı  bu  komutla başlatılabilir.ardından USB'nin konfigüre edilmesi  ve etkinleşmesi beklenir.
Bu yapı sadece PIC16C745  ve Pıc16C765  gibi  yonga üzerinde   USB  potu olan  entegrelerde kulanılır.
Mıcrochıp  USB  kütüphaneleri program  örnekleri ile beraber  PIC  BASIC PRO^nun USB  alt klasöründe yer almaktadır.USB  programlarının çalışması için ek  dosyalara ihtiyaç vardır. Bunların ir kısmının uygulamaya göre deitirilmesi  şarttır.
USB  haberleşmesi  gerek senkron  (SHIFTIN  SHIFTOUT)  gerekse asenkron (SERIN  SEROUT)haberleşmeye göre çok daha karmaşıkdır. Konuyla ilgili daha  ayrıntılı bilgi  için JAN  axELSON'un   HER  YÖNüyle  USB  kitabı  bu konudaki  kaynakalrınnbaşında  gelmektedir.
USBINIT
78)USBOUT
SÖZDİZİMİ
USBOUT ENDPOINT,BUFFER,COUNT, LABEL
AÇIKLAMA
Buffer ile belirtilen dizi deişkendeki  bayt sayısını USB  uçnoktasına işret eden ENDpoınt'gönderir.iletimin ertelenmesi nedeniyle  sözü edilen dizi değişkenin yani tamponun yeterli büyüklükte  olmaması halinde veri  transferi  yapılamaz. Ve programın akışı  label ile belirtilen satıra atlar.
USB  haberleşmesi  gerek senkron  (SHIFTIN  SHIFTOUT)  gerekse asenkron (SERIN  SEROUT)haberleşmeye göre çok daha karmaşıkdır. Konuyla ilgili daha  ayrıntılı bilgi  için JAN  axELSON'un   HER  YÖNüyle  USB  kitabı  bu konudaki  kaynakalrınnbaşında  gelmektedir
USBOUT  1,buffer,4,outloop			‘buffer'deki  4 bayt ,uçnokta1'e gider.

79)WHILE...WEND
SÖZDİZİMİ
WHILE
KOŞUL
TÜMCELER
WEND
AÇIKLAMA
Koşulun doğru olması halinde tümceler tekrarlar. Koşul karşılaanmadığında döngü sona erer.ve wend'den sonraki komuttan devam  eder. Koşul herhangi bir karşılaştırmaifadesi olabilir.
İ=1
WHILE
1<=10
serout  0 N2400,["no:",#i,13,10]
i=i+1
WEND
80)WRITE
SÖZDİZİMİ
WRITE ADRESS,VALUE
AÇIKLAMA
yonganın belirtilen adress'teki yonga üzeri  eeprom ‘una bayt değeri  (VALUE) yazar. Haliyle  yalnızca yonga üzeri  EEpROMLU  Pıc'lerle kullanılabilir.(PIC16F84,PIC16C84,PIC16F87X.)
WRITE çalışması sırasında yonganın Eeprom'una değer yüklemek için yazar. Bu değerler programlama sırasında yüklemek için Data  ve  EEPROM   tümceleri kullanılmalıdır.
WRITE  kendinden zamanlamalıdır. PIC  üzerindeki icrası 10 milisaniye kadar sürer.
 Programda kullanılan  kesmeleri  WRITE'ı yürütmeye  koymadan önce kapatmak gerekir.(dikkat!:kesmeleri  DISABLE  komutu ile devre dışı bırakamazsınız. O yüzden pıc'in kesme kontrol yazmacına müdehale ederek kesmeleri  devre dışı bırakmalısınız.  )Wrıteçalışırken  Meydana Gelecek Kesme  Sonucu  Bozar.Bu komut yongada I kare C arabirimli seri  EEPROM  olan 12CE67x ve 16E62x  gibi  cihazlarda çalışmaz. Bu durumda 12CWRITE'e başvurulur.
WRITE   5,B0			‘5 adresteki  EEPROM'a B0 gönderir.
Bir WORDd yazarken her bir baytı ayrı  yazmak şarttır.
W  var  word
WRITE  0,W.BYTE0
WRITE 1,W.BYTE1
81)WRITECODE
SÖZDİZİMİ
WRITECODE  ADRESS  ,VALUE
AÇIKLAMA
 WORD boyutlu bir VALUE  ile belirtilen değeri  ADRESS  ile gösterilen program bellek adresine ekler. 
PIC16F87x ‘lerde çalışma esnasında kod yazımı ve okuması yapılabilir. Ancak kendğini  değiştiren kodun  yazımı risklidir.aktif program belleğine  yazım yapmamak için çok  hassas davranmak gerekir. Bundan dolayı hangi  bellek adresinde  aktif program kodlarının bulunduğunu  öğrenmek için  assemlerin ürettiği liste dosyası(*.LST) incelenebilir. Programda kullanılan  kesmeleri  WRITECODE'ı yürütmeye  koymadan önce kapatmak gerekir.(dikkat!:kesmeleri  DISABLE  komutu ile devre dışı bırakamazsınız. O yüzden pıc'in kesme kontrol yazmacına müdehale ederek kesmeleri  devre dışı bırakmalısınız.  )Wrıteçalışırken  Meydana Gelecek Kesme  Sonucu  Bozar
WRITEcode  ile cihazın programlanması esnasında yazım yapabilmek için  flash program yazımlarının PIC konfigürasyonunda  etkinleştirilmiş olması  şarttır.
WRITECODE  100,W			‘program  belleğinde 100 nolu (0x0064)adrese 
                                                           ‘w değişkenindeki proğram kodu yazılır.
82) XIN 
Sözdizimi
Xın Datapin,Zeropin,(Timotin-label,][Var(,...)
AÇIKLAMA
X-10 protokalunu deestekleyen cihazlarda bilği alımında kullanınlaktadır.çeşitli markalara ait oldukça ğeniş bir x-10 modül yelpazesi vardır.pic i ac ğücü bağlamak için bir ara birim ğerekir.XIN iki yönde x-10 haberleşmesi için TW-523 ğerektirir bu cihazda pic i ac den izole eden ğüç hattı ara birimi bulunur.
Data pın kendiliğinden ğiriş yapılır ve x-10 ara bişriminden veri alımını sağlar.Zero pin de kendiliğinden ğiriş yapılır ve x-10 ara biriminden 0 ğeçiş zamanlama bilğisini alır.her iki bacağında 4.7k dirençlerle 5v'a çekilmesi ğerekir.datapin ve zerapin 0-15 arasında bir sabit 0-15 arasında değerler alabilen bir değişken (B0,B1)yada bir bacagın (PORTB.0 ğibi )adı olabilir.
Timeout ve Label tercihan ve belli bir süre içinde x-10 verisi alınmaması durumunda proğram akışını devamını sağlamak için kullanılırlar.Tımeout ile belirlene zaman aşımı ac ğüç hattının yarı çevrimlerinde tanımlanır(yaklaşık8.33msn)
XIN ac ğüç hatttının her bir 0 ğeçişinde Zeropin tarafından alğılanmaktadaır.datapinden alınan veriyi işler ac ğüç hattında 0 ğeçişi yoksa XIN sonsuza kadar beklemede kalır.
Var ile ğösterilen değişken word boyutlu ise her bir ev kodu word üst baytında saklanır.alına her kilit kodu word ün alt baytında tutulur.Var'ın bayt olması halınde ise sadece kilit kodu saklanır.ev kodu 0-15 arası bir değerdir.X 10 modülünün A-P arası değerlerine karşılık ğelmektedir.kilit kodu belli bir X 10 modülünü yahut bu modül ğibi iş ğören bir fonksiyonun numarasıdır.pratikte önce X-10 modülünü belirten bir komut ğönderilir.bunu istenilen fonksiyonu belirten bir diyer komut izlerbazı fonksiyonlar tüm modüllerde çalılşabildiği için modül numarasına ihtiyaç duymazlar.örnekler durumu biraz açıklayacaktır.0-15 arası kilit kodları 1-16 arası modül numaralarına karşılık ğelmektedir.
Söz konusu kilit kodları X-10 modülleri tarafından alınan ve ğönderilen fiiili numaralardan farklıdır.bu farkın ortaya çıkma sebebi Key kodları BS2 ‘ye uydurmaktır.böyle bir stamp tercümesinden kurtulmak için şu tanıma baş vurulur:DEFİNE XINXLAT_OFF 1
Xın 12 bit picler tarafından desteklenmez.çünkü bunların ramları ve istifleri sınırlıdır.
House var word loop:
‘x-10 verisi alınıyor
XINPORTA,2 PORTA,0,[hosekey]
‘x-10 verisi LCD'de ğörüntüleniyor
Lcd $fe,1,''house='',#housekey.byte1,''key=''.byte0
Goto loop
X-10 verisi ara yokda nodata'ya ğit
XIN PORTA.2,PORTA.0,1,NODATA,[HOUSEKEY]

83) XOUT
SÖZDİZİMİ
XOUT datapin, zeropin[housecode/keycode(/repeat)(,...)]
Açıklama
Repeat ile belirtilen tekrar adeti kadar housecode ve ardından keycode X-10 formatında ğönderilir.eğer tekrar sayısı verilmemeişse ğönderim ilk kez yapılır.(daha azı mümkün değilir.)tekrar sayısı genellıkle BRIGHT ve DIM komutlarıyla kullanılmak üzere ayrılır.
 XOUT  X-10 modüllerine kontrol bilgisi  gönderiminde kullanılır.  Çeşitli  markalsara ait oldukça  geniş bir x-10  modül yelpazesi  vardır. Entegreyi  AC  güce  bağlamak için bir  arabirim gerekir. İki  yönlü x-10 haberleşmesi  için TW-523  yalnızca gönderim içinse PL-513  gerekir. Bu cihazlarda PIC'i ac'den izole eden güç  hattı  arabirimi  bulunur. Data pın kendiliğinden çıkış olarak x-10 arabirimine  gönderimini  sağlar. Zero pın  ise kendiliğinden  giriş olur. Ve  x-10 arabiriminden sıfır  geçiş zamanlama  bilgisini alır. her iki bacağında 4.7k dirençlerle 5v'a çekilmesi ğerekir.datapin ve zerapin 0-15 arasında bir sabit 0-15 arasında değerler alabilen bir değişken (B0,B1)yada bir bacagın (PORTB.0 ğibi )adı olabilir.
XOUT,AC  güç  hatının  her bir sıfır geçişinde  zero pın tarafından  algılanmaktadır. datapinden alınan veriyi gönderir. ac ğüç hattında 0 ğeçişi yoksa XOUT sonsuza kadar beklemede kalır. ev kodu 0-15 arası bir değerdir.X 10 modülünün A-P arası değerlerine karşılık ğelmektedir.kilit kodu belli bir X
10 modülünü yahut bu modül ğibi iş ğören bir fonksiyonun numarasıdır.pratikte önce X-10 modülünü belirten bir komut ğönderilir.bunu istenilen fonksiyonu belirten bir diyer komut izlerbazı fonksiyonlar tüm modüllerde çalılşabildiği için modül numarasına ihtiyaç duymazlar.örnekler durumu biraz açıklayacaktır.0-15 arası kilit kodları 1-16 arası modül numaralarına karşılık ğelmektedir.
Kilit  kodu isimleri (örneğin  untilON) MODEDEFS.BAS ‘ta tanımlıdır."ınclude" ile dahil edilebilirler. Eğer BS1DEFS.BAS veya BS2DEFS.BAS   dosyalarını kullanıyorsanız  bu  iki  dosya  zaten bu MODEDEFS.BAS ‘ı da  dahil  ettiğinden bu dosyayı ayrıca  dahil  etmeye gerek yoktur.


















 Söz konusu  kilit kodları  x-10 modülleri  tarafından alınan  ve gönderilen  fiili numaralardan farklıdır.bu farkın ortaya çıkma sebebi  key  kodları  BS2'ye uyuydurmaktır. Böyle bir stamp  tercümesinden  kurtulmak için şu tanıma  başvurulur.:
DEFINE  XINXLAT_OFF	1
XIN  12 BİT pıc'ler  tarafından desteklenmez.çünkü  bunlarınn ramları ve istifleri  sınırlıdır.
X- 10 arabirimine yazım  4 bağlantı  gerektirir.x-10 arabiriminin çıkışı (sıfır geçişi ve alınan veri)açık kolektördür.4.7K'lık dirençle  5V'a çekilmeyi gerektirirler. Telleme  tabloları  şöyledir. 



House var  Byte
unit var Byte
include "modedefs.bas"
	house =0 ‘Ev 0 yani (A) olarak tanımlanmıştır.
	Unit=8 ‘Kullanılan modül numarası 8 (9)'dir.
		‘house 0'daki birim 8'i aç
	XOUT PORTA.1,PORTA.0,[house\unit,house\uniton]
		‘house 0'daki tüm ışıkları kapa
	XOUT PORTA.1,PORTA.0,[house\lightsoff]
		‘ışık0 on saniyede bir yanıp sönecek
	XOUT PORTA.1,PORTA.0,[house\0]
Loop:
	XOUT PORTA.1,PORTA.0,[house\uniton]
	Pause 10000 ‘ışık 0'ı aç ve 10 saniye bekle
	XOUT PORTA.1,PORTA.0,[house\unitoff]
	Pause 10000 ‘ışık0'ı söndür ve 10 saniye bekle
Goto loop

electrotechnics

Assembly ile programlama
PBP ile program yazarken bazı işleri çok hızlı bir şekilde halletmek,küçük bir bellek alanı kullanmak ya da derleyicinin yaptığından farklı bir kurguyla çalışmak gerekebilir. Böyle durumlarda assembly ile yazılmış ifadeleri BASIC kodu içinde kullanmak son derece yararlıdır.
Programın genel yapısını BASIC formunda kurduktan sonra, assembly rutinlerini doğrudan programın içinde eklemek veya başka bir dosyadan çağırmak mümkündür.

1)İki assembler
PBP'nin icrasıyla program önce BASIC programını derler(assembly diline çevirir), hemen ardından da assembly derleyici (assembler) çalıştırılır. Bunun sonucunda nihai *. HEX dosya elde edilir: bu , PIC'e yüklenecek dosyadır.
PBP'de iki farklı assembler kullanılabilir:PBP'nin içindeki PM, micro engineering labs'ın Macro Assembler'ı. İkici dosyayı Microchip kaynaklarından elde etmek mümkündür.
Her ikisinin de avantajları ve dezavantajları bulunmaktadır.
PM, PBP ile birliktedir. MPASM'den hızlıdır.DOS ortamında daha büyük programları derleyebilir.8051  temelli komut seti daha kolaydır.
MPASM ile *. COD dosyası oluşturulabilmektedir. Bu dosya simülatör ve emülatörler için yararlıdır. MPASM, elde edilebilecek örnek programlara daha yakındır.
PBP önayar itibariyle PM'yi seçer. PM yerine MPASM'nin kullanılabilmesi için programın kurulu olduğu klasörün DOS patikasında tanımlanması şarttır.MPASM dosyaları eğer c:\mpasm klasöründeyse, autoexec.bat'a aşağıdaki satırı eklemelisiniz.
 Path=c:\mpasm
MPASM'yi PBP ile kullanmanın iki yolu vardır. DOS komut satırında 
PBP –ampasm dosyaadı
Yazılarak MPASM'nin kendi ekranı başlatılır. İkinci yöntem şöyledir.
 PBP –amp  dosyaadı
Bu seçenekte MPASM sadece hataları görüntüler. Ancak başlatıcının daha fazla bellek harcamasına yol açar.MPASM'ye maksimum bellek imkanı tanımak için ya ampasm satırı ya da MPASM'nin Windows sürümü kullanılmalıdır.

2 ) Programlama
PBP programlarında tek satır assembly kod yazımı mümkündür:@ ile başlayan satırlar bu amaca yöneliktir.
Birkaç satırlık assembly kod  yazımı için ASM...ENDASM tümcesine başvurulur.
Bu iki terim arasındaki satırlara assembly kodlar yazılır. Örneğin :
 
  @       bsf      PORTA,0

  ya da 

   ASM
	bsf     STATUS,RP0
	bcf     TRISA,0
	bcf     STATUS,RP0
    ENDASM

Assembly satırlar *. ASM çıkış dosyasına geçirilir. Bu sayede PM'in tüm avantajlarını PBP'de kullanmak mümkündür. Ancak bu durum kullanıcının PBP kütüphanelerine aşina olmasını şart koşar.PBP'nin notasyon sistematiği diğer ticari derleyicilerinkinden farlı değildir. Bunlarla çalışmış olanlar için ciddi bir sorun çıkarmaması gerekir.

İsimlerin PBP'deki tanımlanmaları assembly'dekine benzer. Assembly'de başlarına bir alttire(_) gelir. Bu sayede , kullanıcı tanımlı değişkenlere, sabitlere ve etiket yerleşimlerine kolayca erişebilir. Ancak sırf bu nedenle assembly'de alttire ile başlayan isimlerin PBP ile üretilen simgelerle çakışması ihtimali vardır. Bunun önüne geçilmesi halinde bile, alttireli assembly değerlere PBP'den erişmek mümkün değildir. Çünkü PBP'nin ürettiği alttireli isimler , derleyicide tanımlanan bilgilerin bölgesi niteliğindedir. Assermbly kodun doğrudan çıkış dosyasına yazılması, bunun derleyici tarafından görülmediği anlamına gelir. Değişkenleri hem PBP'de hem de assembly de paylaşımlı kullanmak için, tanımlarını PBP' de yapmak gerekir.

Alttireli olmayan semboller için de çakışma ihtimalinden söz edilebilir. Bu kez sorun, kütüphanelerin kullanımından kaynaklanır. Ne varki kütüphane tanıtıcıları, genelde, ya bir ‘?' içerirler ya da yazmaçlardan birini referans verirler.(R0 gibi). Dolayısıyla PBP'de böyle isimler kullanılmazsa sorun çıkma ihtimali de azalır. Sorun çıktığı zaman çift tanımlama hatası belirten bir mesaj alınır.

Assembly'de açıklamalar (;) sembolünün arkasına yazılır. PBP'de ise aynı işi REW veya (‘) görür.

3) Assembly kod yazımı

PBP tümceleri satırları takip ederek yürütülürler. Kodun organizasyonu şöyledir: programın kodu 0.adresten, yani reset vektöründen başlar.PBP, 0. ve takip eden adreslere birkaç başlangıç kodu yazdıktan sonra INIT etiketine sıçranacağını belirten bir komutla devam eder. Ardından PBP tümcelerinin kullandığı  kütüphane altrutinlerini içeren assembly kodları işlenir. Kütüphanenin sonunda ilave başlangıç rutinlerinin yer aldığı INIT bulunmaktadır. Son olarak MAIN etiketinden itibaren derlenen PBP  tümceleri eklenir.

PBP kaynağının yürütülebilecek ilksatırı programın başlama noktasıdır. Tümcenin bellekteki yeri kontrolörün  başlat'ı ile  kütüphane kodunun hemen arkasında , MAIN etiketinden hemen  sonradır.

Assembly rutinler için programın en uygun yeri neresidir? Bunu tayin etmek için birkaç şeyi göz önünde bulundurmak gerekir.

Programın tamamı bir kod sayfasını aşmıyorsa( yani<2k), assembly satırları PBP kodunun sonuna yerleştirmek gerekir. Programın sonuna END ya da STOP koymak her zaman yararlıdır.

Eğer program bir kod sayfasını aşıyorsa , asssembly kodu PBP kodunun başına koymak gerekir. Böylece ilk kod sayfasında oldukları bilindiği için , yerlerini aramakla uğraşmazsınız.. Assembly kesme (interrupt) rutinleri için böyle yapılması gerekir.

Programın başındaki assembly rutinleri , en başa bir goto konulmasını gerektirir. Bu ilk PBP satırına geçiş içindir.

Assembly rutinler programa yerleştirilebileceği gibi başka bir dosya içinde de yer alabilir. Dosyada tutulacak olan kodun genel amaçlı kod olması mantıklıdır. Programa özgü, bir kerelik  kodları programa yazmak daha doğrudur. Bunlar CALL  komutuyla  çağrılır.

Dosyadan çağırma, - kütüphane dosyasının adının MYASM olduğunu varsayalım – programın içine yazılan şu satırlarla gerçekleştirilebilir:

ASM
      İnclude "myasm.inc"
ENDASM


4 ) Diğer bir assembly meselesi

PIC yazmaçları banklıdır. PBP  hangi yazmaç bankına işaret edildiğinin takibini bizzat yapar.

PBP ,bir CALL veya GOTO'yu icra etmeden önce bank seçim bitlerini reset etmektedir, yani hangi bankın o anda etkin olduğunu bilinir durumdadır.

PBP, yine her   ASM..ENDASM  veya @ kısayolundan önce de bank seçim bitlerini reset eder. Assembler rutininin bitlerin son durum-değerlerini bilmesi söz konusu değildir. Bu nedenle bunların belirlenmesi gerekir. Assembly rutininden çıkışta, değiştirilmiş olma rskini ortadan kaldırmak için, bankseçim bitleri assembly kodu tarafından reset edilmiş olmalıdır.


Kesmeler

Kesmeler donanımda meydana gelen olaylardan kaynaklanır. Bir I/O bacağındakideğişim , bir zamansayarın zaman aşımın girmesi böyle olaylar arasındadır.  Devrede (etkin) olduklarında –ki , açılış sırasında etkisizdirler- işlemcinin yaptığı işi kesip belli bir rutine atlamasına yol açarlar. Bu rutinler kesme maşaları olarak da adlandırılır.

Kesmeler , uygun yapılandırılırsa çok büyük yararlar sağlar. Örneğin , PBP program gövdesi  başka bir işle meşgulken  , arka planda çalışan başka  bir kesme rutini ile seri girişten alınan veri tampona aktarılabilir(tabii, bunun için entegrenin donanım seri portuna sahip olması gerekir.)

Kesme kullanımından kaçmanın çeşitli yolları vardır. Bir bacağı ya da yazmaç bitini hızlı bir şekilde yoklamak bunlardan biridir. Ya da , kesmeleri devreye sokmaksızın, kesme bayrağının değerine bakılabilir.

PBP'de kesme yönetimi için iki düzenek vardır. Bunlardan birincisi assembler da bir kesme maşası yazmak ve PBP programının önüne yerleştirmektir. İkinci yöntemse, PBP' nin ON INTERRUPT tümcesini kullanmayı gerektirir.

1) Kesmelere genel bir bakış
Kesme meydana geldiğinde ,program akışındasıradaki komutun adresi PIC tarafından istifte saklanır ve 4.adrese atanır. Bundan çıkarılması gereken ilk anlam , sadece 8 derinliğe sahip donanımda extra bir istife ihtiyaç duyulacağıdır.

PBP kütüphane rutinleri kendileri  için 4 istif yerleşimini işgal ederler. Geri kalan 4yerleşim (17Cxxx'te 12, 18Cxxx'te  27'dir) assembly rutinlerinin çağrılarına (CALL) ve BASIC altrutinlerinin (GOSUB) çağrılarına tahsis edilir. GOSUB' ların, içlerinde CALL olmamak şartıyla, en çok 3 derinliğe(altrutinden başka altrutin çağırma sayısına ) sahip olması, bunu aşmamsı gerekir. Aksi taktirde  dönüş adresi için istif yerleşimine sahip olamazlar. Kesme maşası istif kullanıyorsa , ek istif alanına ihtiyaç duyulur.

İstif meselesi halledildikten sonra sıra uygun kesmeleri devreye sokmaya gelir. Bu INTCON yazmacının belirlenmesi demektir. Örneğin: 
 
INTCON = %10010000

Yukarıdaki ifade RB0/INT için kesmeyi etkinleştirir. İstenilen fiili kesmeye bağlı olarak, PIE yazmacının belirlenmesi de gerekebilir.
2) basıc kesmelerı
 PBP'de kesme maşası  düzenlemenin en kolay yolu 10 İNTERRUT tümcesine başvurmaktır.bu komut PBP ye içsel kesme maşasını aktive etmesini söyler.kesme meydana geldiğinde ,programakışı durur ve BASIC'de kurduğunuz rutine atlanır.
Kesme meydana gelince  PBP  olayı bayraklar ve ne olduğuna bakar.yani doğrudan maşaya atlamaz.çünkü PBP ‘de sıradaki komutu yürütmeye geçmek için o sırada icra gören komutun sona ermesi  beklenir.bu durum kesme maşalarının devreye girmesinde ciddi  gecikmelere yolaçabilir. 
Örneğin kesme meydana geldiği anda program PAUSE  10000 komutunu icraetmeye başlamış ise ,PBP kesmeyi  bayraklar fakat komutun sona ermesini  bekler.örneğe göre 10 saniye geçmeden kesme maşası devreye girmeyecektir. Bu sırada seri portta tamponlama yapılıyorsa karakter kaybıyla karşılaşmak kaçınılmazdır.
Sorunun boyutunu küçültmek için yapılabilecek şeylerden biri  komutları kısa sürede işleyecek şekilde organize etmektir.PAUSE  10000 komutunu bir FOR... NEXT  döngüsünün içine koyup PAUSE  1 olarak belirlemek bir çözümdür.böylece kesmenin işleme konulması için 10 saniye değil 1 milisaniyelik bir gecikme ortaya çıkar.
ON  INTERRUPT  kullanıldığında  olup biten  şundan ibarettir.PIC'in 4.yerleşimine kısabir kesme maşası yerleştirilir.bu maşa aslında RETURN komutudur. Bu yapıyla kotarılan işprogramın akışını kesme meydana gelmeden önce kaldığı  yere göndermektir. Burada  işlemci içeriğini kaydına ilişkin bir şey  yapılmaz. Öte yandan bu süreç RETFIE  kullanılması halinde söz konusu olan bütün kesmelerin yeniden etkinleşmesi  olgusuna  yol açmayacaktır .kesme gerçekleşip program sayacı  4. adrese gittğinde GIE  biti  otomatikman ‘0' olacak .ve yeni kesmelerin icra görmesi  o anda gerçekleşen kesmeye yönelik  rutin icraedilene kadar askıya alınacaktır.4. adresteki RETURN komutu program akışını kesmenin gerçekleştiği PBP tümcesinin bitimini yönlendirir.burada PBP  tarafından  ONINTERRUPT  ifadesi neticesinde her PBP  tümcesinin sonuna yerleştirilmiş bir alt rutin çağrısı yer almaktadır.bu alt rutinin işi bütün kesmeler etkin.(global ınterrupt enable yıe)bitni kontrol etmektir.bit ‘0' ise kullanıcının düzenlediği kesme rutinine atanır .bit "1"ise programakışı sıradaki BASIC  tümcesinden devam eder .
Basıc kesme rutininin sonundaki  RESUME  ifadesi  GIE  bitini  kesmeleri  etkinleştirecek şekilde "1"e ayarlayarak programın kesme ile ayrılan noktaya dönmesini  sağlar. Eğer bu ifade bir etiketle birlikte kullanılmışsa ,program akışı belirtilen etikete yönelir.Dolayısı ile diğer dönüş adresleri  kaybolur.     
DISABLE  komutu PBP'nin her satırın sonuna kesme kontrol rutini  koymasının önüne geçer .bu durumda program akışı bu noktadan tibaren kesme nedeniyle ertelenmeksizin çalışacaktır..Kesmeleri  yeniden deevreye sokmak için ENABLE  kullanılır.DISABLE komutunu kesme  rutininin başladığı satırın hemen üstüne koymak gerekmektedir.aksi takdir de PBP  kesme rutini  içinde de kesmeler devrede mi diye GIE  bitini  kontrol eder.programın 10  INTERRUPT ifadesini farketmesinden sonraki bir noktada tüm kesmelerin kapatılması isteniyorsa GIE bitinin yinede "1"  olması şarttır . Çünkü PBP,GIE biti "0" olduğunda kesme gerçekleşmiş gibi  davranıp sürekli kesme rutinini  icra etmeye  çalışacaktır. Bunun yerine  aşağıdaki   satır yazılarak ,GIE  bitine doknulmadan tüm kesmelerin münferiden devre dışı kalması sağlanacaktır.
INTCON= +80
basıc kesmeleri  hakkında son bir not  şöyle bir yapının kullanılmasına ilişkindir.
Loop: GOTO  loop
 Bu yapıda kesme meydana gelmesi olanaksızdır.  Çünkü  bayrağın  kontrol edilmesi iççin komutun bitmesi gerekir. Oysa GOTO  komutunu  sonrasının kontrolünde  izin veremez.kesme kontrolü  olmaksızın etikete dönülür.
Örnek:
‘ON INTERRUPT_BASIC ile kesme uygulaması
‘PORTD.7 ye bağlı LED yapar.PORTB.0 (INTE) harici  kesmesi 
‘LED'i söndürür.1 saniye bekler ledi  yeniden yakar.
Led              var            PORTD.7
	

	OPTION  _REG= +7f	‘PORTB dirençleri  etkin 
	On ınterrupt  GOTO  myint	‘kesme rutini  adresi
	INTCON =$90		‘RB0/INTE  kesmesi etkin

Loop:	high led			‘led yanar
Goto loop				‘ve sonsuza kadar yanmaya 
	
‘devam eder.
‘kesme rutini		
‘kesmeler devre dışı 
        disable 		‘led söner
myint:  low led 		‘1 saniye bekleme 
     pause 1000		‘1 saniye bekleme 
INTCON  .1=0		‘kesme bayrağı sıfırlanır.
Resume 		‘programa geri dönülür.
Enable		‘kesmeler yeniden devrede
End
3)asemler kesmeleri:
 Kesme olduğunda işlemcinin ne yaptığı bilinmediği için W yazmacının durum değeri, STATUbayrakları, PCLATH ve hangi kod sayfasında olduğu da bilinmeyecektir. Bunlardan herhangi birini değiştirmek icap  ederse ,önce mevcut değerini kaydetmek gerekir.Aksi takdirde işlemciyi kesmeden önce kaldığı yere döndürmek olanaksızdır.Bu işlem işlemci içeriğinin kaydedilip yeniden kurulması olarak bilinir.
Söz konusu içerik kesmenin tamamlanmasından sonra bulunduğunuzda aynı değilse ,her hangi bir hatadan sistemin çökmesine kadar akla gelebilecek her türlü sorunla karşılaşmaya hazırlıklı olmak gerekir.Bu durumda entegrenin içerini saklamak için PBP derleyicisinin değikenlerinden yardım ummak boşunadır.
Bundan kaçınmak için W'nin STATUS'un  ve kesme rutini tarafından değerleri değiştirilen tüm diğer yazmaçların içeriklerini kaydetmek gerekir.
W'yi  bir RAM yazmacına kaydetmek basit bir iş gibi görünür.Ancak ,durum öyle değildir.Çünkü sorun ,kesme meydana geldiği sırada yazmaç bank'ını işaret ettiğini bilme şansımız yokken ortaya çıkar.Eğer BankO'da rezerve bir yerleşim var ve cari yazmacını işaretçileri Bank1'e ayarlı durumdalarsa ,istenilmeyenbir yerleşime yazım meydana gelebilir .Bunun için ,PIC'in her bankında aynı ofset ile bir RAM yazmaç yerleşimi rezerve etmek gerekir.
Örneğin 16C74(A)'nın 2 RAM yazmaç bankı vardır.Bunlar sırasıyla $20 ve $A0'dan başlar.
Güvenlik amcıyla,her bankda aynı yerleşim rezerve edilmelidir.Her bankın ilk yerleşimini seçmek için şu komutları yazmak gerekir.
Wsave VAR byte $20 system
Wsave1 VAR byte $a20 system
Bu komutlar derleyiciye ,değişkeni RAM'da belli bir yere koymasını söyler böylece W ‘nin başka bir banka kaydedilmesi diğer verileri tahrif etmeyecektir. Kesme rutini el verdiğince kısa hızlı olacak şekilde yazılmalıdır.Yürütülmesi çok uzarsa Watcdoğ zamanlayıcısı zaman aşımına ortalıkta birbirine girer 
Rutin REDFIE komutuyla bitmezse PBP kaldığı yerden devam edemez
Assembly kesme rutinlerinin PBP programında yerleştirilebileceği en iyi yer baş kısmıdır.
Böylece ilk 2K'lık kısımda kalması sağlanmış olur hemen başına bir GOTO eklemek gerekir.Aksi takdirde program buradan başlamaya çalışır.
PIC'in kod alanı 2K'dan büyükse programa kesme rutinine gitmeden önce W ile STATUS ve PCLATH yazmaçlarının değerlerini otamatik olarak wsave ssave  ve psve değişkenlerine kaydeden ilaveler yapılır.BASIC'de bu değişkenler için alan temin edilmelidir.
Wsave   var  byte   $20  system
  Wsave1   var  byte   $20  system
Wsave 2  var  byte   $20  system		‘bank1'de ‘RAM varsa
Wsave 3  var  byte   $20  system 			‘‘bank2'de ‘RAM varsa	
Wsave2   var  byte   $20  system			‘bank3'de ‘RAM varsa
Wsave 2  var  byte   $20  system			

Bu değerleri  assembler   kesme rutininin  sonunda yeniden  yazmaçlara  aktarmak  gerekir.PIC'in  kod belleği 2K veya daha düşükse yazmaçlar  otomatik olarak kaydedilmez. Dolayısı  ile hem kaydetme hem de yenileme işi kesme rutininde  yapılmalıdır.PBP'nin bilmesi gereken son bir şey daha vardır.bir assembly kesme rutini  kullanıldığı ve nerede olduğu! Bunun için tanıma başvurulur:
DEFINE  INTHAND  etiket
Buradaki etiket rutinin başlangıç satırını gösteren  isme karşılık gelir. Böylece PBP  PIC'in 4. adresindeki bu etikete bir atlama koyar.

‘asssembly  ile kesme örneği .PORTD.7'ye bağlı led sönüktür.
‘RB0/INTE   kesmesi  gerçekleştiğinde LED yanacaktır.
Led  var    PORTD.7
	Wsave   var  byte   $20  system
            Ssave     var  byte   bank0  system 
            Psave     var      byte   bank0  system
             Goto  start		‘kesme  rutinini  geç,start'a git


Define INTHAND  myint          Â‘kesme rutini  tanımlanıyor.
‘assembly     ile düzenlenen kesme rutini.
Asm
;W,STATUS  ve  PCLATH  yazmaçları  kaydediliyor.
Myint  movwf  wsave
	Swapf  STATUS  ,W
	Clrf  STATUS
Movwf  ssave  
Movf     PCLATH, W
Movwf  psave
;kesme kodu buraya giriliyor.
;kullanılıyorsa FSR'yi  katdet ve yenile
	bsf_led  ;LED'i  yak (örnek  kesme kodu)
;kesme kodu sonu
;PCLATH,STATUS  ve W yazmaçları kesme anındaki değerlerine
;döndürülüyor.
	Movf  psave  ,W
Movwf  PCLATH
Swapd   ssave ,W
Movwf   STATUS
Swapf  wsave  ,F
Swapf  wsave ,W
Retfie
Endams


‘pıcbasic  pro programının başlangıcı
start:  low led			‘ledi  sönüktür.
‘RB0/INTE harici kesme etkinleştirilir.
INTCON=%10010000
Loop:goto loop			‘kesmeye kadar dön babadön 
End


arkadaşlar begeneceginizi umuyorum.
aster arkadaşım c notlarımı sildigi için üzülmüştü.ona hitafen olsun bunlar...
PICPROJE ailesi herşeyin en iyisini hak ediyor....
saglıcakla kalın. :D


devamı gelecek...

electrotechnics

ayrıca basic ingilizce kaynak dosyasınıda aşagıdaki linkten indirebilirsiniz...

picbasic ingilizce kaynak...

electrotechnics

arkadaşlar bu şekilde eklemem kirlilikmi yaratıyor. Yorumlarınızı bekliyorum.

teketek

bence gayet faydalı olmuş @electrotechnics ellerine sağlık..picbasic ile ilgili bi sorun oluştuğunda bu linkte ctrl+f ile arama yapmak, sorunun kaynağı ya da çözümü hakkında fikir vermek açısından büyük kolaylık sağlayacaktır diye düşünüyorum.

iyi çalışmalar.
Bilgi fark yaratır..

peace_lovingg

adc konusunda bilginiz varsa biraz daha açarmısınız

electrotechnics

Alıntı yapılan: "peace_lovingg"adc konusunda bilginiz varsa biraz daha açarmısınız

bu konunun devamında istedigin konudan bahsedecegim.;En yakın zamanda hazırlayıp sunabilmek için ugrasacagım...


teketek begendigine sevindim.Picproje ailesine ne yapılsa az kalır.Yararlı olduysa ne mutlu bana.

aster

Hocam, daha önce arkadaşımızda söylemişti, bilginin kirliliği olmaz
elinize sağlık, yazılarınızın devamını bekliyoruz.