Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: AKAY989 - 20 Aralık 2022, 17:15:46

Başlık: while kullanımı
Gönderen: AKAY989 - 20 Aralık 2022, 17:15:46
unsigned int8 datalariokuyalim()
{
  unsigned int8 i, gelendatalar= 0;     
  for(i = 0; i < 8; i++){      while(!Data_Pin)
    delay_us(30);
    if(!Data_Pin)
      bit_clear(_data, (7 - i));
.
.
............
kod içerisinde yer alan
 while(!Data_Pin)
data pin i 0 iken
30 us bekle mi
data pin i 1 olana kadar bekle mi
olarak yorumlamalıyım...           
Başlık: Ynt: while kullanımı
Gönderen: Kırambor - 20 Aralık 2022, 18:07:51
Sanırım burada şöyle bir şey olacak. Kod for'un içine girecek ve while(!Data_pin)'i check edecek. Data pin'in değeri 0 olduğu sürece while(1) olacak ve kod orada kalacak ta ki datapin 1 olana kadar çünkü while()'ın içi 0 a dönecek. Sonrası zaten bekleme vs. Ben böyle düşünüyorum. 
Başlık: Ynt: while kullanımı
Gönderen: fide - 20 Aralık 2022, 18:39:37
Data_Pin 0 olduğunda 30 us bekle, eğer 1 ise 0 olana kadar bekle + 30us bekle.
Bunu Total olarak 8 defa döndür şeklinde.
Başlık: Ynt: while kullanımı
Gönderen: AKAY989 - 20 Aralık 2022, 19:50:44
Alıntı yapılan: fide - 20 Aralık 2022, 18:39:37Data_Pin 0 olduğunda 30 us bekle, eğer 1 ise 0 olana kadar bekle + 30us bekle.
Bunu Total olarak 8 defa döndür şeklinde.
cevap için teşekkür ederim
bunu konu olarak detaylı açıklamalı ne şekilde aratabilirim..
basit do while veya while döngüleri değil..
Başlık: Ynt: while kullanımı
Gönderen: mehmet - 20 Aralık 2022, 22:05:19
Sizin kafanızı karıştıran yazım farklılığı:
while(!Data_Pin) delay_us(30);

while(!Data_Pin)
  delay_us(30);
(Şart kodundan sonra bir satır varsa geçerli bunlar.)
---
while(!Data_Pin)
{
  delay_us(30);
}

Bunların hepsi aynı...
Başlık: Ynt: while kullanımı
Gönderen: AKAY989 - 20 Aralık 2022, 23:40:29
cevap icin tesekkur ederim ancak yazdiginiz kisimlari biliyorum.
konuyu anlatabilmek adina acik kaynak kodu ile aciklamak istiyorum
dht22 sicaklik nem sensoru mcu ya
50 us low >> 28-30 us high   gonderir ise sirasi gelen bit=0
50 us low >> 70    us high   gonderir ise sirasu gekeb but=1
olarak instruction book unda tanimlanmistir

Asagidaki kaynak kodu olusturan arkadas
      while (!(HAL_GPIO_ReadPin (DHT22_PORT, DHT22_PIN)));   // wait for the pin to go high
      delay (40);   // wait for 40 us

seklinde tanimladigi kisim  "wait for the pin to go high" seklinde belitmis
read pin eksi iken
40 us bekle seklinde anliyorum
eksi iken 40 us bekler ise
if tanimlamamizda sensorun girisi high yaptigi kisma denk geliyoruz karisiklik burada


ben sunu bu sekilde tanimlardim
while (dht22pin != 0); // eksi iken bekle
while (dht22pin != 1); // arti ike bekle
delay_us(30);          // sonucta 50us eksi  daha sonrasinda gelen artinin suresine gore bitin 0 mi 1 mi olduguna karar veriyoruz..
if (input(dht22pin)==0)
{...}


sorumdaki kaynak kood asagida
uint8_t DHT22_Read (void)
{
uint8_t i,j;
for (j=0;j<8;j++)
{
while (!(HAL_GPIO_ReadPin (DHT22_PORT, DHT22_PIN)));   // wait for the pin to go high
delay (40);   // wait for 40 us

if (!(HAL_GPIO_ReadPin (DHT22_PORT, DHT22_PIN)))   // if the pin is low
{
i&= ~(1<<(7-j));   // write 0
}
else i|= (1<<(7-j));  // if the pin is high, write 1
while ((HAL_GPIO_ReadPin (DHT22_PORT, DHT22_PIN)));  // wait for the pin to go low
}

return i;
}