Yürüyen Işık Yardım.

Başlatan elektro41, 08 Aralık 2011, 20:08:21

elektro41

Arkadaşlar 16f628 de C dilinde ledlerin içten dışa dıştan içe doğru yanmasını istiyorum ben deniyorum olmuyor ve aynı şeyi 2 kez tekrarlıyor biri istediğim kodları yazabilir mi yalnız kodlar basit olcak.
4 gün içinde yetiştirmem lazım.
Teşekkürler.
Benim yazdığım kod

#Include <16F628.h>
#use delay(clock=4000000)

void main ()
{
set_tris_b(0x00);
output_b(0x00);

basla:
output_toggle(pin_b7);
output_toggle(pin_b0);
delay_ms(200);
output_toggle(pin_b6);
output_toggle(pin_b1);
delay_ms(200);
output_toggle(pin_b5);
output_toggle(pin_b2);
delay_ms(200);
output_toggle(pin_b4);
output_toggle(pin_b3);
delay_ms(200);
output_toggle(pin_b3);
output_toggle(pin_b4);
delay_ms(200);
output_toggle(pin_b2);
output_toggle(pin_b5);
delay_ms(200);
output_toggle(pin_b1);
output_toggle(pin_b6);
delay_ms(200);
output_toggle(pin_b0);
output_toggle(pin_b7);
delay_ms(300);
goto basla;
}

ilhan_mkp

kardeş kimse bu şekilde balıktan kod yazmaz senin yazdıgın kodu paylaş ona yardım edilsin

z

#include <16F628.h>
#use delay(clock=4000000)

static const char dizi[] = { 0x81, 0x42, 0x24, 0x18, 0x24, 0x42};

void main()
{
  int  i;

  set_tris_b(0x00);

  while(1)
  {
     for (i = 0; i < 6; i++)
     {
        output_b(dizi);
        delay_ms(200);
     }
  }
}
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

elektro41

Teşekkürler ama benim yazdığım gibi daha basit olarak yok mu?

z

#Include <16F628.h>
#use delay(clock=4000000)

void main ()
{
set_tris_b(0x00);
basla:
output_b(0x81);
delay_ms(200);
output_b(0x42);
delay_ms(200);
output_b(0x24);
delay_ms(200);
output_b(0x18);
delay_ms(200);
output_b(0x24);
delay_ms(200);
output_b(0x42);
delay_ms(200);
goto basla;
}

Haklisin bu daha basit.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

elektro41

Benim istediğim buydu onuda kendim yazdım oldu, hoca ilk kez bize böyle ödev verdi herkes yabancı bu konulara sınıfta, Allahtan benim biraz altyapım var kendim öğrenmeye çalışıyorum.
Bide bu set_tris_b(0x00); parantezin içindekiler nasıl işliyor ve ne anlama geliyor,yazıyorum ama anlamını bilmiyorum.
Ayrıca benim yazdığım program.


#include <16F628.h>
#use delay(clock=4000000)

void main ()
{
set_tris_b(0x00);
output_b(0x00);

basla:
output_high(pin_b3);lkş
output_high(pin_b4);
delay_ms(200);
output_low(pin_b3);
output_low(pin_b4);
delay_ms(10);
output_high(pin_b2);
output_high(pin_b5);
delay_ms(200);
output_low(pin_b2);
output_low(pin_b5);
delay_ms(10);
output_high(pin_b1);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b1);
output_low(pin_b6);
delay_ms(10);
output_high(pin_b0);
output_high(pin_b7);
delay_ms(200);
output_low(pin_b0);
output_low(pin_b7);
delay_ms(10);
output_high(pin_b7);
output_high(pin_b0);
delay_ms(200);
output_low(pin_b7);
output_low(pin_b0);
delay_ms(10);
output_high(pin_b6);
output_high(pin_b1);
delay_ms(200);
output_low(pin_b6);
output_low(pin_b1);
delay_ms(10);
output_high(pin_b5);
output_high(pin_b2);
delay_ms(200);
output_low(pin_b5);
output_low(pin_b2);
delay_ms(10);
output_high(pin_b4);
output_high(pin_b3);
delay_ms(200);
output_low(pin_b4);
output_low(pin_b3);
delay_ms(10);
goto basla;
}

ilhan_mkp

şimdi şöyle bildiğim kadarıyla anlatmaya çalışayım

tris registeri piclerde portların giriş yada çkış olarak seçildiği yerdir ve 8 bittir

1 yapılan bit giriş 0 yapılan çıkış olur

neden 0x00 yazıldı ?

bu sekiz bitlik registri istersen binari ,desimal yada hex olarak yazabilirsin

00000000 binari

0 desimal

0x00 hex

ustalar neden hex yazdı dersen bunu benim açıklamam biraz zor ama

diğer mikro işlemcilerde bit bazında erişim yok piclerde var
birde değerleri hex vermek üretilen kod açısındanda önemli olmalı

yanlışlarım olabilir ama bu konuları merak etmen güzel tris yazmaçları gibi konuları öğrenmenin en iyi yolu datasheetini incelemektir




remo_35

İçten dışa doğru yakarken uçlardaki b0 ve b7 pinlerini tekrar yakmazsan daha güzel olmaz mı? Yoksa ödev öylemi istendi.