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,118
Mesajlar
915,146
Kullanıcılar
449,822
Son üye
hamidettin

Yeni konular

Çevrimiçi üyeler

Geri
Üst