Yıldız Teknik Üniversitesi

Bilgisayar Mühendisliği Bölümü

Gerçek Zaman Sistemleri Dönem Projesi











Ortamın Aydınlığının Mikro İşlemci

Kontrolüyle Belirlenmesi












Hazırlayan: Şadi Evren ŞEKER

Öğretim Görevlisi: Prof. Dr. Coşkun Sönmez









1.Giriş

Bu projedeki amaç,gerçek zaman sistemleri dersinde görülmüş olan konuların bir uygulama üzerinde denenerek gerçekleştirilmesidir. Bir projenin bütün konuları kapsaması oldukça zor olduğu için konulardan en fazla kısmını kapsayacak olan bir proje düşünülmüş ve uygulanmıştır.


Projenin hedefi, ortamın aydınlık değerinin bulunarak hedeflenen aydınlık değerine getirilmesidir. Bu işlem için bir mikro işlemci, bir deney kiti, bir LDR elemanı, aydınlık kaynağı olarak bir LED ve iki adet dirençten oluşmaktadır.


İlgili elemanların dizilmesinden sonra LDR elemanından gelen bilgilerin kit üzerindeki çeviricilerle hesaplanması ve ADC ile okunmasından sonra, işlemci hedef aydınlığa göre LED’in aydınlığını değiştirmektedir.


Hedeflenen başarı, hedef değere tam oturan bir grafik elde etmektir. Uygulamada aydınlık değeri hedef aydınlık değerine gelene kadar LED ışık değeri arttırılmakta ancak bu değerden sonra artış kesilmektedir. Dolayısıyla artışın hedef değerini geçmesi mümkün değildir.




2.Projenin Tasarımı


Hedef doğrultusunda bir donanım tasarımı yapılmış, donanıma kontrol elemanı olarak bir işlemci görevlendirilmiştir.


2.1.Işık Şiddetini Ölçen Eleman (LDR)

Işığın şiddeti doğrultusunda bazı maddelerin dirençleri değişmektedir. Bu değişkenlik eleman olarak kullanılmalarına izin vermektedir. Bu tip elemanlara LDR (Light Dependent Resistors) denilmektedir.


LDRlerin ışık şiddetleri ve direnç değerleri arasındaki bağlantı aşağıda verilmiştir.


R = AL -


Bu ilişkideki A ve değerleri sabit olup kullanılan malzemenin karakteristiğine göre değişmektedir. L değeri ise aydınlığı lux cinsinden vermektedir.








  1. LDR elemanının davranışı

Yukarıdaki figür, ışık birimi olan lux ile dirneç birimi olan ohm arasındaki bağlantıyı göstermektedir.


2.2.LDR’nin düzeneğe bağlanması

Bu devrenin işlemci tarafından algılanabilmesi için analogdan dijitale çevirici bir ek devreye ihtiyaç vardır. Bu devre deney kitinin üzerinde hazır olarak sunulmuştur ancak okuduğu değer gerilim farkı olduğu için, gerilim farkını oluşturucu ikinci bir tasarım gerekmiştir.


Bu durumda LDR elemanının bir direnç ile birlikte aşağıdaki şekilde bağlanması gerilim farkının ADÇ ile başarılı bir şekilde okunmasını sağlamaktadır:


  1. LDR üzerinden gerilim farkının okunması.



Figürde görüldüğü gibi, 5 Voltluk güç kaynağı 10 Kohm değerine kadar LDR’nin değer değiştirmesi durumunda ADC’ye bu gerilim farkını iletmektedir. 10Kohm değeri tamamen LDR ile yapılan ölçümler sonucunda öğrenilmiştir. ( Bulunabilen en aydınlık ortamda ve en karanlık ortamda LDR’nin verdiği direnç ölçülmüştür.) Gerilim farkı hesabı aşağıdaki figürde gösterilmiştir.


  1. Gerilim farkının hesaplanması


Yukarıdaki figürde görüldüğü üzere iki direncin LDR örneğinde bağlanması gibi, ADC üzerinden okunan gerilim farkı R2* Vcc / (R1 + R2) olarak hesaplanmaktadır.


Bu direnç değeri aşağıdaki figürde gösterildiği gibi deney kitinin ADC ucuna bağlanmıştır:
















  1. LDR’nin ADC bağlantısı


Yukarıdaki figürde görüldüğü üzere, deney kiti üzerinde bulunan ADC girişlerinden 2. ve 4. ayaklar üzerine bağlantı yapılmış bu sayede tasarlanan LDR düzeneğindeki gerilim farkının sağlıklı bir şekilde okunması sağlanmıştır.


2.3.Işık Kaynağı olarak LED

Işık kaynağı olarak herhangi bir aydınlatma elemanı kullanılabileceği gibi, sınırlı zamanın getirmiş olduğu limitlerden dolayı işlemci tarafından kontrol edilmesi en kolay eleman olan LED tercih edilmiştir. Bu sayede Dalga genişlik modüulasyonu sayesinde kolayca LED’in sağladığı aydınlık değeri değiştirilebilecektir.


  1. LED’in ilgili port pinine bağlanması


LED yukarıda gösterildiği gibi, ilgili port pinine bir direnç vasıtası ile bağlanmıştır. Ve ışık değeri aşağıdaki figürde gösterildiği gibi değiştirilmektedir:


  1. PWM, yardımı ile LED aydınlığının ayarlanması


Yukarıdaki figürde 3 ayrı dalganın farklı dalga genişlikleri ile gösterimi bulunmaktadır. İlk örnekte eşik değer ortada tutulmuş ve LED üzerine gelen akım (ve dolayısıyla gerilim farkı) ortalama bir değerde tutulmuştur. 2. örnekte eşik değer daha aşağılara alınarak dalga genişliği arttırılmış (dolayısıyla integrali ile bulunan (dalganın altında kalan alan) ) gerilim farkı maksimize edilmiştir. Son örnekte ise eşik değeri yükseltilmiş ve ancak çok az bir gerilim farkı uygulanmıştır.


İnsan gözü çok hızlı şekilde verilen bu dalgaları yakalayamamakta ancak aydınlık değerini değişmiş olarak görmektedir. Eşik değeri ayarlandıktan sonra bu dalgaların arka arkaya verilmesi ile LED’in aydınlık değeri ayarlanmış olmaktadır.


2.4.Deney Kitinden Düğme Hareketi Algılama


Bu projede ihtiyaç duyulan bir diğer eylem ise hedef bir aydınlık değerinin verilmesidir. Bunun için kullanıcı deney kiti üzerindeki tuşları kullanarak, yukarı veya aşağı yönde hedef aydınlığını değiştirmektedir. Hedef aydınlığı ve ortamın okunan aydınlığı ve LED üzerine verilen aydınlık çıkışı deney kitinin sunmuş olduğu LCD ekran üzerinde gösterilmektedir.


  1. PIN basılmasını algılayan düzenek

Yukarıdaki örnekte görüldüğü üzere, PIN basılmadığı sürece, PIN üzerinden akım geçmekte, ancak PIN’e basılması durumunda PIN’in bulunduğu kol topraklanmakta dolayısıyla, deney kitine giden akım kesilmektedir. Deney kiti bu akım farklılıklarını Akım olduğu zaman binary 1 olmadığı zaman ise binary 0 olarak okumaktadır.


2.5.Tasarlanan Donanımın Deney Kiti Üzerindeki Bağlantıları:


Bu bölüme kadar anlatılan 3 düzeneğin ( LDR, LED ve PIN düzenekleri) deney kitine bağlantı aşağıda gösterilmiştir.



  1. Deney kiti şeması


ADC üzerinden okunan LDR bilgisi şemanın ADC ayaklarına girmekte ve işlemci üzerine 60. bacak olan ADC1/PF1 üzerinden bağlanmaktadır. PIN bağlantıları şemada B1 den B5’ e kadar gösterilen butonlar olup bu projede sadece 2 buton kullanılmıştır. Yukarı ve aşağı butonları olan bu butonlar ise işlemciye 47 ve 51. bacaklar olan B1 ve B5 ayaklarından girmektedir.


Son olarak LED bağlantısı için Buzzer üzerinden geçmekte olan OC3C / INT 5 / PE 5 bağlantısı olan 7. bacak kullanılmıştır.


3.Projenin Gerçekleştirilmesi


Proje aşağıda görülen AVR-MT-128-A deney kiti ile aşağıdaki şekilde gerçeklenmiştir:




  1. AVR-MT-128-A deney kiti görüntüsü (ön görüntü altta ve arka görüntü yukarıda)



Deney kitinin kullanılan LCD ve butonları ön yüzde görülmektedir. Deney kitinin besleme girişi, Emulator, RS 232 , ADC ve buzzer girşileri ise arka yüzde görülmektedir.



3.1.Çevre elemanlarının deney kitine bağlanması



Çevre elemanları bağlandıktan sonra deney kiti aşağıdaki şekilde görülmektedir:







  1. Çevre elemanları bağlanmış deney kiti



3.2.İşlemcinin Kodlanması

İşlemci kendine özgü bir takım komutları bulunmasına rağmen C dilinde programlanmaktadır. Proje kapsamında gereken akış diyagramı aşağıdaki şekilde verilmiştir:



  1. İşlemci algoritmasının akış diyagramı


Yukarıdaki diyagramda görüldüğü üzere sayac sürekli olarak arttırılmaktadır, Pin’den değer gelemsi durumunda sayac Maksimum değere sahipse sayac 0 değerine getirilmekte benzer şekilde sayacın eşik değerini aşmasında da Pin 0 değerine getirilmektedir. Bu algoritmayı kapsayan kod parçası aşağıda verilmiştir:


interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

// Reinitialize Timer 0 value

TCNT0=256-5;

// Place your code here

sayac++;

if (sayac>=sayac_esik)

{

PORTE.5=1;

if (sayac>=sayacmaks)

{

sayac=0;

}

}

else PORTE.5=0;

if (sayac2) sayac2--;

else

{

sayac2=100;

bayrak=1;

}


}


  1. Sayac işleyen kod parçası



3.3.İşlemcinin üzerinde çalıştırılan kod:


Aşağıdaki kodun ilk 50 satırı, standart ekleme satırlarını içermektedir.120-140 satırları arasında ise önceki bölümde anlatılan akış diyagramı kodu bulunmaktadır.168-221 satırları arasında ise LCD programlaması da dahil olmak üzere kodun sonsuza kadar çalışmasını içeren ana blok bulunmaktadır. 228. satır sonrası ise standart düşük seviye prosedürleri içermektedir.


1

/*****************************************************

2

This program was produced by the

3

CodeWizardAVR V1.24.7f Standard

4

Automatic Program Generator

5

© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.

6

http://www.hpinfotech.com

7

e-mail:office@hpinfotech.com

8

 

9

Project : Gerçek Zamanda Kontrol

10

Version : 1.00

11

Date : 07.06.2006

12

Author : Şadi Evren Şeker

13

Comments:

14

 

15

 

16

Chip type : ATmega128

17

Program type : Application

18

Clock frequency : 16,000000 MHz

19

Memory model : Small

20

External SRAM size : 0

21

Data Stack size : 1024

22

*****************************************************/

23

 

24

#include <mega128.h>

25

 

26

// Alphanumeric LCD Module functions

27

#asm

28

.equ __lcd_port=0x15 ;PORTC

29

#endasm

30

#include <lcd.h>

31

#include <delay.h>

32

#include <stdio.h>

33

 

34

 

35

#define RXB8 1

36

#define TXB8 0

37

#define UPE 2

38

#define OVR 3

39

#define FE 4

40

#define UDRE 5

41

#define RXC 7

42

 

43

#define FRAMING_ERROR (1<<FE)

44

#define PARITY_ERROR (1<<UPE)

45

#define DATA_OVERRUN (1<<OVR)

46

#define DATA_REGISTER_EMPTY (1<<UDRE)

47

#define RX_COMPLETE (1<<RXC)

48

 

49

#define sayacmaks 255

50

 

51

// Declare your global variables here

52

char dizi1[20];

53

int LDR,LDRmaks,LDRmin;

54

int LED,LEDmaks,LEDmin;

55

int sayac=0,sayac_esik=0;

56

int sayac2=100;

57

char bayrak;

58

 

59

//----- header işlevler ---------

60

void baslat_mega128 (void);

61

 

62

//-------------------------------

63

 

64

// USART1 Receiver buffer

65

#define RX_BUFFER_SIZE1 8

66

char rx_buffer1[RX_BUFFER_SIZE1];

67

 

68

#if RX_BUFFER_SIZE1<256

69

unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;

70

#else

71

unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;

72

#endif

73

 

74

// This flag is set on USART1 Receiver buffer overflow

75

bit rx_buffer_overflow1;

76

 

77

// USART1 Receiver interrupt service routine

78

interrupt [USART1_RXC] void usart1_rx_isr(void)

79

{

80

char status,data;

81

status=UCSR1A;

82

data=UDR1;

83

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

84

{

85

rx_buffer1[rx_wr_index1]=data;

86

if (++rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;

87

if (++rx_counter1 == RX_BUFFER_SIZE1)

88

{

89

rx_counter1=0;

90

rx_buffer_overflow1=1;

91

};

92

};

93

}

94

 

95

// Get a character from the USART1 Receiver buffer

96

#pragma used+

97

char getchar1(void)

98

{

99

char data;

100

while (rx_counter1==0);

101

data=rx_buffer1[rx_rd_index1];

102

if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;

103

#asm("cli")

104

--rx_counter1;

105

#asm("sei")

106

return data;

107

}

108

#pragma used-

109

// Write a character to the USART1 Transmitter

110

#pragma used+

111

void putchar1(char c)

112

{

113

while ((UCSR1A & DATA_REGISTER_EMPTY)==0);

114

UDR1=c;

115

}

116

#pragma used-

117

 

118

// Timer 0 overflow interrupt service routine

119

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

120

{

121

// Reinitialize Timer 0 value

122

TCNT0=256-5;

123

// Place your code here

124

sayac++;

125

if (sayac>=sayac_esik)

126

{

127

PORTE.5=1;

128

if (sayac>=sayacmaks)

129

{

130

sayac=0;

131

}

132

}

133

else PORTE.5=0;

134

135

if (sayac2) sayac2--;

136

else

137

{

138

sayac2=100;

139

bayrak=1;

140

}

141

 

142

}

143

 

144

#define ADC_VREF_TYPE 0x60

145

 

146

// Read the 8 most significant bits

147

// of the AD conversion result

148

unsigned char read_adc(unsigned char adc_input)

149

{

150

ADMUX=adc_input|ADC_VREF_TYPE;

151

// Start the AD conversion

152

ADCSRA|=0x40;

153

// Wait for the AD conversion to complete

154

while ((ADCSRA & 0x10)==0);

155

ADCSRA|=0x10;

156

return ADCH;

157

}

158

 

159

void main(void)

160

{

161

// Declare your local variables here

162

 

163

int i,cikis=50,hedef=50;

164

char tus1,tus5,tus1eski,tus5eski;

165

 

166

baslat_mega128();

167

 

168

while (1)

169

{

170

lcd_clear();

171

lcd_gotoxy(0,0);

172

lcd_putsf("Gercek Zamanda Kontrol");

173

delay_ms(1000);

174

lcd_clear();

175

lcd_gotoxy(0,0);

176

lcd_putsf("Ayd=xxx Hdf=xxx");

177

lcd_gotoxy(0,1);

178

lcd_putsf("Cik=");

179

180

LDRmin=10;

181

LDRmaks=90;

182

183

while (1)

184

{

185

if (bayrak)

186

{

187

bayrak=0;

188

 

189

i=read_adc(1); // ADC ile LDR üzerindeki gerilimi (kanal1) oku

190

LDR=(100*i)/256; // ADC değerini 0-100 arasına ayarla

191

 

192

sprintf(dizi1,"%3d",LDR); // ekrana LDR nin ayarlanmış değerini yaz

193

lcd_gotoxy(4,0);

194

lcd_puts(dizi1);

195

 

196

sprintf(dizi1,"%3d",hedef);

197

lcd_gotoxy(12,0);

198

lcd_puts(dizi1);

199

200

sprintf(dizi1,"%3d",cikis);

201

lcd_gotoxy(4,1);

202

lcd_puts(dizi1);

203

 

204

if ((LDR<hedef)&&(cikis<100)) cikis++;

205

if ((LDR>hedef)&&(cikis>0)) cikis--;

206

 

207

sayac_esik = (sayacmaks*cikis)/100;

208

209

tus1=PINA.0;

210

tus5=PINA.4;

211

if ((tus1==0)&&(tus1eski==1))

212

{

213

if (hedef<100) hedef++;

214

}

215

if ((tus5==0)&&(tus5eski==1))

216

{

217

if (hedef>0) hedef--;

218

}

219

tus1eski=tus1;

220

tus5eski=tus5;

221

222

}

223

}

224

 

225

};

226

}

227

 

228

void baslat_mega128 (void)

229

{

230

 

231

// Input/Output Ports initialization

232

// Port A initialization

233

// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

234

// State7=P State6=0 State5=T State4=P State3=P State2=P State1=P State0=P

235

PORTA=0x9F;

236

DDRA=0x40;

237

 

238

// Port B initialization

239

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

240

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

241

PORTB=0x00;

242

DDRB=0x00;

243

 

244

// Port C initialization

245

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

246

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

247

PORTC=0x00;

248

DDRC=0xFF;

249

 

250

// Port D initialization

251

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

252

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

253

PORTD=0x00;

254

DDRD=0x00;

255

 

256

// Port E initialization

257

// Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In

258

// State7=T State6=T State5=1 State4=T State3=T State2=T State1=T State0=T

259

PORTE=0x20;

260

DDRE=0x20;

261

 

262

// Port F initialization

263

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

264

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

265

PORTF=0x00;

266

DDRF=0x00;

267

 

268

// Port G initialization

269

// Func4=In Func3=In Func2=In Func1=In Func0=In

270

// State4=T State3=T State2=T State1=T State0=T

271

PORTG=0x00;

272

DDRG=0x00;

273

 

274

// Timer/Counter 0 initialization

275

// Clock source: System Clock

276

// Clock value: 500,000 kHz

277

// Mode: Normal top=FFh

278

// OC0 output: Disconnected

279

ASSR=0x00;

280

TCCR0=0x03;

281

TCNT0=0x00;

282

OCR0=0x00;

283

 

284

// Timer/Counter 1 initialization

285

// Clock source: System Clock

286

// Clock value: Timer 1 Stopped

287

// Mode: Normal top=FFFFh

288

// OC1A output: Discon.

289

// OC1B output: Discon.

290

// OC1C output: Discon.

291

// Noise Canceler: Off

292

// Input Capture on Falling Edge

293

// Timer 1 Overflow Interrupt: Off

294

// Input Capture Interrupt: Off

295

// Compare A Match Interrupt: Off

296

// Compare B Match Interrupt: Off

297

// Compare C Match Interrupt: Off

298

TCCR1A=0x00;

299

TCCR1B=0x00;

300

TCNT1H=0x00;

301

TCNT1L=0x00;

302

ICR1H=0x00;

303

ICR1L=0x00;

304

OCR1AH=0x00;

305

OCR1AL=0x00;

306

OCR1BH=0x00;

307

OCR1BL=0x00;

308

OCR1CH=0x00;

309

OCR1CL=0x00;

310

 

311

// Timer/Counter 2 initialization

312

// Clock source: System Clock

313

// Clock value: Timer 2 Stopped

314

// Mode: Normal top=FFh

315

// OC2 output: Disconnected

316

TCCR2=0x00;

317

TCNT2=0x00;

318

OCR2=0x00;

319

 

320

// Timer/Counter 3 initialization

321

// Clock source: System Clock

322

// Clock value: Timer 3 Stopped

323

// Mode: Normal top=FFFFh

324

// Noise Canceler: Off

325

// Input Capture on Falling Edge

326

// OC3A output: Discon.

327

// OC3B output: Discon.

328

// OC3C output: Discon.

329

// Timer 3 Overflow Interrupt: Off

330

// Input Capture Interrupt: Off

331

// Compare A Match Interrupt: Off

332

// Compare B Match Interrupt: Off

333

// Compare C Match Interrupt: Off

334

TCCR3A=0x00;

335

TCCR3B=0x00;

336

TCNT3H=0x00;

337

TCNT3L=0x00;

338

ICR3H=0x00;

339

ICR3L=0x00;

340

OCR3AH=0x00;

341

OCR3AL=0x00;

342

OCR3BH=0x00;

343

OCR3BL=0x00;

344

OCR3CH=0x00;

345

OCR3CL=0x00;

346

 

347

// External Interrupt(s) initialization

348

// INT0: Off

349

// INT1: Off

350

// INT2: Off

351

// INT3: Off

352

// INT4: Off

353

// INT5: Off

354

// INT6: Off

355

// INT7: Off

356

EICRA=0x00;

357

EICRB=0x00;

358

EIMSK=0x00;

359

 

360

// Timer(s)/Counter(s) Interrupt(s) initialization

361

TIMSK=0x01;

362

ETIMSK=0x00;

363

 

364

// USART1 initialization

365

// Communication Parameters: 8 Data, 1 Stop, No Parity

366

// USART1 Receiver: On

367

// USART1 Transmitter: On

368

// USART1 Mode: Asynchronous

369

// USART1 Baud rate: 19200

370

UCSR1A=0x00;

371

UCSR1B=0x98;

372

UCSR1C=0x06;

373

UBRR1H=0x00;

374

UBRR1L=0x33;

375

 

376

// Analog Comparator initialization

377

// Analog Comparator: Off

378

// Analog Comparator Input Capture by Timer/Counter 1: Off

379

ACSR=0x80;

380

SFIOR=0x00;

381

 

382

// ADC initialization

383

// ADC Clock frequency: 125,000 kHz

384

// ADC Voltage Reference: AVCC pin

385

// Only the 8 most significant bits of

386

// the AD conversion result are used

387

ADMUX=ADC_VREF_TYPE;

388

ADCSRA=0x87;

389

 

390

// LCD module initialization

391

lcd_init(16);

392

 

393

// Global enable interrupts

394

#asm("sei")

395

}













İçindekiler


1. Giriş 2

2. Projenin Tasarımı 2

2.1. Işık Şiddetini Ölçen Eleman (LDR) 2

2.2. LDR’nin düzeneğe bağlanması 3

2.3. Işık Kaynağı olarak LED 5

2.4. Deney Kitinden Düğme Hareketi Algılama 6

2.5. Tasarlanan Donanımın Deney Kiti Üzerindeki Bağlantıları: 7

3. Projenin Gerçekleştirilmesi 8

3.1. Çevre elemanlarının deney kitine bağlanması 8

3.2. İşlemcinin Kodlanması 9

3.3. İşlemcinin üzerinde çalıştırılan kod: 11



Figürlerin Listesi


Fig. 1LDR elemanının davranışı 3

Fig. 2LDR üzerinden gerilim farkının okunması. 3

Fig. 3Gerilim farkının hesaplanması 4

Fig. 4LDR’nin ADC bağlantısı 5

Fig. 5LED’in ilgili port pinine bağlanması 5

Fig. 6PWM, yardımı ile LED aydınlığının ayarlanması 6

Fig. 7PIN basılmasını algılayan düzenek 6

Fig. 8Deney kiti şeması 7

Fig. 9AVR-MT-128-A deney kiti görüntüsü (ön görüntü altta ve arka görüntü yukarıda) 8

Fig. 10Çevre elemanları bağlanmış deney kiti 9

Fig. 11İşlemci algoritmasının akış diyagramı 10

Fig. 12Sayac işleyen kod parçası 11