CCS C de herhangi bir porta değişken değerini byte olarak göndermek

Katılım
15 Ara 2009
Mesajlar
409
Puanları
16
Yaş
41
Merhabalar örneklere baktım fakat tam olarak ulaşamadım,aşağıdaki örnekde 8 bitlik bir değişken tanımladım veya başka bir portun anlık değerini başka bir porta göndermek istiyorum,

int değişken;
void main() {
output_b(değişken);
output_b(PORTD);


}
 
Bu işini görürü sanırım. En basit ve hızlısı olacak şekilde minik bir kod yazdım. Proteus simülasyonu ve CCS C kodu ekte. Kolay gelsin.
öncelikle teşekkür ederim, benim ihtiyacım pinleri okumak değil giriş olarak yapılandırmadığım portların o anki durumunu kopyalamak diyebiliriz.
 
Burada pinleri değişkene hatta stucter bir yapıya taşıdık.
Kod:
#include <18F45K22.h>
#device ADC=10

#FUSES NOWDT                    //No Watch Dog Timer

#use delay(internal=64000000)

unsigned int8 port_val,pin_check;

typedef struct{
   unsigned b0;
   unsigned b1;
   unsigned b2;
   unsigned b3;
   unsigned b4;
   unsigned b5;
   unsigned b6;
   unsigned b7;
} deneme1;  // port pinlerini taşıman için structer oluşturduk







deneme1 inp = {PIN_A0, PIN_A1, PIN_A2, PIN_A3, PIN_A4, PIN_A5, PIN_C0, PIN_C1}; // inp deneme structre ye taşıyıp input pini yapacağımız pinleri değişkenlere aktardık
deneme1 out = {PIN_B0, PIN_B1, PIN_B2, PIN_B3, PIN_B4, PIN_B5, PIN_B6, PIN_B7};  // out deneme structre ye taşıyıp output pini yapacağımız portb pinleri değişkenlere aktardık
deneme1 out1 = {pin_d0, pin_d1, pin_d2, pin_d3, pin_d4, pin_d5, pin_d6, pin_d7}; // out1 deneme structre ye taşıyıp output pini yapacağımız portd pinleri değişkenlere aktardık


void main()
{

set_tris_d(0);  // D portu komple çıkış
set_tris_b(0);  // B portu komple çıkış
set_tris_a(255); // A portu komple giriş
set_tris_c(3); // C portu ilk 2 pin giriş
delay_ms(1500);

   while(TRUE)
   {

     output_high(out1.b3);
     output_high(out1.b4);
     output_high(out1.b5);
     output_high(out.b4);
      

    if(input(inp.b1)) {output_high(out.b0); output_low(out1.b0);} else {output_low(out.b0); output_high(out1.b0);}
      
   }

}

Burada da regidter durumlarını structer yapısına aktararak registerleri structure değişkeni içinde kullandık. Bu sayede port veya pin durumlarını anlık değişkenlere atayabiliriz yada kullanabiliriz

Kod:
#include <18F45K22.h>
#device ADC=10

#FUSES NOWDT                    //No Watch Dog Timer

#use delay(internal=64000000)

unsigned int8 port_val,pin_check;

typedef struct den{
   unsigned b0 : 1;
   unsigned b1 : 1;
   unsigned b2 : 1;
   unsigned b3 : 1;
   unsigned b4 : 1;
   unsigned b5 : 1;
   unsigned b6 : 1;
   unsigned b7 : 1;
} deneme; // deneme adında 1 biti kullanılacak structure

 deneme PORTA;
 deneme PORTB;
 deneme PORTC;
 deneme PORTD;
 
 deneme LATA;
 deneme LATB;
 deneme LATC;
 deneme LATD;
 
 deneme TRISA;
 deneme TRISB;
 deneme TRISC;
 deneme TRISD;
 
#byte LATA = 0xF89
#byte LATB = 0xF8A
#byte LATC = 0xF8B
#byte LATD = 0xF8C

#byte TRISA = 0xF92
#byte TRISB = 0xF93
#byte TRISC = 0xF94
#byte TRISD = 0xF95

#byte PORTA = 0xF80
#byte PORTB = 0xF81
#byte PORTC = 0xF82
#byte PORTD = 0xF83


void main()
{

// ÇIKIŞLARIN REGİSTERLERİNİ SIFIRLADIK
LATD = 0x00;
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;

// PİNLERİN DİJİTAL DURUMLARINI AYARLADIK
TRISA = 0xFF;
TRISB = 0x00;
TRISD = 0x03;
TRISC.b0 = 1;
TRISC.b1 = 1;

//set_tris_d(0);
//set_tris_b(0);
//set_tris_a(255);
//set_tris_c(3);
delay_ms(1500);

   while(TRUE)
   {

      
      LATD.b7 = 1;
      //LATB.b7 = 1;

    
    
    if(PORTA.b1) {LATB.b2 = 1;} else {LATB.b2 = 0;}
    if(PORTA.b1) {LATB.b2 = 1;} else {LATB.b2 = 0;}
      

      
      output_d(PORTA); //PORTA giriş registeri portd ye aktarıldı
      //LATB = LATD; // port LATD çıkış registeri portb çıkışregisteri LATB ye aktarıldı
      if(LATD.b0){LATB.b7 = 1;} else { LATB.b7 = 0;} // portd D0 pini çıkış 1 ise portb B0 pini 1 (high) yap değilse 0(low) yap
   }

}

umarım yardımcı olmuştur.
 
harika bir açıklama ve bilgi paylaşımı olmuş emeğinize sağlık çok teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…