5 MikroislemcilereGiris Ornekler Cozumlu 2017
5 MikroislemcilereGiris Ornekler Cozumlu 2017
5 MikroislemcilereGiris Ornekler Cozumlu 2017
// Program Adı
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT //LP,XT,HS,RC,NOWDT,WDT,PUT,NOPUT,PROTECT,NOPROTECT
// Değişken Tanımlamalar
#byte Porta = 0x05
int8 t[10];
int1 x;
int u;
int8 y;
int16 w;
float z;
// Ana Program
void main (void){
// IO Tanımlamalar ve İlklendirmeler
while(TRUE){
// Sonsuz Döngü veya Koşullu Döngü
}
}
1. Komutlar
input() : Pin to read. Pins are defined in the devices .h file.
value=input(pin)
if (!input(PIN_B0) ) // B0=0 mı?
if ( input(PIN_A0) ) // A0=1 mi?
input_x( ) : Inputs an entire byte from a port.
value = input_a()
value = input_b()
set_tris_x( ) : These functions allow the I/O port direction. Value is a 8 bit int.
set_tris_a (value)
set_tris_b (value)
set_tris_b(0x0F) // B7,B6,B5,B4 are outputs ‐ B3,B2,B1,B0 are inputs
output_x( ) : Output an entire byte to a port. Value is a 8 bit int.
output_a (value)
output_b (value)
output_b(0xF0)
output_bit( ) : Pins are defined in the devices .h file. Value is a 1 or a 0.
output_bit (pin, value)
output_bit( PIN_B0, 0)
bit_test( ) : Var may be a 8 bit variable. Bit is a number 0‐ 7 representing a bit number, 0 is the least
significant bit.
value = bit_test (var, bit)
if( bit_test(x,3) || !bit_test (x,1) )
bit_set( ) : Var may be a 8 bit variable. Bit is a number 0‐ 7 representing a bit number, 0 is the least
significant bit.
bit_set(var, bit)
bit_set(x,3);
bit_clear( ) : Var may be a 8 bit variable. Bit is a number 0‐ 7 representing a bit number, 0 is the least
significant bit.
bit_clear(var, bit)
bit_clear(x,2);
i) A portuna bir buton, B portuna bir led bağlayınız. Butona basıldığında led yanacak,
basılmadığında led sönecektir.
ii) A portuna iki buton (start,stop), B portuna bir led bağlayınız. Start butona basıldığında led
yanacak, stop butonuna basıldığında led sönecektir.
// Örnek 3_i
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#use delay (clock=4000000)
#byte PortA = 0x05
#byte PortB = 0x06
void main (void){
set_tris_a(0x1F);
set_tris_b(0x00);
output_b(0x00);
while(TRUE){
if (bit_test(PortA,0)){
bit_set(PortB,0);}
else{
bit_clear(PortB,0);}
}
}
// Örnek 3_ii
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#use delay (clock=4000000)
#byte PortA = 0x05
#byte PortB = 0x06
void main (void){
set_tris_a(0x1F);
set_tris_b(0x00);
output_b(0x00);
while(TRUE){
if (bit_test(PortA,0)){
bit_set(PortB,0);}
if (bit_test(PortA,1)){
bit_clear(PortB,0);}
}
}
Örnek 4: PIC 16F84A ‘nın B portunu çıkış tanımlayarak bir adet ortak katodlu display, A portunu giriş
tanımlayarak, dört adet anahtar bağlayınız. A portundan girilen 2 tabanlı verinin Hekzadesimal
karşılığını B portundaki display’ den gösteren programı PICC dilinde gerçekleştiriniz.
// Örnek 4
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#use delay (clock=4000000)
int8 rakam[16];
int8 veri;
void main (void){
set_tris_a(0x1F);
set_tris_b(0x00);
rakam[0]=0x3F;
rakam[1]=0x06;
rakam[2]=0x5B;
rakam[3]=0x4F;
rakam[4]=0x66;
rakam[5]=0x6D;
rakam[6]=0x7D;
rakam[7]=0x07;
rakam[8]=0x7F;
rakam[9]=0x6F;
rakam[10]=0x77;
rakam[11]=0x7C;
rakam[12]=0x39;
rakam[13]=0x5E;
rakam[14]=0x79;
rakam[15]=0x71;
while(TRUE){
veri = input_a();
output_b(rakam[veri]);
}
}
Örnek 55: PIC 16F8
84A ‘ya 7x5
5 dot‐matrixx display baağlayınız. Do
ot‐Matrix dissplayden ‘E’ harfinin
yazılmassını sağlayan programı PICC dilinde geerçekleştiriniz.
#includee<16F84A.h>>
#fuses XT,NOWDT,PUT,NOPROTECT
#use delay (clock=40 000000)
int8 A[5]];
int8 B[5]];
int8 i;
void maiin (void){
set_tris__a(0x00);
set_tris__b(0x00);
A[1]=0x007; A[2]=0x0B; A[3]=0x0D; A[4]=00x0E;
B[1]=0x33F; B[2]=0x0 06; B[3]=0xx5B; B[4]=00x4F;
i=0;
while(1){
i=i+1;
if (i==55){
i=1;}
outputt_a(A[i]);
outputt_b(B[i]);
delay__ms(10);
}
}
Örnek 6: PIC 16F84A nõn A portunda 2 adet buton ve B portunda 8 adet led bulunmaktadõr.
Butonlardan birine basõldõ õnda 8 bit binary ileri saydõrma, di erine basõldõ õnda 8 bit binary geri
saydõrma i lemlerini yapan programõ PICC ile yazõnõz. (Her iki butona basõlmadõ õnda sayõcõ en son
hangi sayõda kaldõysa o sayõyõ koruyacaktõr.)
******************************************************
// Örnek 6
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#use delay (clock=4000000)
int8 sayici;
set_tris_a(0x03);
set_tris_b(0x00);
sayici=0;
while(TRUE){
if ( bit_test(Porta,0)){
sayici=sayici+1;}
if ( bit_test(Porta,1)){
sayici=sayici 1;}
output_b(sayici);
delay_ms(300);
}
}
******************************************************
// Örnek 6
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#byte Porta = 0x05
int8 sayici;
int1 z;
set_tris_a(0x03);
set_tris_b(0x00);
sayici=0;
z=0;
while(TRUE){
output_b(sayici);
}
}
// Örnek 7
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#byte Porta = 0x05
#byte Portb = 0x06
int8 sifre,veri;
set_tris_a(0x0F);
set_tris_b(0x00);
sifre=10;
veri=0;
output_b(0x00);
while(TRUE){
veri = input_a();
if (veri==10){
bit_set(Portb,0);}
else{
bit_clear(Portb,0);}
}
}
Örnek 8: Port B ye ba lanmõ 8 led in yürüyen õ õk uygulamasõ
// Örnek 8
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
#use delay (clock=4000000)
int8 veri,a;
set_tris_b(0x00);
veri=1;
a=1;
while(TRUE){
if (a==1){
veri=veri << 1;}
if (a==2){
veri=veri >> 1;}
if (veri==1){
a=1;}
if (veri==128){
a=2;}
output_b(veri);
delay_ms(400);
}
}
Örnek 9: 3 ortak katotlu displayde kayan yazõ uygulamasõ ile ekrana ERSOY yazdõrõnõz.
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPROTECT
#use delay (clock=4000000)
int8 A[4];
int8 B[6];
int8 i,k,veri;
if (k==55){
k=0;
veri==B[1];
B[1]==B[2];
B[2]==B[3];
B[3]==B[4];
B[4]==B[5];
B[5]==veri;}
outputt_a(A[i]);
outputt_b(B[i]);
delay__ms(10);
}
}
OPTION REEGISTER (Ad
dres : 0x81))
Bit 7 RRBPU PortB Pull‐Up yetki bbiti
11 : PortB Pull‐Up dirençlleri pasif
00 : PortB Pull‐Up dirençlleri aktif
Bit 6 IINTEDG RB0/INT Kesme kenaar seçme biti
11 : RB0/INT olay kesmessi yükselen kkenar algılam
ma
00 : RB0/INT olay kesmessi düşen kenaar algılama
Bit 5 TT0CS Timer0 saat (Clock) kkaynağı seçm me biti
11 : Timer0 saat işaretini RA4/T0CKI p pininden alıyyor
00 : Timer0 saat işaretini iç saatten (C
CLOCKOUT) a alıyor
Bit 4 TT0SE TMR0 ka
aynak kenar sseçme biti
11 : RA4/T0C
CKI pini düşenn kenar algılaamalı
00 : RA4/T0C
CKI pini yükseelen kenar allgılamalı
Bit 3 PPSA Çarpan tayin etme biiti
11 : Çarpanla
ar WDT için aayarlandı.
00 : Çarpanla
ar Timer0 içinn ayarlandı
Bit 2‐0 P
PS2:PS0 oranı seçme bitleri
Çarpan o
Pull‐Up d dirençlerini aaktif etmek için;
bcf OPTTION,RBPU bcf OPTION
b ,7 bcf 0x81,7
b
port_b_p pullups(TRUE);
Timer0 ssaat (Clock) kkaynağını RA A4/TOCKI pin inden almassı için (Timer’’ ı sayıcı yapm
mak için);
bsf OPTTION,TOCS bsf OPTION
b ,5 bsf 0x81,5
b
setup_co ounters(RTCC_EXT_H_TO O_L);
INT
TCON REGISSTER (Adre
es: 0x0B, 0x8
8B)
Bit 7 GGIE Global ke
esme yetki bbiti
11 : Bütün keesmeler aktiff
00 : Bütün keesmeler pasiff
Bit 6 EEEIE E2PROM yazma tamaamlandı kesm
mesi yetki bitti
2
11 : E PROM yazma tamaamlandı kesm
mesi aktif
00 : E2PROM yazma tamaamlandı kesm
mesi pasif
Şekkil 1. PIC16F884A’ nın Kesm
me Lojik Devvresi
Bit 5 TT0IE Timer0 taşma kesmeesi yetki biti
11 : Timer0 taşma kesmeesi aktif
00 : Timer0 taşma kesmeesi pasif
Bit 4 IINTE RB0/INT olay kesmessi yetki biti
11 : RB0/INT olay kesmessi aktif
00 : RB0/INT olay kesmessi pasif
Bit 3 RRBIE RB port d
değişim kesm
mesi yetki bitti
11 : RB port d
değişim kesm
mesi aktif
00 : RB port d
değişim kesm
mesi pasif
Bit 2 TT0IF Timer0 taşma kesmeesi bayrak bitti
11 : Timer0’d
da taşma old u (Yazılım ile
e silinmeli)
00 : Timer0’d
da taşma olm
madı
Bit 1 IINTF RB0/INT olay kesmessi bayrak biti
11 : RB0/INT pininde olayy kesmesi old
du
00 : RB0/INT pininde olayy kesmesi olm
madı
Bit 0 RRBIF RB port d
değişim kesmmesi bayrak b biti
11 : RB7:RB4 bitlerinden en az birinde ğişimi oldu (YYazılım ile silinmeli)
e durum değ
00 : RB7:RB4 bitlerinin hi çbirinde durrum değişimi olmadı
Global Kesmeyi aktif etmek için;
bsf INTCON,GIE bsf INTCON,7 bsf 0x0B,7 bsf 0x8B,7
enable_interrupts(GLOBAL); //GLOBAL, INT_EXT, INT_RB, INT_TIMER0, INT_EEPROM
Herhangi bir Kesmeyi (Örneğin RB0/INT olay kesmesini) aktif etmek için;
bsf INTCON,INTE bsf INTCON,4 bsf 0x0B,4 bsf 0x8B,4
enable_interrupts(INT_EXT);
Örnek 10: PIC 16F84A’ nın RB0 pinini olay kesmesi olarak tanımlayarak bu pine 1 adet lojik “1” aktif
buton bağlayınız. Ayrıca B portuna 1 adet Ortak katotlu display bağlayınız. Displayde 0‐9 arası sayılar
periyodik olarak görünecektir. Butona basıp bıraktığımızda sayı değeri “1” (bir) artmalıdır. Sayı
butonu bıraktığımızda güncellenmelidir.
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPROTECT
const int8 Goster[10]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE};
#byte PortB=0x06
int8 i,kod;
#INT_EXT
void extkesme(){
i=i+1;
if (i==10){
i=0;}
}
void main (void){
set_tris_a(0x00);
set_tris_b(0x01);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L); // H_TO_L, L_TO_H
enable_interrupts(GLOBAL);
i=0;
kod=0;
while(1){
output_a(i);
kod=Goster[i];
#asm
movf kod,W
movwf PortB
#endasm
}
}
Örnek 11: Örnek 10’da verilen soruyu PIC166F84A’da bulunan sayıcıyı kullanarak çözünüz.
************* Versiiyon 1 ***** **********
#includee<16F84A.h>>
#fuses XT,NOWDT,NOPUT,NOPR ROTECT
const intt8 Goster[10 C,0xB6,0x9E ,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE};
0]={0x7E,0x0C
int8 i;
void maiin (void){
set_tris__a(0x10);
set_tris__b(0x00);
setup_co ounters(RTCC_EXT_H_TO O_L,RTCC_DIIV_1);
i=0;
while(1){
i=get_ttimer0();
if (i===10){
set__timer0(0);}
outputt_b(Goster[i]]);
}
}
************ Versiyon 2 **************
#include<16F84A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
const int8 Goster[10]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE};
int8 i;
#INT_TIMER0
void timer0kesme(){
set_timer0(245);
}
void main (void){
set_tris_a(0x10);
set_tris_b(0x00);
setup_counters(RTCC_EXT_H_TO_L,RTCC_DIV_1);
i=0;
set_timer0(245);
while(1){
i=get_timer0()‐245;
output_b(Goster[i]);
}
}
************ Versiyon 3 **************
#include<16F84A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
const int8 Goster[10]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE};
int8 i;
#INT_TIMER0
void timer0kesme(){
set_timer0(245);
}
void main (void){
set_tris_a(0x10);
set_tris_b(0x00);
setup_timer_0(T0_EXT_H_TO_L | T0_DIV_1);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
i=0;
set_timer0(245);
while(1){
i=get_timer0()‐245;
output_b(Goster[i]);
}
}
Örnek 1 12: PIC 16F8
84A ‘nın B portuna ortakk katodlu dissplay bağlaya arak 1 ile 9 aarasındaki ra
akamların
periyodik olarak yaazılmasını sa ağlayan proogramı PICC C dilinde geerçekleştiriniiz. Gecikmeyi Timer
kullanaraak gerçekleştiriniz.
#includee<16F84A.h>>
#fuses XT,NOWDT,PUT,NOPUT,N NOPROTECT
const intt8 Goster[100]={0x3F,0x06 6,0x5B,0x4F,,0x66,0x6D,0 0x7D,0x07,0xx7F,0x6F};
int8 i;
#INT_TIM MER0
void timer0kesme(){
i=i+1;
if (i==110){
i=0;}
}
void maiin (void){
set_tris__b(0x00);
setup_timer_0(T0_IN NTERNAL | T T0_DIV_256) ;
enable_iinterrupts(IN NT_TIMER0);;
enable_iinterrupts(GLOBAL);
i=0;
while(TR RUE){
outputt_b(Goster[i]]);
}
}
Örnek 113: PIC1616 6F84A’ nın pull‐up
p direençlerini aktif hale getirip pinlere buton bağlayınız. B
portundan aldığınız b bilgiyi A porttundan göndderiniz.
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPUT,NOPROTECT
void main (void){
set_tris_a(0x00);
set_tris_b(0xFF);
port_b_pullups(TRUE);
while(TRUE){
output_a(input_b());;
}
}
Örnek 14: PIC1616F84A ile bir motor periyodik olarak çalıştırılacaktır. Start butonuna basılması ile bir
sistem değişkeni aktif olacak ve motor çalışmaya başlayacaktır. Motor t1 süre çalışıp, t2 süre
duracaktır. Bu işlem stop butonuna basılana kadar periyodik olarak devam edecektir.
************ Versiyon 1 **************
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPROTECT
#bit Start = 0x05.0
#bit Stop = 0x05.1
#bit Sistem = 0x06.0
#bit Motor = 0x06.1
int8 i;
#INT_TIMER0
void Timer0Kesme(){
i=i+1;
if (i>=10){
i=0;}
}
void main (void){
set_tris_a(0xFF);
set_tris_b(0x00);
setup_timer_0(T0_INTERNAL | T0_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
Sistem=0;
Motor=0;
output_b(0x00);
while(TRUE){
if (Start==1){
Sistem=1;
i=0;}
if (Stop==1){
Sistem=0;}
if (sistem==1){
if (i<5){
Motor=1;}
else{
Motor=0;}}
else{
Motor=0;}
}
}
************ Versiyon 2 **************
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPROTECT
#bit Start = 0x05.0
#bit Stop = 0x05.1
#bit Sistem = 0x06.0
#bit Motor = 0x06.1
int8 i;
#INT_TIMER0
void Timer0Kesme(){
i=i+1;
if (i>=10){
i=0;}
}
void main (void){
set_tris_a(0xFF);
set_tris_b(0x00);
setup_timer_0(T0_INTERNAL | T0_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
Sistem=0;
Motor=0;
output_b(0x00);
while(TRUE){
Sistem=(Start || Sistem) && (!Stop);
if (Start==1){
i=0;}
if (sistem==1){
if (i<5){
Motor=1;}
else{
Motor=0;}}
else{
Motor=0;}
}
}
Örnek 155: Aşağıdaki zaman diyaggramı verilenn sistemin prrogramını PIC
CC ile yazınızz. Mikrodene
etleyici
olarak 166F84A kullan
nılacaktır.
#includee<16F84A.h>>
#fuses XT,NOWDT,PUT,NOPROTECT
#bit Start = 0x05.0
#bit Stop = 0x05.1
#bit Sisttem = 0x06 6.0
#bit Mo otor1 = 0x0
06.1
#bit Mo otor2 = 0x0
06.2
int8 T1ETT,T1PT,T2ETT,T2PT;
int1 T1IN N,T1Q,T2IN,TT2Q;
#INT_TIM MER0
void Tim mer0Kesme(){{
if (T1IN N==1){
if (T11ET<T1PT){
T1EET=T1ET+1;
T1Q Q=0;}
if (T11ET>=T1PT){
T11ET=T1PT;
T11Q=1;}}
else{
T1EET=0;
T1Q Q=0;}
if (T2IN N==1){
if (T22ET<T2PT){
T2EET=T2ET+1;
T2Q Q=0;}
if (T22ET>=T2PT){
T22ET=T2PT;
T22Q=1;}}
else{
T2EET=0;
T2Q=0;}
}
void main (void){
set_tris_a(0xFF);
set_tris_b(0x00);
setup_timer_0(T0_INTERNAL | T0_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
T1PT=2;
T2PT=3;
Sistem=0;
Motor1=0;
Motor2=0;
output_b(0x00);
while(TRUE){
if (Start==1){
Sistem=1;}
if (Stop==1){
Sistem=0;}
if (Sistem==1){
T1IN=1;}
else{
T1IN=0;}
if ((Sistem==1) && (T1Q==1)){
Motor1=1;}
else{
Motor1=0;}
if (T1Q==1){
T2IN=1;}
else{
T2IN=0;}
if ((T1Q==1) && (T2Q==0)){
Motor2=1;}
else{
Motor2=0;}
}
}
Örnek 16: Bir buton ile 3 motorun kontrolü yapılacaktır. Butona;
1. kez basıldığında 1 nolu motor çalışacaktır.
2. kez basıldığında 2 nolu motor da devreye girecektir.
3. kez basıldığında 1 ve 2 nolu motor devreden çıkacak 3 nolu motor devreye girecektir.
4. kez basıldığında 3 nolu motor devreden çıkacak ve sistem başa dönecektir.
Mikrodenetleyici olarak 16F84A kullanılacaktır. Gerekli programı PICC dili ile yazınız.
#include<16F84A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
int8 i;
void main (void){
set_tris_a(0x10);
set_tris_b(0x00);
setup_timer_0(T0_EXT_H_TO_L | T0_DIV_1);
i=0;
set_timer0(0);
output_b(0b00000000);
while(1){
i=get_timer0();
switch (i){
case 1 :output_b(0b00000001);
break;
case 2 :output_b(0b00000011);
break;
case 3 :output_b(0b00000100);
break;
case 4 :output_b(0b00000000);
set_timer0(0);
break;
}
}
}
Örnek 17: Bir buton ile 3 motorun kontrolü yapılacaktır. Butona;
1. kez basıldığında 1 nolu motor çalışacaktır.
2. kez basıldığında 2 nolu motor da devreye girecektir.
3. kez basıldığında 1 ve 2 nolu motor devreden çıkacak 3 nolu motor devreye girecektir.
4. kez basıldığında 3 nolu motor devreden çıkacak ve 4 nolu motor devreye girecektir. 4 nolu motor
t1 kadar süre çalışıp devreden çıkacak ve sistem başa dönecektir.
Mikrodenetleyici olarak 16F84A kullanılacaktır. Gerekli programı PICC dili ile yazınız.
#include<16F84A.h>
#fuses XT,NOWDT,PUT,NOPROTECT
#bit Buton = 0x05.0
int8 T1ET,T1PT,sayici;
int1 T1IN,T1Q,z;
#INT_TIMER0
void Timer0Kesme(){
if (T1IN==1){
if (T1ET<T1PT){
T1ET=T1ET+1;
T1Q=0;}
if (T1ET>=T1PT){
T1ET=T1PT;
T1Q=1;}}
else{
T1ET=0;
T1Q=0;}
}
void main (void){
set_tris_a(0xFF);
set_tris_b(0x00);
setup_timer_0(T0_INTERNAL | T0_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
T1PT=2;
z=0;
sayici=0;
output_b(0x00);
while(TRUE){
if ((Buton==1) && (z==0) && (T1IN==0)){
sayici=sayici+1;
z=1;}
if (Buton==0){
z=0;}
switch (sayici){
case 1 :output_b(0b00000001);
break;
case 2 :output_b(0b00000011);
break;
case 3 :output_b(0b00000100);
break;
case 4 :output_b(0b00001000);
T1IN=1;
break;}
if (T1Q==1){
output_b(0x00);
T1IN=0;
sayici=0;
T1Q=0;}
}
}
//////// Standard Header file for the PIC16F84A device ////////////////
#device PIC16F84A
#nolist
//////// Program memory: 1024x14 Data RAM: 68 Stack: 8
//////// I/O: 13 Analog Pins: 0
//////// Data EEPROM: 64
//////// C Scratch area: 0C ID Location: 2000
//////// Fuses: LP,XT,HS,RC,NOWDT,WDT,PUT,NOPUT,PROTECT,NOPROTECT
////////
////////////////////////////////////////////////////////////////// I/O
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
// PORT_x_PULLUPS(), INPUT(),
// OUTPUT_LOW(), OUTPUT_HIGH(),
// OUTPUT_FLOAT(), OUTPUT_BIT()
// Constants used to identify pins in the above are:
#define PIN_A0 40
#define PIN_A1 41
#define PIN_A2 42
#define PIN_A3 43
#define PIN_A4 44
#define PIN_B0 48
#define PIN_B1 49
#define PIN_B2 50
#define PIN_B3 51
#define PIN_B4 52
#define PIN_B5 53
#define PIN_B6 54
#define PIN_B7 55
////////////////////////////////////////////////////////////////// Useful defines
#define FALSE 0
#define TRUE 1
#define BYTE int8
#define BOOLEAN int1
#define getc getch
#define fgetc getch
#define getchar getch
#define putc putchar
#define fputc putchar
#define fgets gets
#define fputs puts
////////////////////////////////////////////////////////////////// Control
// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE()
// Constants returned from RESTART_CAUSE() are:
#define WDT_FROM_SLEEP 3
#define WDT_TIMEOUT 11
#define MCLR_FROM_SLEEP 16
#define MCLR_FROM_RUN 27
#define NORMAL_POWER_UP 27
#define BROWNOUT_RESTART 26
////////////////////////////////////////////////////////////////// Timer 0
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(),
// SET_TIMER0() or SET_RTCC(),
// GET_TIMER0() or GET_RTCC()
// Constants used for SETUP_TIMER_0() are:
#define T0_INTERNAL 0
#define T0_EXT_L_TO_H 32
#define T0_EXT_H_TO_L 48
#define T0_DIV_1 8
#define T0_DIV_2 0
#define T0_DIV_4 1
#define T0_DIV_8 2
#define T0_DIV_16 3
#define T0_DIV_32 4
#define T0_DIV_64 5
#define T0_DIV_128 6
#define T0_DIV_256 7
#define T0_8_BIT 0
#define RTCC_INTERNAL 0 // The following are provided for compatibility
#define RTCC_EXT_L_TO_H 32 // with older compiler versions
#define RTCC_EXT_H_TO_L 48
#define RTCC_DIV_1 8
#define RTCC_DIV_2 0
#define RTCC_DIV_4 1
#define RTCC_DIV_8 2
#define RTCC_DIV_16 3
#define RTCC_DIV_32 4
#define RTCC_DIV_64 5
#define RTCC_DIV_128 6
#define RTCC_DIV_256 7
#define RTCC_8_BIT 0
// Constants used for SETUP_COUNTERS() are the above
// constants for the 1st param and the following for
// the 2nd param:
////////////////////////////////////////////////////////////////// WDT
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
// RESTART_WDT()
// WDT base is 18ms
//
#define WDT_18MS 8
#define WDT_36MS 9
#define WDT_72MS 10
#define WDT_144MS 11
#define WDT_288MS 12
#define WDT_576MS 13
#define WDT_1152MS 14
#define WDT_2304MS 15
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
// CLEAR_INTERRUPT(), INTERRUPT_ACTIVE(),
// EXT_INT_EDGE()
//
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H 0x40
#define H_TO_L 0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL 0x0B80
#define INT_RTCC 0x000B20
#define INT_RB 0x00FF0B08
#define INT_EXT_L2H 0x50000B10
#define INT_EXT_H2L 0x60000B10
#define INT_EXT 0x000B10
#define INT_EEPROM 0x000B40
#define INT_TIMER0 0x000B20
#list
PICC KOMUTLAR
õ
õõ