V İÇİNDEKİLER BÖLÜM 1: MİKRODENETLEYİCİLER ve PIC16F877A... 13 1.1 Giriş... 13 1.2 Mikrochip Mikrodenetleyici Ailesi... 14 1.2.1 PIC12CXXX/PIC12FXXX Ailesi... 15 1.2.2 PIC16C5X Ailesi... 15 1.2.3 PIC16CXXX/PIC16FXXX Ailesi... 16 1.2.4 PIC17CXXX Ailesi... 16 1.2.5 PIC18FXXX Ailesi... 16 1.3 Genel Özellikleriyle PIC16F877A... 16 BÖLÜM 2: YAZILIM GELİŞTİRME ORTAMI... 21 2.1 Giriş... 21 2.2 MPLAB IDE (Uygulama Geliştirme Ortamı)... 22 2.2.1 MPLAB Metin Editörü İle Kaynak Kodu Oluşturma... 22 Program 2.1-0-255 Arasında İkilik Düzende Sayma... 23 2.2.2 PROJECT WIZARD Kullanarak Proje Oluşturma... 25 2.2.3 MPLAB ile Proje Derleme... 29 2.2.4 MPLAB SIM ile Simülasyon ve Hata ayıklama... 30 2.2.4.1 İzleme Penceresi (Watch)... 34 2.2.4.2 Durma Noktaları (Breakpoints)... 36 2.2.4.3 Simülasyon İzleme Penceresi (Simulator Trace)... 37 2.2.4.4 Simülasyon Sırasında Giriş Yapmak (Stimulus Controller)... 39 Program 2.2 - Saat Darbesini Dışarıdan Alan İkilik Tabanda Sayıcı... 41 2.3 IC-Prog (Programlama Ortamı)... 47 2.4 PIC DK V2.1 (Uygulama Deneme Kartı)... 51 2.4.1 Osilatör Seçimi... 53 2.4.2 Programlayıcı... 53 2.4.3 Güç Kaynağı... 54 2.4.4 PORTA... 55 2.4.5 PORTB... 56 2.4.6 PORTC... 57 2.4.7 PORTD... 58 2.4.8 PORTE... 59 BÖLÜM 3: PIC16F877A nın GENEL ÖZELLİKLERİ... 61 3.1 Mikrodenetleyici Mimarisi... 61 3.2 PIC16FXXX Komut Seti... 63 3.2.1 Byte Üzerine Uygulanan Komutlar... 64 3.2.2 Bit Üzerine Uygulanan Komutlar... 66
VI 3.2.3 Veri İşleme ve Kontrol Komutları... 66 3.2.4 Komut Açıklamaları... 68 3.3 PIC16F877A Bellek Organizasyonu... 73 3.3.1 FLASH Program Belleği... 74 3.3.1.1 Program Sayacı... 74 3.3.1.2 2Kb dan Uzak Adreslere Goto ve Call ile Ulaşmak... 75 3.3.2 RAM Veri Belleği... 78 3.3.2.1 PIC16FXXX RAM Adresleme Metodları... 80 İvedi Adresleme... 80 Doğrudan Adresleme... 82 Dolaylı Adresleme... 85 INDF ve FSR Kaydedicileri... 86 3.3.2.2 RAM Adreslerine Bank Değiştirerek Ulaşma İşlemi... 89 3.4 Giriş/Çıkış Portları... 90 3.4.1 PORTA... 91 3.4.2 PORTB... 93 3.4.3 PORTC... 94 3.4.4 PORTD ve PORTE... 95 3.5 STATUS ve TRIS Kaydedicileri... 96 3.5.1 STATUS Kaydedicisi... 96 Program 3.1 STATUS Kaydedicisi İçeriğinin Gösterilmesi... 97 3.5.1.1 STATUS Kaydedici İçeriğini Korumak... 100 STATUS Kaydedicisi... 102 3.5.2 TRIS Kaydedicileri... 103 3.6 Kesme ve INTCON Kaydedicisi... 104 3.6.1 INTCON Kaydedicisi İle Kontrol Edilen Kesmeler... 106 INTCON Kaydedicisi... 107 3.6.1.1 TMR0 Zamanlayıcısı Kesmesi... 107 3.6.1.2 RB0 Harici Kesmesi... 108 Program 3.2 Kesmelerin Genel Özellikleri ve RB0 Harici Kesmesi... 109 Program 3.3 Doğru Bir Harici Kesme Uygulaması... 111 3.6.1.3 RB4-RB7 Pinlerinde Değişiklik Kesmesi... 113 3.6.2 Çevresel Arabirim Kavramı ve Çevresel Kesme... 114 3.6.2.1 Çevresel Kesme Kaynakları... 118 3.6.3 Birden Fazla Kesme Kaynağını Beraber Kullanma... 118 Program 3.4 İki Kesme Kaynağını Birlikte Kullanmak... 119 3.7 CPU Özellikleri... 124 3.7.1 Osilatör Seçenekleri... 124 3.7.1.1 LP, XT ve HS Kristal Tipleri... 125 3.7.1.2 Harici Osilatör (Dışarıdan Uygulanan Saat Darbesi İle Çalışma)... 129 3.7.1.3 Direnç-Kondansatör Osilatör... 129 3.7.2 Sıfırlama(RESET) Devresi... 131 3.7.2.1 MCLR ile Sıfırlama... 132 3.7.2.2 Enerji Verildiği Anda Sıfırlama (POR)... 132 3.7.3 Düşük Güç (Sleep) Modu... 134 Program 3.5 RB0 Kesmesiyle Sleep Modundan Çıkma Uygulaması.. 136 Program 3.6 RB4 - RB7 kesmesiyle Sleep Modundan Çıkma Uygulaması... 138
VII 3.7.4 Program Doğrulama ve Kod Koruma... 139 3.7.5 Devre Üzerinde Programlama (ICSP)... 139 3.7.6 Düşük Gerilimle Programlama (LVP)... 140 3.7.7 Devre Üzerinde Hata Ayıklama (ICD)... 140 3.7.8 PCON (Power Control) Durum Kaydedicisi... 141 PCON Kaydedicisi... 141 3.7.9 Kimlik Bilgisi Konumu (ID Locations)... 142 3.7.10 Konfigürasyon Bit leri (Configuration Word)... 142 3.7.2.1 Program Yükleme Yazılımıyla Konfigürasyon Bit lerini Yazmak... 142 3.7.2.2 Programın İçerisinde Konfigürasyon Bit lerini Yazmak... 145 CONFIGURATION WORD... 146 BÖLÜM 4: ZAMANLAYICILAR ve SAYICILAR... 147 4.1 Giriş... 147 4.2 TIMER0 Modülü... 149 4.2.1 TIMER0 Kesmesi... 149 4.2.2 Harici Clock ile Timer0 Kullanımı... 150 4.2.3 Prescaler (Frekans Bölme Oranı)... 151 OPTION_REG Kaydedicisi... 153 Program 4.1 Timer0 ın Zamanlayıcı Olarak Kullanılması... 154 Program 4.2 Timer0 ın Harici Tetikleme (RB4/T0CKI) İle Sayıcı Olarak Kullanılması... 157 4.3 TIMER1 Modülü... 159 T1CON Kaydedicisi... 160 4.3.1 TIMER1 in Zamanlayıcı Olarak Kullanılması... 161 Program 4.3 Timer1 in Zamanlayıcı Olarak Kullanılması... 161 Program 4.4 Timer1 in Zamanlayıcı Olarak Kullanılması... 163 4.3.2 TIMER1 in Senkron Sayıcı Modunda Kullanımı... 166 Program 4.5 Timer1 in Senkronize Sayıcı Olarak Kullanılması... 166 4.3.3 TIMER1 in Asenkron Sayıcı Modunda Kullanımı... 169 4.3.4 TIMER1 Osilatörü... 169 4.3.5 TIMER1 Modülünü CCP Tetikleme Çıkışını Kullanarak Resetlemek... 170 4.3.6 TIMER1 Kaydedici Çiftini (TMR1H, TMR1L) Resetleme... 170 4.4 TIMER2 Modülü... 171 T2CON Kaydedicisi... 172 4.4.1 Timer2 Prescaler ve Postscaler ı... 173 Program 4.6 Timer2 nin Zamanlayıcı Olarak Kullanılması... 173 4.5 WDT (Watchdog Timer)... 175 Program 4.7 WDT nin Kullanılması... 176 Program 4.8 WDT Zamanlayıcısının Kullanılması... 179 BÖLÜM 5: CAPTURE/COMPARE/PWM MODÜLLERİ... 183 5.1 Giriş... 183 5.1.1 CCP1 Modülü... 184 5.1.2 CCP2 Modülü... 184 CCP1CON Kaydedicisi / CCP2CON Kaydedicisi... 185 5.2 Capture (Yakalama)... 186
VIII 5.2.1 Capture Modunda Pin Konfigürasyonu... 186 5.2.2 TIMER1 Modu Seçimi... 186 5.2.3 Capture Modunda Yazılım Kesmeleri... 187 5.2.4 Capture Modunda Prescaler Değeri... 187 Program 5.1 CCP1 Capture Modunun Kullanılması... 187 5.3 Compare (Karşılaştırma)... 190 5.3.1 CCP Pin Konfigürasyonu... 191 5.3.2 TIMER1 Modu Seçimi... 191 5.3.3 Özel Hal Tetikleyicisi... 191 Program 5.2 CCP1 Compare Modülünü Kullanmak... 192 5.4 PWM (Pals Genişlik Modülasyonu)... 195 5.4.1 PWM Peryodu... 196 5.4.2 PWM Duty Cycle (PWM Görev Çevrimi)... 197 5.4.3 PIC16F877A nın PWM İşlemi İçin Kurulması... 199 Program 5.3 PWM Modülünün Kullanılması... 199 BÖLÜM 6: SERİ İLETİŞİM... 205 6.1 Giriş... 205 6.2 SFR siz Seri İletişim... 206 6.2.1 SFR siz Asenkron Seri İletişim... 206 Program 6.1 SFR siz Asenkron Seri Veri İetişimi... 207 6.2.2 SFR siz Senkron Seri İletişim... 210 6.2.2.1 74HC595 (8-bit Kaydırmalı Kaydedici)... 211 Program 6.2 SFR siz Senkron Seri Veri İletişimi (74HC595 kullanılarak)... 212 6.2.2.2 74HC597(8-bit Kaydırmalı Kaydedici)... 216 Program 6.3 SFR siz Senkron Seri Veri İetişimi (74HC597 kullanılarak)... 217 6.3 MSSP Modülü ve Özellikleri... 222 6.4 MSSP İle SPI Modunda Seri İletişim... 222 SSPSTAT Kaydedicisi (SPI Modunda)... 223 SSPCON Kaydedicisi (SPI Modunda)... 224 6.4.1 SPI İşlemleri... 225 6.4.2 SPI Modunda Veri İletişim Kontrolü... 226 6.4.3 SPI Veri İletişimi Bağlantı Çeşitleri... 226 6.4.4 MSSP de SPI Master Modu... 227 Program 6.4 MSSP Modülünün SPI Master Modunda Veri İetişimi (74HC595 kullanarak)... 228 6.4.5 MSSP de SPI slave modu... 231 6.4.5.1 MAX7219 (8-Dijit LED Display Sürücü)... 233 Program 6.5 MSSP Modülü SPI Master İletişim (MAX7219 kullanarak)... 235 6.5 MSSP İle I 2 C Modunda Seri İletişim... 238 6.5.1 I²C Protokolü... 239 6.5.2 I²C Adresleme Modu... 241 6.5.3 MSSP de I 2 C Modu... 241 6.5.4 I 2 C Slave Modu... 243 SSPSTAT Kaydedicisi (I²C Modunda)... 244
IX SSPCON Kaydedicisi (I²C Modunda)... 245 SSPCON2 Kaydedicisi (I²C Modunda)... 246 6.5.4.1 PCF8574 (I²C Protokolü için 8-Bit Giriş/Çıkış)... 247 Program 6.6 I²C Protokolü İle Seri Veri İletişimi (PCF8574 kullanılarak)... 248 6.6 USART Modülü ve Özellikleri... 254 6.6.1 USART Baud Rate Generator (BRG)... 255 TXSTA Kaydedicisi... 256 RCSTA Kaydedicisi... 257 6.7 USART İle Asenkron Seri İletişim... 259 6.7.1 USART İle Asenkron Veri Gönderme... 259 6.7.2 USART İle Asenkron Veri Alma... 261 6.7.3 9 Bit Modunda Çalışma... 263 Program 6.7 USART Modülü İle Asenkron Seri Veri İetişimi... 264 Program 6.8 USART Modülü İle Asenkron Seri Veri İletişimi (PIC16F877A ile PIC 16F628A kullanılarak)... 267 6.8 USART İle Senkron Seri İletişim... 273 6.8.1 USART Senkron Master Modunda Veri Gönderme... 273 6.8.2 USART Senkron Master Modunda Veri Alma... 275 6.8.2.1 74HC165 (8-bit Kaydırmalı Kaydedici)... 276 Program 6.9 USART Modülü İle Senkron Master Mod Veri İetişimi (74HC165 kullanarak)... 277 Program 6.10 USART Modülü İle Senkron Master Mod Veri İletişimi (74HC595 kullanarak)... 280 6.8.3 USART Senkron Slave Modu... 283 6.8.3.1 USART Senkron Slave Modunda Veri Gönderme... 283 6.8.3.2 USART Senkron Slave Modunda Veri Alma... 284 Program 6.11 USART Modülü İle İki Mikrodenetleyici Arasında Master/Slave Senkron Seri Veri İletişimi... 285 BÖLÜM 7: ANALOG/DİJİTAL DÖNÜŞTÜRÜCÜ MODÜLÜ... 291 7.1 Giriş... 291 ADCON0 Kaydedicisi... 293 ADCON1 Kaydedicisi... 294 7.2 A/D Dönüşüm İçin Gereksinimler... 296 7.3 A/D Dönüşümü İçin Saat Kaynağı Seçimi... 297 7.4 Analog Port Pin lerini Yapılandırma... 297 7.5 A/D Dönüşüm... 298 Program 7.1 Analog/Dijital Dönüştürücü Uygulaması... 299 7.5.1 Sleep Modunda A/D Dönüşümü... 301 7.5.2 Resetlemenin Etkileri... 301 7.5.3 Transfer Fonksiyonu... 302 7.5.4 LM35 Isı Sensörü... 303 Program 7.2 A/D modülü kullanılarak ısı ölçümü (LM35 ile)... 304 BÖLÜM 8: KARŞILAŞTIRICI (COMPARATOR) MODÜLÜ... 309 8.1 Giriş... 309
X 8.2 Karşılaştırma Birimi... 309 8.2.1 Karşılaştırıcı Modları... 310 8.2.2 Karşılaştırıcının Çalışması... 310 8.2.3 Referans Gerilimi... 310 CMCON Kaydedicisi... 311 8.2.4 Karşılaştırıcı Çıkışları... 312 8.2.5 Karşılaştırıcı Kesmeleri... 313 8.2.6 Sleep Modunda Karşılaştırma İşlemi... 313 8.3 Voltaj Referans Birimi... 314 CVRCON Kaydedicisi... 315 Program 8.1 Komparatör modülünün iki bağımsız karşılaştırıcı olarak kullanılması... 316 Program 8.2 Komparatör modülünün dahili ortak referanslı 4 girişten seçimli iki karşılaştırıcı modunda kullanılması... 318 Program 8.3 Komparatörün ortak referanslı PORTA çıkışlı iki karşılaştırıcı olarak kullanılması... 321 BÖLÜM 9: DAHİLİ ve HARİCİ EEPROM BELLEKLER... 325 9.1 Giriş... 325 9.2 Dahili EEPROM Belleğin Özellikleri... 325 EECON1 Kaydedicisi... 326 9.2.1 EEADR ve EEADRH Kaydedicileri... 327 9.2.2 EECON1 ve EECON2 Kaydedicileri... 327 9.2.3 EEPROM Belleğinden Veri Okumak... 327 9.2.4 EEPROM Belleğe Veri Yazmak... 328 9.2.5 EEPROM a İstenmeyen Veri Yazılmasının Önlenmesi... 329 9.2.6 Kod Koruma Süresince EEPROM Veri İşlemi... 329 Program 9.1 Dahili EEPROM belleğe veri yazma ve okuma uygulaması... 329 9.3 Programın Çalışması Esnasında Flash Program Belleğine Erişim... 331 Program 9.2 Flash program belleğini okuma ve yazma uygulaması... 331 9.4 Harici EEPROM Bellekler... 337 9.4.1 24C32A Seri EEPROM... 338 Program 9.3 MSSP modülü kullanılarak 24C32A ile iletişim uygulaması... 340 9.4.2 24CXX Tipi EEPROM ların Özellikleri... 349 BÖLÜM 10: PARALEL SLAVE PORT (PSP) MODÜLÜ... 351 10.1 Giriş... 351 10.2 PSP Modülünün Kullanımı... 352 Program 10.1 Paralel slave port (PSP) uygulaması... 354 BÖLÜM 11: 7 SEGMENT li DİSPLAY ve TUŞ TAKIMI... 359 11.1 Giriş... 359 11.2 7 Segment li Display ler... 359 Program 11.1 7 segment display uygulaması (0-9 arası yukarı sayıcı)... 361 11.3 4 Dijitli 7 Segment Display Tasarımı... 363
XI 11.3.1 74LS47 (Ortak Anodlu 7 Segment Display Sürücü)... 364 Program 11.2 4 dijit 7 segment display uygulaması (0000-9999 arası yukarı sayıcı)... 365 11.4 Buton Kontrolü... 371 Program 11.3 Buton kontrol uygulaması... 371 11.5 Tuş Takımı (Klavye) Tasarımı... 373 Program 11.4 4x4 tuş takımı uygulaması... 374 Program 11.5.a Bir PIC ile 4x4 tuş takımdan okunan değeri USART senkron iletişim ile diğer bir PIC e gönderme uygulaması... 379 Program 11.5.b Bir PIC den USART senkron seri iletişim moduyla gönderilen veriyi diğer bir PIC den okuyarak PORTB deki LED lerde gösterme uygulaması... 382 BÖLÜM 12: LCD DİSPLAY ler... 385 12.1 Giriş... 385 12.2 Karakter Tabanlı LCD Display ler... 385 12.2.1 Display Data RAM (DDRAM)... 387 12.2.2 LCD Komutları... 388 12.2.3 LCD Karakter Seti... 390 Program 12.1 4-bit arabirim modunda LCD kullanımı... 391 12.3 Seri LCD Display ler... 403 Program 12.2 Seri LCD kullanımı... 404 12.4 Grafik Tabanlı LCD Display ler... 409 12.4.1 T6963C Tabanlı Grafik LCD Display... 409 12.4.2 T6963C Komut Seti... 411 T6963C STATUS Kaydedicisi... 413 Program 12.3 Grafik LCD kullanımı... 413 BÖLÜM 13: DC MOTOR UYGULAMALARI... 425 13.1 Giriş... 425 13.2 DC Motorlar... 425 13.2.1 L298 (DC Motor Sürücüsü)... 427 Program 13.1 DC motor yön ve hız kontrolü (L298 kullanarak)... 428 13.3 Step (Adım) Motorları... 430 13.3.1 Bipolar ve Unipolar Step Motorlar... 430 13.3.2 Step Motor Uç Tesbiti... 431 13.3.3 Step Motorun Çalıştırılması... 431 13.3.4 ULN2003 (Step Motor Sürücü)... 432 Program 13.2 Step motorun çift fazlı çalışmada tam ve yarım adım modunda kullanılması... 433 13.3.5 L297 (Step Motor Kontrol Sürücüsü)... 436 Program 13.3 Step motor kontrol uygulaması (L297 ve L298 sürücü ile)... 436 13.4 RC Servo Motorlar... 439 Program 13.4 RC servo motor kontrol uygulaması... 441
XII BÖLÜM 14: MikroC UYGULAMALARI... 445 14.1 Giriş... 445 14.2 Isı Uygulamaları... 447 14.2.1 DS1620 Isı Sensörü... 446 Program 14.1 DS1620 ısı sensörü uygulaması... 447 14.2.2 DS1621 Isı Sensörü... 451 Program 14.2 DS1621 ısı sensörü uygulaması... 453 14.2.3 DS18B20 Isı Sensörü... 458 Program 14.3 DS18B20 ısı sensörü uygulaması... 460 14.3 Saat Uygulamaları... 463 14.3.1 DS1302 RTC (Real-Time Clock Gerçek Zaman Saati)... 463 Program 14.4 DS1302 saat uygulaması... 464 14.3.2 DS1307 RTC (Real-Time Clock Gerçek Zaman Saati)... 470 Program 14.5 DS1307 saat uygulaması... 471 14.3.3 PCF8583 Saat/Takvim ve 240 x 8-bit RAM... 475 Program 14.6 PCF8583 saat uygulaması... 477 14.4 DS1990A (ibutton) Uygulaması... 481 Program 14.7 DS1990 (i-button) uygulaması... 482 14.5 DS1868 (Dijital Potansiyometre) Uygulaması... 484 Program 14.8 DS1868 (Dijital potansiyometre) uygulaması... 486 14.6 Rotary Pulse Encoder Uygulamaları... 489 Program 14.9 Rotary pulse encoder ile sayıcı uygulaması... 489 Program 14.10 Rotary pulse encoder ile ses üretme... 492 14.7 RF İletişim Uygulaması... 494 14.7.1 ATX-34 RF verici... 494 14.7.2 ARX-34 RF alıcı... 495 Program 14.11 PIC16F877A ile RF iletişim uygulaması... 496 14.8 DTMF Uygulaması... 500 14.8.1 MT8870 DTMF Ton Kod Çözücü... 501 Program 14.12 MT8870 ile DTMF ton kod çözücü uygulaması... 502 14.9 MPX4115 (Basınç Sensörü) Uygulaması... 506 Program 14.13 MPX4115 basınç sensörü uygulaması... 507 BÖLÜM 15: PIC DK 2.1 KARTI İÇİN TERMİNAL PROJESİ... 511 15.1 Giriş... 511 15.2 Terminal Projesi... 511 Program 15.1 Terminal Projesi... 515 KAYNAKÇA... 526 DİZİN... 527