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

Katılım
15 Ara 2009
Mesajlar
406
Puanları
16
Yaş
40
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);


}
 
Teşekkür ederim , fakat d portum giriş değilse anlık değerini almak istiyorum
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.
 

Ekli dosyalar

  • ccs_c_pin_out_port.zip
    64.3 KB · Görüntüleme: 7
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.
 
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.
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,241
Kullanıcılar
449,838
Son üye
sarioglu_55

Yeni konular

Çevrimiçi üyeler

Geri
Üst