Selam arkadaşlar PİC de biraz acemiyiz sizlerden yardım talep ediyoruz...Aşağıdaki programda lambalar trafik ışık sistemine göre yanıyor. a0 girişini 1 yaptığımda basla komutu devreye giriyor ve bazı lambalar sönüp bazıları yanık kalıyor. 10 saniye sonra trafik sistemi kaldığı yerden devam ediyor. Yaptığım program isis de çalışıyor lakin boarda bağladığım pic de düzgün çalışmıyor. input sartını görmeden 1. while komutuyla 2. while komutunu döngü yapmadan direk okuyup geçiyor. ve bazen karışık kendisine göre çalıştırıyor. Trafik ışık sistemine Alternatif müdahale önerileriniz varsa sevinirim.
#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6
/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{
set_tris_a(0xff);// a portu giriş
set_tris_b(0x00);// b portu çıkış
output_b(0x00);
while(1)
{
git:
output_high(pin_b0);
output_high(pin_b6);
delay_ms(3000);
{
if(input(pin_a0)==1)
goto basla;
}
output_high(pin_b1);
output_high(pin_b5);
delay_ms(2000);
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b6);
output_low(pin_b5);
delay_ms(20);
{
if(input(pin_a0)==1)
goto basla;
}
output_high(pin_b2);
output_high(pin_b4);
delay_ms(3000);
{
if(input(pin_a0)==1)
goto basla;
}
output_high(pin_b1);
output_high(pin_b5);
delay_ms(2000);
output_low(pin_b2);
output_low(pin_b1);
output_low(pin_b4);
output_low(pin_b5);
delay_ms(20);
{
if(input(pin_a0)==1)
goto basla;
}
}
while(1)
basla:
{
output_high(pin_b3);
delay_ms(500);
output_low(pin_b3);
delay_ms(500);
output_high(pin_b4);
output_high(pin_b2);
output_high(pin_b0);
output_low(pin_b6);
output_low(pin_b1);
output_low(pin_b5);
delay_ms(10000);
goto git;
}
}
C ile basic karıştırırsan normal çalışmaması dogal git; ve goto basla; gibi komutlar C olmaz komple C yazmak istiyorsan basic komutlarını silin yerine C komut satırlarını kullanın.
Akış diyagramı çalışınız.
@bulut_01, C'de kullanılmasına iyi gözle bakılmasa da "goto" vardır.
@ican43, "super loop" nedir, nasıl kullanılır, goto kullanmadan nasıl program yazılır öğrenmen lazım. Emeklemeden koşmaya çalışmışsın. önce tek led yak söndür, tek buton oku, bu butona göre ledi yakıp söndür. Koda bakınca okuyasım gelmedi.
Goto kullanmayı geçtim bari etiketleri doğru yerleştirseydin. while ve { parantez arasına etiket koymak...
Merhaba,
Isis simülasyon esnasında bazı şeyleri gözardı edebiliyor.Sakıncası yoksa isis şemanızı da verirseniz belki çalışmayan yer de bulunabilir.Kolay gelsin.
Sağolun haklısınız. lakin acil bir projede lazım oldu. goto basla, git yerine ani olarak yönlendirme komutu ne kullanabilirim, yardımcı olursanız sevinirim.
Selam
@ican43;
Yazdığınız kodlardan anladığım kadarıyla örnek program yazdım.
Ben de ISIS'te çalışıyor. Devrenizde deneyip geri bildirim yaparsanız sevinirim.
Saygılar
Örnek programım şu şekilde çalışıyor;
1)PORTA.0 eşit değil 1 ise;
1a)PORTB.0=1
1b)PORTB.6=1
1c)3 saniye bekle
2)PORTA.0 eşit değil 1 ise;
2a)PORTB.1=1
2b)PORTB.5=1
2c)2 saniye bekle
2d)PORTB.0=0
2e)PORTB.1=0
2f)PORTB.6=0
2g)PORTB.5=0
2h)20 milisaniye bekle
3)PORTA.0 eşit değil 1 ise;
3a)PORTB.2=1
3b)PORTB.4=1
3c)3 saniye bekle
4)PORTA.0 eşit değil 1 ise;
4a)PORTB.1=1
4b)PORTB.5=1
4c)2 saniye bekle
4d)PORTB.2=0
4e)PORTB.1=0
4f)PORTB.4=0
4g)PORTB.5=0
4h)20 milisaniye bekle
5)PORTA.0 eşit 1 ise;
5a)PORTB.3=1
5b)0.5 saniye bekle
5c)PORTB.3=0
5d)0.5 saniye bekle
5e)PORTB.4=1
5f)PORTB.2=1
5g)PORTB.0=1
5h)PORTB.6=0
5i)PORTB.1=0
5j)PORTB.5=0
5k)10 saniye bekle
6)1'e git
#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6
/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{
//Aşağıdaki setuplar A portu dijital I/O yapar
setup_adc_ports(NO_ANALOGS); //ANALOG giriş yok
setup_adc(ADC_OFF); //ADC birimi devre dışı
setup_comparator(NC_NC_NC_NC);// OPAMP birimi devre dışı
set_tris_a(0xff);// a portu giriş
set_tris_b(0x00);// b portu çıkış
output_b(0x00);
while(TRUE)
{
if(input(pin_a0)!=1)//1
{
output_high(pin_b0);//1a
output_high(pin_b6);//1b
delay_ms(3000);//1c
}
if(input(pin_a0)!=1)//2
{
output_high(pin_b1);//2a
output_high(pin_b5);//2b
delay_ms(2000);//2c
output_low(pin_b0);//2d
output_low(pin_b1);//2e
output_low(pin_b6);//2f
output_low(pin_b5);//2g
delay_ms(20);//2h
}
if(input(pin_a0)!=1)//3
{
output_high(pin_b2);//3a
output_high(pin_b4);//3b
delay_ms(3000);//3c
}
if(input(pin_a0)!=1)//4
{
output_high(pin_b1);//4a
output_high(pin_b5);//4b
delay_ms(2000);//4c
output_low(pin_b2);//4d
output_low(pin_b1);//4e
output_low(pin_b4);//4f
output_low(pin_b5);//4g
delay_ms(20);//4h
}
if(input(pin_a0)==1)//5
{
output_high(pin_b3);//5a
delay_ms(500);//5b
output_low(pin_b3);//5c
delay_ms(500);//5d
output_high(pin_b4);//5e
output_high(pin_b2);//5f
output_high(pin_b0);//5g
output_low(pin_b6);//5h
output_low(pin_b1);//5i
output_low(pin_b5);//5j
delay_ms(10000);//5k
}
}
}
:1000000000308A0019280000223084008313000881
:10001000031918280130F800F701F70B0D28F80B29
:100020000C284A30F700F70B13281628800B0A28F3
:10003000080003081F39830083161F149F141F151F
:100040009F1107309C0083131F149F141F159F11CD
:1000500083121F10073083169C00050885000330AB
:10006000F700F70B31281C0883120D13FF3083169D
:100070008500003086008312860105184828061482
:1000800006170C30A100FA30A2000420A10B43286F
:1000900005185A28861486160830A100FA30A200E6
:1000A0000420A10B4E280610861006138612143069
:1000B000A200042005186528061506160C30A100BC
:1000C000FA30A2000420A10B6028051877288614B6
:1000D00086160830A100FA30A2000420A10B6B287C
:1000E00006118610061286121430A2000420051C88
:1000F000962886150230A100FA30A2000420A10B38
:100100007C2886110230A100FA30A2000420A10B45
:100110008428061606150614061386108612283043
:10012000A100FA30A2000420A10B91283D28630011
:02400E00393F38
:00000001FF
;PIC16F877A
Selam
@kimlenbu;
Süper loop nedir? Biraz açıklar mısınız? Ya da kaynak önerir misiniz?
Saygılar
Alıntı yapılan: kimlenbu - 02 Nisan 2018, 14:27:47@bulut_01, C'de kullanılmasına iyi gözle bakılmasa da "goto" vardır.
@ican43, "super loop" nedir, nasıl kullanılır, goto kullanmadan nasıl program yazılır öğrenmen lazım. Emeklemeden koşmaya çalışmışsın. önce tek led yak söndür, tek buton oku, bu butona göre ledi yakıp söndür. Koda bakınca okuyasım gelmedi.
Goto kullanmayı geçtim bari etiketleri doğru yerleştirseydin. while ve { parantez arasına etiket koymak...
Hay allah Neşelendirdin beni yahu :)
Arkadaşlar bakıp çıkacaklara sözüm yok ama bu işle uğraşacaklar bi zahmet devreyi kursun. Sanal yerine reelde deneme yapsın. Gürültü ile lehimle, fiziksel olarak parçalarla tanışsınlar bi zahmet. Sözüm özellikle mühendislik öğrencilerine. Yarın bi yerde işe başlarsanız isisde denedim çalışıyordu demezsiniz herhalde
Silver wolf Allah razı olsun, program İSİS de çalışıyor lakin pic yüklediğimde pin a0 şartını da aramadan hepsini birden döngüde dolanıyor. Yani lambalar yanıyor, sürekli döngü yapmadan pin a0 sanki 1 miş gibi devam edip gidiyor. İsteğim trafik lambaları döngüsü olsun lakin a0 girişi 1 olunca lambalar benim istediğim gibi 10 saniye konum değiştirip, sonra trafik sistemi kaldığı yerden devam etsin. Biraz daha yardımcı olursanız sevinirim.
Selam
@ican43;
PortA.0'a pulldown buton bağladığını varsaydım.
Buton'a bastığında 2 veya 3 saniye işlemini yapacak ve 10 saniyelik kısım çalışacaktır. Buton hala basılı ise üç port yanık, üç port sönük kalacak. Buton basılıp bırakıldıysa 10n saniyelik işlemi 1 defa yapacak ve normal çalışmasına devam edecektir.
Şemanı yüklersen diğer arkadaşlardan da bilgi alabilirsin.
Saygılar
#include <16f877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(a)//port yonlendirme komutları a portu için geçerli
#use fast_io(b)//port yonlendirme komutları b portu için geçerli
#byte port_a=5
#byte port_b=6
unsigned long int i=0;
int1 izin=0;
/*************************ANA PROGRAM FONKSİYONU*********************/
void main()
{
setup_adc_ports(NO_ANALOGS); //ANALOG giriş yok
setup_adc(ADC_OFF); //ADC birimi devre dışı
setup_comparator(NC_NC_NC_NC);// OPAMP birimi devre dışı
set_tris_a(0xff);// a portu giriş
set_tris_b(0x00);// b portu çıkış
output_b(0x00);
while(TRUE)
{
if(input(pin_a0)!=1&&izin==0)
{
output_high(pin_b0);
output_high(pin_b6);
for(i=0;i<3000;i++)
{
if(input(pin_a0)==1)
izin=1;
delay_ms(1);
}
}
if(input(pin_a0)!=1&&izin==0)
{
output_high(pin_b1);
output_high(pin_b5);
for(i=0;i<2000;i++)
{
if(input(pin_a0)==1)
izin=1;
delay_ms(1);
}
output_low(pin_b0);
output_low(pin_b1);
output_low(pin_b6);
output_low(pin_b5);
delay_ms(20);
}
if(input(pin_a0)!=1&&izin==0)
{
output_high(pin_b2);
output_high(pin_b4);
for(i=0;i<3000;i++)
{
if(input(pin_a0)==1)
izin=1;
delay_ms(1);
}
}
if(input(pin_a0)!=1&&izin==0)
{
output_high(pin_b1);
output_high(pin_b5);
for(i=0;i<2000;i++)
{
if(input(pin_a0)==1)
izin=1;
delay_ms(1);
}
output_low(pin_b2);
output_low(pin_b1);
output_low(pin_b4);
output_low(pin_b5);
delay_ms(20);
}
if(izin==1)
{
output_high(pin_b3);
delay_ms(500);
output_low(pin_b3);
delay_ms(500);
output_high(pin_b4);
output_high(pin_b2);
output_high(pin_b0);
output_low(pin_b6);
output_low(pin_b1);
output_low(pin_b5);
delay_ms(10000);
izin=0;
}
}
}
:1000000000308A001928000024308400831300087F
:10001000031918280130F800F701F70B0D28F80B29
:100020000C284A30F700F70B13281628800B0A28F3
:10003000080003081F398300A101A00122108316C4
:100040001F149F141F159F1107309C0083131F144A
:100050009F141F159F1183121F10073083169C00D9
:10006000050885000330F700F70B34281C088312BD
:100070000D13FF3083168500003086008312860141
:1000800005185B2822185B2806140617A101A00199
:1000900021080B3C031C5B28031D52282008B73C99
:1000A000031C5B28051822140130A4000420A00AB8
:1000B0000319A10A482805187D2822187D288614CE
:1000C0008616A101A0012108073C031C7628031D08
:1000D0006D282008CF3C031C762805182214013017
:1000E000A4000420A00A0319A10A632806108610A0
:1000F000061386121430A40004200518982822182C
:10010000982806150616A101A00121080B3C031C26
:100110009828031D8F282008B73C031C9828051831
:1001200022140130A4000420A00A0319A10A852882
:100130000518BA282218BA2886148616A101A0012B
:100140002108073C031CB328031DAA282008CF3C24
:10015000031CB328051822140130A4000420A00AAF
:100160000319A10AA028061186100612861214305F
:10017000A4000420221CDA2886150230A300FA30DD
:10018000A4000420A30BBF2886110230A300FA307C
:10019000A4000420A30BC728061606150614061390
:1001A000861086122830A300FA30A4000420A30B86
:0801B000D4282210402863004E
:02400E00393F38
:00000001FF
;PIC16F877A