CCS de çıkış olan port okunur?

Başlatan emin1, 05 Mayıs 2012, 11:41:35

ziyaretci


salihonur

Porta çıkış verip tekrar portu okumak yerine if şartları ile bir değişkeni yazdırsan da ondan sonra porta versen daha iyi olur. Örneğin;

byte PORTB_BYTE;

if(an7<oran)
  bit_set(PORTB_BYTE, 0);
else
  bit_clear(PORTB_BYTE, 0);


if(an6<oran)
  bit_set(PORTB_BYTE, 1);
else
  bit_clear(PORTB_BYTE, 1);

...

if(an1<oran)
  bit_set(PORTB_BYTE, 6);
else
  bit_clear(PORTB_BYTE, 6);

if(an0<oran)
  bit_set(PORTB_BYTE, 7);
else
  bit_clear(PORTB_BYTE, 7);

PORTB = PORTB_BYTE;


DURUM_OKU = PORTB_BYTE;



coderun

çıkış olarak yönlendirdiğin bir portu okumak yani o anda çıkışın verisini almaktır. bunu CCS C ile şu şekilde yapabilirsin:
1) Örneğin D portunu 0XAA değerine göre çıkış verdirelim.
2) Daha sonra D portunu okuyarak o andaki çıkış değerini B portuna yazalım.
3) Sonuçta D portu ile B portu aynı olacak..

Bunun için input_d(); komutunu kullanacağız. input_x(); komutu ile ilgili pot çıkış olarak yönlendirilse bile portu giriş olarak yönlendirip okur.
Bu komutu kullanmadan ilgili port için kesinlikle set_tris_x(); ile giriş/çıkış ayarlaması yapılmalıdır.


#include <16f877a.h> 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(d)

main()  
{ 
  set_tris_d(0x00); // port d için giriş çıkış ayarlaması 
 output_d(0xff);
 while(1)
{
  output_b(input_d()); // d portu okundu ve b portuna yazıldı

// .
// .
// .

 }
}


RaMu

Ben önceki mesajımda biraz uzatmışım ama garanti yoldur sıkıntı yok.
Evet swap değişkenin digit lerini yer değiştirmek için kullanılıyor,
portu okumak için biraz eğlenceli bir yol, ama bazı etkisizliklerinden ötürü iyi bir yol, asmdede çok fazydası oluyor özelliği.

yine yazdığıma benzer olan bir yöntemide denedim,
vaktim olursa ayrıntılarınıda paylaşırım,

kısaca;
yine misal 16f877 için portb okunacak diyelim,

#byte  portb=0x06 ile tanımladın,

//sonra programda istediğin yerde,

değişken=portb;

dediğinde artık değişken içinde portb ye ne yüklemişsen o bulunur,
ve portb çıkışsa çıkış kalır,
girişse giriş kalır,
ne ayarlanmışsa değiştirmez öyle bir problemi olmaz,
input.....  fonksiyonunu kullanmak pek mantıklı değil bence.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

rree

#19
     Burada belki konu başlığı tam uymuyor olabilir.
Örneğimde  port okuma derken pin bazında düşündüm.
input_x() veya input_b fonksiyonları stadart io tanımlı pini girişe çevirecektir.Pin giriş çıkış durumunu
değiştirmeden  pini okumam ihtiyacı oldu.

#define Role1 Pin_A2 böyle bir tanımlama yaptık varsayalım.
Fast veya standart io önceden ayarlanmış bir programda Output_bit(Role1 ,0) komutu işlenirken.
Kesmede prosodüründe bulunan bir komut aynı pini değiştirmiş olabilir. Output_bit(Role1 ,1)

Role1 bağlı port pini öğrenmek istediğimizde. Const yapıdaki bir komut dizisi ile öğrenmeye çalıştığımızda
programımız statik bir yapıya  bürünmektedir. Proje gelişmesi esnasında ben Role1 in pin değerini başka bir pin
bağlamak için #define Pin_B4  tanımı ile değiştirebilmeliyim.Dinamik  program düşüncesinde adreslemek için dolaylı adresleme tekniğini sfr kayıtcılarını devreye en iyi şekilde c dilinde pointerler önplana çıkmaktadır.
Pointerler dinamik yapı sağlarken ,  daha fazla komutlar içermektedir.