BASIC kullanıcılarını C'ye alıştırma turları

Başlatan bunalmis, 28 Ekim 2011, 18:48:32

rree

#define P1TCON    *(volatile unsigned char*)0x01C0

Main:
     P1TCON =0;  //Hata verdi CCS bu tanım geçersimi veya nerdede yanlış yaptım.

muhittin_kaplan

eğer a=1 ve b=0 a eşit değilse yi nasıl yazıyorsunuz ?

ErsinErce

mantıksal olarak başka türlü yorumlanarak da yazılabilir ama dediğinizin birebir karşılığı şu şekilde

if(!((a==1)&&(b==0))){

}

omereliusuk

Alıntı yapılan: muhittin_kaplan - 12 Ocak 2012, 20:31:09
eğer a=1 ve b=0 a eşit değilse yi nasıl yazıyorsunuz ?
burada bir virgül eksik gibi geliyor.
if((a==1)&&(b!=0)){}


if(!((a==1)&&(b==0))){}

ikisi farklı şeyler değil mi?

ErsinErce

evet ikisi farklı, biraz koşulların netleşmesi lazım, yazılı kısmı olayın parantezi gibi görüp o cevabı yazdım
ama sizin dediğiniz gibide olabilir

muhittin_kaplan

eğer (a=1 ve B=0) değilse, sorunun doğrusu

omereliusuk

Alıntı yapılan: muhittin_kaplan - 13 Ocak 2012, 12:54:04
eğer (a=1 ve B=0) değilse, sorunun doğrusu
if(!(a && !b));

bir de a sadece 1 mi olacak yoksa 0 harici herhangi bir sayı mı? bu da önemli. çünkü a değeri 0 değilse her zaman 1 dir. ama sadece 1 durumu biraz daha farklı.

omereliusuk

bir de biz neden yazdığımız metni değiştiremiyoruz? ben bazen düzeltme yapmak istiyorum ama değiştirme butonu yok. bu benim için ciddi bir sorun.

muhittin_kaplan

00
01
10----Bunun dışında bir olasılıkta işlemi yapsın
11

omereliusuk

if(!(a && !b));

a=1;
b=0;
sonuç olarak a=1 olduğu zaman durum doğru; b=0 olduğu zaman değilini aldığımız için durum doğru;
her iki durum doğru olduğu için sonuç doğru;
bütün bunların değilini aldığımız için durum yanlış; parantez dışına çıktı.

diğer hallerde durum doğru işlem yapılıyor.

rree

#include <16F628A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=20000000)

#define PortB    *(volatile unsigned int8*)0x06
#define B0       *(volatile unsigned int1*)0x30
#define TrisB    *(volatile unsigned int8*)0x86

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   //TODO: User Code
   TrisB=0x00;
     While(True)
      {
         
         B0=0;
         Delay_ms(1000);
         B0=1;
         Delay_ms(1000);
      }  

}

  CCS 4.110 hatasız derliyor.Proteus da  portb de hiçbir değişiklik yok.
Asmbler kotları şöyle
....................          B0=1;
0046:  BSF    30.0
Ben hala   burada kaldım.  #define B0       *(volatile unsigned int1*)0x30  burayı anlamadım. ikinci * görevi nedir.

fahri-

CCS de

portb b0' ı 1ve 0 yapmak için:

output_high(pin_b0);// high yapar
output_low(pin_b0); //low yapar.


z

Alıntı yapılan: rree - 14 Ocak 2012, 00:20:46
Ben hala   burada kaldım.  #define B0       *(volatile unsigned int1*)0x30  burayı anlamadım. ikinci * görevi nedir.

P diye int bir pointer tanimla
A diye int bir degisken tanimla

P ye A nin adresini ata

Sonra da P nin point ettigi yere 0x10 sayisini yukle.

Bu kodu yaz ben sana ikinci * in gorevini aciklayayim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

rree

volatile unsigned int8 *P,A;

void main()

    P=&A;
   *P=0x10;

Klein

Peki P integer pointer , A ise long olsaydı

*p = 0x10 atamasını yine yapabilir miydin?