Mikroişlemci gelişimi

Benzer belgeler
# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

KOMUT AÇIKLAMALARI VE ÖRNEKLERİ

W SAYAC SAYAC SAYAC. SAYAC= ise, d=0 W

BÖLÜM 3 3. PIC 16F8X KOMUTLARI 3.1.KULLANILAN SEMBOLLER: 3.2.KOMUTLAR VE KULLANIM ÖRNEKLERİ

Deney No Deney Adı Tarih. 3 Mikrodenetleyici Portlarının Giriş Olarak Kullanılması / /201...

Yrd.Doç. Dr. Bülent ÇOBANOĞLU. Sakarya Üniversitesi, Teknoloji Fakültesi

Mikroişlemciler Ara Sınav---Sınav Süresi 90 Dk.

1. PORTB ye bağlı 8 adet LED i ikili sayı sisteminde yukarı saydıracak programı

16F84 ü tanıt, PORTB çıkış MOVLW h FF MOWF PORTB

Bank değiştirme Bir banktan diğerine geçmek için STATUS register denilen özel registerin 5. ve 6. bitinin durumunu değiştirmek gerekir.

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

Komutların İşlem Süresi

ADC: Anolog-Digital Çevirici

LCD (Liquid Crystal Display )

PIC MIKRODENETLEYICILER-3: GECĠKME ve KESME PROGRAMLARI

Mikroişlemci: Merkezi işlem biriminin fonksiyonlarını tek bir yarı iletken tümleşik devrede birleştiren programlanabilir sayısal elektronik devre

DERS 7 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 örnek programlar Dallanma komutları Sonsuz döngü

Assembler program yazımında direkt olarak çizgi ile gösterilmemesine rağmen ekranınız ya da kağıdınız 4 ayrı sütunmuş gibi düşünülür.

UYGULAMA 05_01 MİKRODENETLEYİCİLER 5.HAFTA UYGULAMA_05_01 UYGULAMA_05_01. Doç.Dr. SERDAR KÜÇÜK

PIC 16F877 nin kullanılması

PIC Mikrodenetleyicileri

MIKROBILGISAYARLAR ve PIC PROGRAMLAMA TEST ÇALIŞMA SORULARI

LCD (Liquid Crystal Display)

PIC16F877A nın Genel Özellikleri

DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI İÇERİK

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

MİKRO DENETLEYİCİLER II DERS NOTLARI (VİZE KONULARI) Prof. Dr. Hakan Ündil Bahar-Vize

MİKRODENETLEYİCİLER II DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-FİNAL KISMI

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

Mikro denetleyicili Uygulama devresi bileşenleri

YILDIZ TEKNİK ÜNİVERSİTESİ ELEKTRİK - ELEKTRONİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ. EasyPic6 Deney Seti Kullanım Kılavuzu

IŞIĞA YÖNELEN PANEL. Muhammet Emre Irmak. Mustafa Kemal Üniversitesi Mühendislik Fakültesi. Elektrik-Elektronik Mühendisliği Bölümü

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu

T.C FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ EET-302 MİKROİŞLEMCİLER LABORATUVARI DENEY FÖYÜ

BÖLÜM 1 ALT PROGRAMLAR 1.1.ALTPROGRAM NEDİR?

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

Hacettepe Robot Topluluğu

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

PIC Mikrodenetleyiciler. Hazırlayan:Öğr.Gör.Bülent ÇOBANOĞLU 1

Örnek 1: Sağdan sola ledleri yakmak.

KONFİGÜRASYON BİTLERİ

T.C. MİLLÎ EĞİTİM BAKANLIĞI ELEKTRİK ELEKTRONİK TEKNOLOJİSİ MİKRODENETLEYİCİYLE ANALOG İŞLEMLER 523EO0022

MİKROİŞLEMCİLER VE MİKRO DENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan Ündil Bahar-Final

1. Ders Giriş. Mikroişlemcili Sistem Uygulamaları

5. BÖLÜM - DÖNGÜ (ÇEVRİM) ve Z BAYRAĞI

MİKRODENETLEYİCİLER 2 DERS NOTLARI Prof. Dr. Hakan ÜNDİL Bahar-Final Kısmı

Mikroişlemciler. Microchip PIC

Mikroişlemci Nedir? Mikrodenetleyici Nedir? Mikroişlemci iç yapısı Ders Giriş. Mikroişlemcili Sistem Uygulamaları

B.Ç. / E.B. MİKROİŞLEMCİLER

T.C. MİLLÎ EĞİTİM BAKANLIĞI MEGEP (MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN GÜÇLENDİRİLMESİ PROJESİ) ELEKTRİK ELEKTRONİK TEKNOLOJİSİ

PIC MCU ile UYGULAMALAR

Program Kodları. void main() { trisb=0; portb=0; while(1) { portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); } }

PIC MİKROKONTROLÖR TABANLI MİNİ-KLAVYE TASARIMI

7 Segment Display ve Kesmeler (Interrupts) Hafta6-7. Dr. Bülent Çobanoğlu-SAÜ 1

MİKRO DENETLEYİCİLER II DERS NOTLARI (Vize) Prof. Dr. Hakan Ündil Bahar

BÖLÜM 1

Eğitim - Öğretim Yöntemleri Başlıca öğrenme faaliyetleri Kullanılan Araçlar Dinleme ve anlamlandırma

BSF STATUS,5 ;bank1 e geçiş CLRF TRISB ;TRISB= BCF STATUS,5 ;bank0 a geçiş

PIC16F87X te ADC MODÜLÜNÜN KULLANIMI

PROGRAMLANABİLİR ZAMANLAYICI

KANPUR/microcontrollers/micro/ui/Course_home3_16.htm Yrd.Doç. Dr.

PİC BASİC PROFESSİONAL

BÖLÜM 1: MİKRODENETLEYİCİLER

Komutların İşlem Süresi

EasyPic 6 Deney Seti Tanıtımı

PIC MCU da Komutların İşlem Süresi

BİLİŞİM TEKNOLOJİLERİ

PIC TABANLI, 4 BASAMAKLI VE SER

Adres Yolu (Address Bus) Bellek Birimi. Veri Yolu (Databus) Kontrol Yolu (Control bus) Şekil xxx. Mikrodenetleyici genel blok şeması

Microprocessors and Programming

ONDOKUZ MAYIS ÜNİVERSİTESİ

PIC 16F84 VE TEK BUTONLA BĐR LED KONTROLÜ

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

BM-311 Bilgisayar Mimarisi

BM-311 Bilgisayar Mimarisi

EEM 419-Mikroişlemciler Güz 2017

5.Eğitim E205. PIC16F628 ve PIC16F877 Hakkında Genel Bilgi IF THEN ELSE ENDIF HIGH-LOW GOTO-END- PAUSE Komutları Tanıtımı ve Kullanımı PIC16F628:

Hyper Terminal programı çalıştırıp Uygun COM portu ve iletişim parametrelerinin ayarları yapılıp bekletilmelidir.

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

Arduino nedir? Arduino donanım ve yazılımın kolayca kullanılmasına dayalı bir açık kaynak elektronik platformdur.

T.C. NİĞDE ÜNİVERSİTESİ MÜHENDİSLİK-MİMARLIK FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ

Hacettepe Robot Topluluğu

T.C. MİLLÎ EĞİTİM BAKANLIĞI DENİZCİLİK MİKRODENETLEYİCİ 2

MİKRODENETLEYİCİ GELİŞTİRME SETİ TASARIM VE UYGULAMALARI. öğrencilerine eğitimleri esnasında iş hayatında karşılaşabilecekleri kontrol işlemleri ve

ELEKTRİK-ELEKTRONİK TEKNOLOJİSİ

İçİndekİler. 1. Bölüm - Mİkro Denetleyİcİ Nedİr? 2. Bölüm - MİkroDenetleyİcİlerİ Anlamak

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

Mikroişlemciler Laboratuar Deney Föyü

DENEY-1. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

TIMER. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI İÇERİK KESME

Komutların Yürütülmesi

T.C. NİĞDE ÜNİVERSİTESİ MÜHENDİSLİK-MİMARLIK FAKÜLTESİ ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ BİTİRME ÖDEVİ

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

BÖLÜM 2 INTERRUPT ve TIMER İŞLEMLERİ

PIC MCU ile UYGULAMALAR-II

BİLGİSAYAR MİMARİSİ. Bilgisayar Bileşenleri Ve Programların Yürütülmesi. Özer Çelik Matematik-Bilgisayar Bölümü

Transkript:

Mikroişlemci (μp) Mikroişlemci çoğu zaman bilgisayarların beyni olarak adlandırılır. Bilgisayar yazılımındaki tüm işlemleri yapmakla sorumludur ve merkezi işlem birimi (CPU) olarak da adlandırılır.

Mikroişlemci gelişimi

CISC ve RISC mimarileri CISC (Complex Instruction Set Computers) RISC (Reduced Instruction Set Computers) CISC RISC Large (100 to 300) Komut Seti Small (100 or less) Complex (8 to 20) Adresleme Modları Basit (4 or less) Uzmanlaşmış Komut Formatı Basit Değişken Kod uzunluğu Sabit Değişken İşletme çevrimi Standart Yüksek Cost / CPU Complexity Düşük Derleme basitlik İşlemci tasarımı İşlemci tasarımı Karmaşıklık Yazılım

CPU yapısı Arithmetic & Logic Unit (ALU) Toplama, çıkarma, çarpma, karşılaştırma, AND, OR, NAND gibi aritmetik lojik işlemler ile bit kaydırma işlemlerinin yapıldığı kısımdır. Hangi işlemi yapacağı kontrol biriminden gelen sinyal ile belirlenir.

Kontrol Birimi (CU) İşlemcinin diğer birimlerini ne işlem yapacağını kontrolden sorumlu birimdir. Bir sonraki durumda ne işlem yapacaklarına dair kontrol sinyalini diğer birimlere gönderir. Üç kısımdan oluşur: DECODER, SAAT, KONTROL MANTIK DEVRESİ

CU (devam) DECODER: bir programı oluşturan komutların çözer ve hangi eylemin gerçekleştirileceğin e karar veriri. Bu işlem komuttaki opcode ve adresleme modu kısmına bakılarak yapılır. Op-code(İşlem Kodu): CPU ya hangi işlemin gerçekleştirileceğini söyler. Operand(İşlenen): Op-code tarafından kullanıcak verinin adresini belirtir.

CU (Devam) SAAT (timer or clock): Tüm işlem ve komutların tam zamanında yapılmasını sağlar KONTROL MANTIK DEVRESİ: kontrol sinyali üretir ve ALU ile kaydedicilere göndererek yapacağı işlen ve adımları bildirir.

Kaydediciler Kaydedici CPU içerisinde bulunan bir hafıza bölümüdür. Hızlı erişim ve hızlı veri alımı sağlayacak şekilde tasarlanmıştır.

Kaydediciler Bir çok kaydedici tipinden en ortak olanlar şunlardır. Program Counter (PC) Instruction Register (IR) Accumulator(A yada ACC) Memory address Register (MAR) Memory Buffer Register (MBR) Flag register / status flags Other general purpose registers Bir programın işletilmesi sırasında bir sonraki komutun bellek adresini tutar. Hali hazırdaki komutu işlemcide tutar. Bir kaydediçiye erişim hafıza birimine erişimden çok daha kısadır. ALU tarafından yapılan işlem sonuçlarını tutar. Komutlarda kullanılan hafıza adresi burada tutulur. Kontrol birimi burayı kontrol ederek veri getirme işlemini yapar. Hafıza yada başka bir yerden veri veya komut alındığında buraya alınır. Daha sonra gerekli yere gönderilir. 1 bitlik durum bayraklarını içeren bir kaydedicidir. Bu bayraklar ALU işlemleri sonucunda değişmektedir. Özel amacı bulunmayan, program sırasından geçici olarak kullanılan hafıza birimleridir.

Sistem Bus yapısı Kontrol Bus: Kontrolle ilgili sinyalleri taşır. Bu sinyaller CPU içerisindeki kontrol biriminden üretilir. Mimarilerde hat sayıları farklılık göstermektedir. Her bir hattın özel amacı vardır; okuma, yazma ve reset gibi

Sistem Bus yapısı Data Bus: İşlemci ile hafıza ve çevre birimleri arasında iki taraflı veri değişimi için kullanılır. Veri yolu hat genişligi veri genişliği olarakta adlandırılır. 32bit, 64bit

Sistem Bus yapısı Adres Bus: CPU ve hafıza birimleri arasında adres bilgisi taşıyan bağlantılardır. Veri yolu gelişliği azami adreslenebilecek hafıza miktarını belirler. 2^hat sayısı

Komut yürütme çevrimi Komut getirme Komut Yürütme Komut Çözme

Komut yürütme çevrimi Getirme evresi Bellekten komutu alır, komut kaydedicisine saklar, program sayacını 1 arttırır. Kod Çözme evresi IR içerisindeki komutu kontrol birimi çözer Komutun icrası için gerekli işlemlere karar verir. Yürütme evresi Komuta bağlı olarak, gerçek işlemler yapılır.

Getirme evresi(1)

Getirme evresi(2)

Getirme evresi(3)

Getirme evresi(4)

Getirme evresi(5)

Getirme evresi(6)

Getirme evresi(7)

Getirme evresi(8)

Mikrodenetleyici

Mikrodenetleyici

Bellekler Program bellek Çalıştırılacak olan programın kalıcı olarak saklandığı ROM bellektir. Flash teknolojidir. 13Volt EEPROM bellek Genel amaçlı bellek Özel amaçlı bellek(sfr) ROM gibi kalıcıdır. Mikrodenetleyicinin çalışması sırasında içeriği değiştirilebilir. Kalibrasyon yada sayma bilgiler saklanır. RAM bellektir. Program sırasında geçici veri ve sonuçlar tutulur. RAM in bir bölümüdür. Üretim aşamasında amaçları belirlenmiştir değiştirilemez. Bu bellekteki bitler cip içerisindeki donanıma fiziksel olarak bağlıdır.

Bellek

PIC16F887 Microcontroller RISC mimarisi sadece 35 komut. Dallanmalar hariç tüm komutlar tek çevrimlik. Çalışma frekansı 0-20MHz Hassas dahili osilatör Yazılımla seçilebilen 8MHz to 31KHz bölge 35 giriş/çıkış pini 8K ROM bellek FLASH teknoloji Cip 100.000 kere programlanabilir. In-Circuit Serial Programming imkanı

PIC16F887 256 bytes EEPROM bellek 368 bytes RAM bellek A/D dönüştürücü: 14-kanal 10-bit çözünürlük Analog karşılaştırma modüle PWM output USART modülü RS-485, RS-232 and LIN2.0 Auto-Baud Detect

PIC16F887 Blok şeması

Pin Yapısı

RAM bellek bank

I/O Ports 35 adet genel amaçlı giriş çıkış vardır. A,B,C,D,E Birçok I/O pininin nun 2 yada 3 özelliği vardır. Diğer fonksiyonunu kullanan bir pin I/O olarak kullanılamaz. Her portuntris adı verilen uydusu vardır. Giriş yada çıkış olacağını TRIS belirler.

TRISx kaydedicisi

PortA PORTA yı TRISA ve ANSEL kaydedicileri kontrol eder. 5 pin i analog giriş olarakta kullanılabilir.

PortA nın RA0 pin i ULPWU Birinci önceliğin asgari güç tüketimi olduğu durumlarda kullanılır. Termometre, yanğın sensörü gibi. Düşük saat frekansı düşük güç tüketimi 20Mhz yerine 32Khzlik quartz kristal

ULPWU Pin çıkış yapılır ve lojik 1 yapılır. Kondansatör şarj olur. Pin hemen giriş yapılır, up uyku moduna geçer, kondansatör sızıntı akımıyla deşarj olur ve uc normal çalışmasına devam eder. Yandaki şema da deşarj süresi 30ms dir.

PortB PortA yı TRISB ve ANSEL kaydedicileri kontrol eder. 5 pin i analog giriş olarakta kullanılabilir.

WPUB kaydedicisi Buton,anahtar ve optocoupler uygulamaları için idealdir. 10-20 Kohm Pull up yapılmak istenen girişler için 1 yapılır.

IOCB register B portunun her pin i interrupt (kesme) girişi olarak kullanılabilir. İstenen bitler set(1) edilir.

IOCB Tuş takımı uygulamalarında portla sürekli taranmasına gerek kalmaz. Kontrol işlemi butunlardan herhangi birine basıldığında yapılır.

Pin RB0/INT RB0/INT pin i gerçek harici kesme (interrupt) girişidir. Pin e gelen sinyalin düşen yada yükselen kenarlarında işlen yapılabilir. OPTION_REG kaydedicisinin INTEDG biti ile ayarlama yapılır. RB6 and RB7 Pins Pic in proglanması sırasında ROM a yazma için kullanılır. ICSP (In-Circuit Serial Programming) proglamlamanda kullanılırlar.

Port C

Port D

Port E RE0 = AN5 (determined by bit ANS5 of the ANSELregister); RE1 = AN6 (determined by bit ANS6 of the ANSELregister); and RE2 = AN7 (determined by bit ANS7 of the ANSELregister).

ANSEL ve ANSELH Registers

KISACA Portların Tüm özelliklerini doğru olarak bilmeden bir program yazamassınız. Bir devre tasarlanmak istendiğinde, çevre birimleriyle haberleşecek bir port seçilir. Eğer sadece dijital I/O kullanılacaksa herhangi bir port seçilebilir. Eğer analog giriş kullanılacaksa (AN0-AN13) pinlerinden biri seçilmelidir. TRISA, TRISB, TRISC, TRISD ve TRISE kaydedicileri portların nasıl kullanılacağına bağlı ayarlanır. Eğer analog giriş kullanılacak ANSEL ve ANSELH programın başında ayarlanır. Eğer anahtar buton gibi pull-up dirençi gerekli uygulama yapılacak ise port B kullanılmalı ve OPTION_REG ve WPUB kaydedicileri ayarlanmalı

Komut seti Komut tanım işlem Bayrak (Flag) CLK Veri taşıma komutları MOVLW k Bir sabiti aküye(w) taşır k -> w 1 MOVWF f W yi f e taşır W -> f 1 MOVF f,d f i d ye taşır f -> d Z 1 CLRW W yi sıfırlar 0 -> W Z 1 CLRF f F i sıfırlar 0 -> f Z 1 SWAPF f,d F in bitlerini yer değiştirir. f(7:4),(3:0) -> f(3:0),(7:4) 1 f Herhangi bir hafıza bölgesi(register); W - accumulator; b - 8-bit register içindeki Bit adresi; d hedef (w veya f);

Komut seti(devam) komut tanım işlem BCF f,b BSF f,b f içindeki b bitini 0 yapar f içindeki b bitini 1 yapar Bit-oriented Instructions Bayrak (Flag) 0 -> f(b) 1 1 -> f(b) 1 CLK

Durum(status) kaydedicisi IRP indirekt adreslemede kullanılan seçim biti. 1 - Banks 0 ve 1 are aktif (memory 00h-FFh) 0 - Banks 2 ve 3 are aktif (memory 100h-1FFh) RP1,RP0 Bank seçim bitleri. Direkt adreslemede kullanılır.. RP1 RP0 Active Bank 0 0 Bank0 0 1 Bank1 1 0 Bank2 1 1 Bank3

İlk program Prot B nin değerini Port C ve Port D ye gönderen programı asembly dilinde yazınız.

Programın aşamaları setup Ana P. Alt P. tanımlamalar hazırlık ayarlar Ana program Ana döngü Alt programlar

program BSF STATUS,RP0 BSF STATUS,RP1 CLRF ANSEL CLRF ANSELH BCF STATUS,RP1 CLRF TRISC CLRF TRISD MOVLW 0XFF MOVWF TRISB BCF STATUS,RP0 LOOP: MOVF PORTB,W MOVWF PORTC MOVWF PORTD GOTO LOOP

Aritmetik-lojik komutlar ADDLW k W ve sabiti toplar W+k -> W C, DC, Z ADDWF f,d W ve f i toplar, W+f -> d C, DC,Z SUBLW k Sabitten W yi çıkarır k-w -> W C, DC, Z SUBWF f,d f den W yi çıkarır f-w -> d C, DC, Z ANDLW k Sabit ve W ile AND işlemi W AND k -> W Z ANDWF f,d f ve W ile AND işlemi W AND f -> d Z IORLW k Sabit ve W ile OR işlemi W OR k -> W Z IORWF f,d f ve W ile OR işlemi W OR f -> d Z XORLW k Sabit ve W ile XOR işlemi W XOR k -> W Z XORWF f,d f ve W ile XOR işlemi W XOR f -> d Z INCF f,d f i 1 arttırır f+1 -> d Z DECF f,d f i 1 azaltır f-1 -> d Z RLF f,d f i ELDE biti ile birlikte sola kaydır C RRF f,d f i ELDE biti ile birlikte sağa kaydır C COMF f,d f in tersini al f -> d Z

ADDLW ve ADDWF. ADDLW 0x15 Komut çalıştırılmadan önce: W=0x10 çalıştırıldıktan sonra W=0x25 C=0 (sonuç 0xFF den büyük olmadığından elde yoktur). ADDWF portb,w(0) Komut çalıştırılmadan önce: W=0x17, portb=0xc2 çalıştırıldıktan sonra W=0xD9, portb=0xc2 C=0 ADDWF portb,f(1).. Komut çalıştırılmadan önce: W=0x17, portb=0xc2 çalıştırıldıktan sonra W=0x17, portb=0xd9 C=0

SUBLW ve SUBWF. SUBLW 0x03 Komut çalıştırılmadan önce: W=0x01 çalıştırıldıktan sonra W=0x02 C=1, Z=0 (sonuç POZİTİF). Komut çalıştırılmadan önce: W=0x03 çalıştırıldıktan sonra W=0x00 C=1, Z=1 (sonuç SIFIR). Komut çalıştırılmadan önce: W=0x04 çalıştırıldıktan sonra W=0xFF C=0, Z=0 (sonuç NEGATİF). SUBWF PORTB,f Komut çalıştırılmadan önce: W=2, portb=3 çalıştırıldıktan sonra W=2, portb=1 C=1, Z=0 (SONUÇ POZİTİF) Komut çalıştırılmadan önce: W=2, portb=2 çalıştırıldıktan sonra W=2, portb=0 C=1, Z=1 (SONUÇ SIFIR) Komut çalıştırılmadan önce: W=2, portb=1 çalıştırıldıktan sonra W=2, portb=0xff C=0, Z=0 (SONUÇ POZİTİF)

INCF f,d ve DECF f,d. INCF REG,w Komut çalıştırılmadan önce: REG=0X10 W=x çalıştırıldıktan sonra REG=0X10 W=0x11 Z =0. INCF REG,f Komut çalıştırılmadan önce: REG=0XFF çalıştırıldıktan sonra REG=0X00 Z =1. DECF REG,w Komut çalıştırılmadan önce: REG=0X13 W=x çalıştırıldıktan sonra REG=0X13 W=0x12 Z =0. DECF REG,f Komut çalıştırılmadan önce: REG=0x01 çalıştırıldıktan sonra REG=0x00 Z =1

RLF f,d ve RRF f,d. RLF REG,w Komut çalıştırılmadan önce: REG = 1110 0110 C=0 çalıştırıldıktan sonra REG = 1110 0110 W = 1100 1100 C = 1. RLF REG,f Komut çalıştırılmadan önce: REG = 1110 0110 C=0 çalıştırıldıktan sonra REG = 1100 1100 C = 1. RRF REG,w Komut çalıştırılmadan önce: REG = 1110 0110 C=0 çalıştırıldıktan sonra REG = 1110 0110 W = 0111 0011 C = 0. RRF REG,f Komut çalıştırılmadan önce: REG = 1110 0110 C=0 çalıştırıldıktan sonra REG = 0111 0011 C = 0

Program Kontrol Komutları BTFSC f,b f in b. bitini test et, 0 ise bir sonraki komutu atla Atla eğer f(b) = 0 BTFSS f,b f in b. bitini test et, 1 ise bir sonraki komutu atla Atla eğer f(b) = 1 DECFSZ f,d f i 1 azalt. 0 ise bir sonraki komutu atla f-1 -> d atla eğer Z = 1 INCFSZ f,d f i 1 arttır. 1 ise bir sonraki komutu atla f+1 -> d atla eğer Z =1 GOTO k Adrese git k -> PC CALL k Alt programı çağır PC -> TOS, k -> PC RETURN Alt programdan dön. TOS -> PC RETLW k W nin içerisinde sabit ile dön. k -> W, TOS -> PC RETFIE Kesme programından dön TOS -> PC, 1 -> GIE TOS: Yığının tepesi PC: Program sayıcı GIE: global interrupt enable

BTFSC f,b ve BTFSS f,b. 001 BTFSC PORTA,3 002 GOTO PROG1 003 GOTO PROG2 Eğer porta nın 4. biti 0 ise program 003 nolu satırdan devam eder.. 001 BTFSS PORTA,3 002 GOTO PROG1 003 GOTO PROG2 Eğer porta nın 4. biti 1 ise program 003 nolu satırdan devam eder.

DECFSZ f,b ve INCFSZ f,b... LAB_01 INCFSZ TRISB,f LAB_02... LAB_03... ; TRISB yi 1 arttır ; Sonuç 0 ise bu satırı geç ; Sonuç 0 ise bu satıra atlar... LAB_01 DECFSZ TRISB,f LAB_02... LAB_03... ; TRISB yi 1 azaltır ; Sonuç 0 ise bu satırı geç ; Sonuç 0 ise bu satıra atla

CALL k Alt program çağırma... LAB_01 CALL LAB_02 git...... LAB_02... ;LAB_02deki alt programa Komuttan önce: PC = LAB_01 adresi TOS (yığının üstü) = x Komuttan sonra: PC = LAB_02 adresi TOS (yığının üstü) = LAB_01

RETURN ve RETLW k... [etiket] RETURN Komutan önce: PC = x TOS (yığın) = x Komutan sonra: PC = TOS (yığın) TOS (yığın) = TOS - 1... [label] RETLW 0x43 Komuttan önce: W = x PC = x TOS (yığın) = x Komuttan sonra: W = 0x43 PC = TOS (yığın) TOS (yığın) = TOS - 1

örnek 8 bitlik iki sayısı toplayan veya çıkaran bir programı yazınız. Sayılar A ve B girilecek Sonuç C portundan görülecek RD0 1 ise toplama, 0 ise çıkarma işlemi yapılacak. Toplama ve çıkarma alt program ile yapılacaktır.

Örnek şematiği

Örnek Program BSF STATUS,RP0 BSF STATUS,RP1 //bank 3 seçim CLRF ANSEL CLRF ANSELH // girişler dijital BCF STATUS,RP1 //bank 1 seçim CLRF TRISC // C çıkış MOVLW 0xff MOVWF TRISA MOVWF TRISB MOVWF TRISD //A, B ve D giriş BCF STATUS,RP0 //bank 0 seçim LOOP: BTFSC PORTD,0 //butona basıldı mı? GOTO ATLA CALL CIKAR GOTO LOOP ATLA: CALL TOPLA GOTO LOOP TOPLA: MOVF PORTA,W ADDWF PORTB,W MOVWF PORTC RETURN CIKAR: MOVF PORTB,W SUBWF PORTA,W MOVWF PORTC RETURN

sorular B portundaki 4 bitlik sayınının karesini alıp C portunda gönderen programı yazınız. A ve B portundaki 4 bitlik iki sayısı çarpan ve sonucu C portuna aktaran prog. Yaz. C portunda 8 ledli kara şimşek ışığı oluşturan programı yazınız. B portundaki bir butona basıldığında C protundaki değeri 1 arttıran iki hane BCD(10 lu) sayıcı tasarlayınız.

Dolaylı adresleme RAM de genel amaçlı hafıza bölgesine erişmeyi sağlar. FSR kaydedicisi RAM de erişilecek adresi tutar. INDF ise RAM deki veriyi tutar INDF değiştirildiğinde RAM deki veride değişecektir.

Dolaylı adresleme örnek İki sabitin toplanarak RAM de 20h adresine yazılması.. MOVLW 0X20 // 0X20 adresi MOVWF FSR //FSR içerisine yaz MOVLW 12 //sabit aküye yüklendi ADDLW 13 // 12 ve 13 toplandı MOVWF INDF //sonuç 20h de

Kesmeler (Interrupt)

Intcon (Kesme kontrol Reg.) GIE - Global Interrupt Enable bit tüm kesme kaynaklarını kontrol eder. 1 tüm kesmelere izin ver. 0 tüm kesmeler kapalı. PEIE - Peripheral Interrupt Enable bit diğer çevre birimlerinden gelen kesmeleri kontrol eder. 1 çevre birim kesmelerine izin ver. 0 çevre birimleri kesmeleri kapalı. T0IE - TMR0 Overflow Interrupt Enable bit TMR0 taşma kesmesi. 1 - TMR0 kesmesine izin ver. 0 - TMR0 kesmesi kapalı. INTE - RB0/INT External Interrupt Enable bit RB0/IN pini lojik değişiklik kesmesi 1 harici kesmeye izin ver. 0 harici kesme kapalı. RBIE - RB Port Change Interrupt Enable bit. Port B için lojik değişiklik durumunda kesme kontrolü. 1 port B değişiminde kesme üret. 0 - port B değişiminde kesme üretme. T0IF - TMR0 Overflow Interrupt Flag bit TMR0 sayıcısı taşma meydana geldiğinde sıfırdan devam eder. 1 - TMR0 taştı (bu bit yazılımla sıfırlanmalı). 0 - TMR0 taşmadı. INTF - RB0/INT External Interrupt Flag bit RB0/INT pini lojik durumu. 1 harici kesme oluştu (bu bit yazılımla sıfırlanmalı). 0 kesme oluşmadı. RBIF - RB Port Change Interrupt Flag bit port B durum biti. 1 portb de en az bir pinde değişim oldu (bu bit yazılımla sıfırlanmalı). 0 PortB de değişim olmadı

OPTION RBPU - Port B Pull up Enable bit. 1 - PortB pull-up etkin. 0 - PortB pull-up kapalı. INTEDG - Interrupt Edge Select bit. 1 - RB0/INT pin yükselen kenarda kesme üret. 0 - RB0/INT pin düşen kenarda kesme üret. T0CS - TMR0 Clock Source Select bit. 1 sayıcı için kaynak TOCKI pin i dir. 0 dahili kaynak (Fosc/4). T0SE - TMR0 Source Edge Select bit harici kaynak için tetikleme kenar seçimi 1 - TOCKI pin yükselen kenarda. 0 - TOCKI pin düşen kenarda.

Sayıcı kaynak bölme oranı belirleme PSA - Prescaler Assignment bit assigns prescaler (only one exists) to the timer or watchdog timer. 1 WDT için. 0 - TMR0 için. PS2 PS1 PS0 TMR0 WDT 0 0 0 1:2 1:1 0 0 1 1:4 1:2 0 1 0 1:8 1:4 0 1 1 1:16 1:8 1 0 1 1:64 1:32 1 1 0 1:128 1:64 1 1 1 1:256 1:128

Diğer kesme kontrol kaydedicileri

Örnek Harici interrupt (kesme) girişi RB0 ı kullanarak bir sayıcı tasarlayınız. Sayma değeri portc de görülsün. Programı microc de yazınız.

/* kesme örnek programıdır. 16f887 için yazılmıştır. kesme girişinden gelen darbeleri sayarak PORTC de gösterir */ int say=0; // bir değişken tanımlama void interrupt() // kesme alt programıdır. { SAY++; // sayacı 1 arttır. PORTC=SAY; // C portuna gönder INTCON.INTF=0; // kesme bayragını sıfırla! Önemli } void main() { ansel=0; anselh=0; TRISC=0x00; TRISB=0XFF; INTCON.GIE=1; // kesmelere izin ver INTCON.INTE=1; // RB0 kesmesine izin ver OPTION_REG.INTEDG=1; //YÜKSELEN KENARda kesme üret portc=0; while(1) { } }

Harici kesme uygulama devresi

Timer TMR0

Timer TMR0 TMR0 için osilatör kaynağını şeç. (T0CS) Prescaleri timer için kullan. (PSA) Prescaler bölme değerini ayarla. (PS0,PS1,PS2) TMR0 değerini gir. (0-255) (isteğe bağlı) GIE ve T0IE kesme izinlerini aç. (INTCON) kesme alt programında TMR0 değerini güncelle.(gerekli ise) TMR0IF bayrağını 0 yap

/* bu program 16f887 için yazılmıştır. timer 0 kullanımına örnektir. volkan Yusuf şenyürek */ short say=0; // bir değişken tanımlandı. void interrupt() { say=say+1; portc=say; tmr0=0; // sayı değerini arttırarak sayma hızı artar intcon.t0if=0; } void main() { trisc=0; option_reg.t0cs=0; OPTION_REG.PSA=0; OPTION_REG.PS0=1; OPTION_REG.PS1=1; OPTION_REG.PS2=1; INTCON.GIE=1; INTCON.T0IE=1; TMR0=0; while(1) { } }

ADC

Gerekli SFR ler ADCS1, ADCS0 - A/D Conversion Clock Select bits ADC nin kullanacağı saat frekansını seçer. Dönüştürme süresini etkiler. ADCS1 ADCS2 Clock 0 0 Fosc/2 0 1 Fosc/8 1 0 Fosc/32 1 1 RC * CHS3-CHS0 - Analog Channel Select bits: analog kanal yada pin seçer GO/DONE - A/D Conversion Status bit: mevcut durumu belirler. 1 ise dönüştürme devam etmekte 0 ise dönüştürme tamamlandı. ADON - A/D On bit: A/D dönüştürme biti. 1 - A/D açık 0 - A/D kapalı.

ADFM - A/D Result Format Select bit 1 Sonucu sağa yasla 0 Sonucu sola yasla VCFG1 - Voltage Reference bit: negatif voltaj referans kaynağını şeç. 1 - Negatif voltage reference Vref- pin 0 - Voltage power supply Vss negatif voltage referansı. VCFG0 - Voltage Reference bit: pozitif voltaj referans kaynağı. 1 - Pozitif voltaj referans Vref+ pin 0 Vdd pozitif voltaj referans kaynağı.

ADC kullanım özeti 1) ANSEL ve TRISx kaydedicileri ayarla. 2) ADCON1 içerisinde data formatını ve voltaj referans kaynaklarını ayarla. 3) ADCON0 içerisinde CH0-CH13 ile giriş kanalı seçilir. 4) ADON set edilerek A/D aktif edilir. 5) Yaklaşık 20us bekle. 6) ADON0 da GO set edilerek dönüştürme başlar. 7) Dönüştürme beklenir. GO/DONE 0 olur. 8) ADRESL ve ADRESH okunur. 9) 6 ve 7 tekrar edilir.

Örnek program /*16F887 için ADC örnek programı AN0 girişi kullanılmıştır. V.Y. Şenyürek*/ void main() { ansel=1; //AN0 analog giriş. anselh=0; trisa=0xff; trisc=0; trisd=0; ADCON1.adfm=1; // sağa yasla ADCON1.VCFG1=0; // -vref=vdd ADCON1.VCFG0=0; // +vref=vss ADCON0=0B11000001; // RC osilatör, kanal 0 ve ADON aktif delay_us(30); ADCON0.GO=1; // başla. do { PORTC=ADRESL; PORTD=ADRESH; ADCON0.GO=1; // başla DELAY_US(100); } while(1); }

MicroC LCD kütüpanesi Standart LCD panelleri 4 yada 8 bit erişim sağlar. Fonksiyonlar Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd

LCD void Lcd_Init() Pin yapısını tanımlama kısmındaki gibi belirler. // Lcd pinout settings sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D7 at RB3_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D4 at RB0_bit; Lcd_Init();

LCD void Lcd_Out(unsigned short row, unsigned short col, char *text); LCD de istenilen satır ve sütuna string yazar. Lcd_Out(1, 3, "Hello!"); void Lcd_Cmd(unsigned short command); Bazı komutları LCD ye gönderir Lcd_Cmd(_Lcd_Clear);

Örnek program /* 4 bit LCD kullanımına örnektir*/ sbit LCD_RS at RC2_bit; sbit LCD_EN at RC3_bit; sbit LCD_D7 at RC7_bit; sbit LCD_D6 at RC6_bit; sbit LCD_D5 at RC5_bit; sbit LCD_D4 at RC4_bit; sbit LCD_RS_Direction at TRISC2_bit; sbit LCD_EN_Direction at TRISC3_bit; sbit LCD_D4_Direction at TRISC4_bit; sbit LCD_D5_Direction at TRISC5_bit; sbit LCD_D6_Direction at TRISC6_bit; sbit LCD_D7_Direction at TRISC7_bit; char *test="merhaba :) "; short say=0; char txt[5]; void main() { trisc=0; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); while(1) { Lcd_Out(1,5,test); shorttostr(say, txt); Lcd_Out(2,6,txt); delay_ms(1000); say++; } }

USART kütüplanesi Usart_Init Seri iletişim baud rate değerini ayarlar. Usart_Init(2400); Usart_Data_Ready Okunamak için receive bufferın hazır olup olmadığını kontrol eder. Hazır ise fonksiyondan 1 döner. if (Usart_Data_Ready())

USART kütüplanesi Usart_Read Usart biriminden bir byte okur. veri = Usart_Read(); // alınan veriyi oku Usart_Write Usart birimine bir byte gönderir. Usart_Write(veri);

Usart örnek program /* seri port kullanım örneğidir. 16f887 içindir. */ unsigned short i; void main() { trisb=0; portb=0; Usart_Init(2400); // (8 bit, 2400 baud rate, no parity bit..) do { if (Usart_Data_Ready()) { // data hazırmı? i = Usart_Read(); portb=i; } } while (1); } // Read data

100% örnek1 /* 2 saniye aralıklarla adc den veri okuyan porgram. (OSC 4Mhz) 16f887 içindir. v. y. şenyürek */ short say=0; void interrupt() { if (say==30) { adcon0.go=1; delay_us(100); PORTC=ADRESH; say=0; portd.f0=~portd.f0; } intcon.t0if=0; say++; } void main() { trisc=0; trisd=0; portd.f0=0; ansel=1; //AN0 analog giriş trisa=1; // port A giriş adcon1=0b00000000; // sola yasla, referens kaynakları beslemedir. adcon0=0b11000001; // RC osilatör, kanal 0 ve ADON aktif option_reg=0b00000111; // dahili osilatör prescaler 256 intcon.gie=1; intcon.t0ie=1; while(1) {} } AN0 girişindeki voltaji ölçüp C portuna aktaran porgramdır. Ölçüm 2 sn de bir timer0 kullanılarak yapılmaktadır. (osc. 4 Mhz alınmıştır.) RV1(2) RV1 1k 1 2 3 4 5 6 7 14 13 33 34 35 36 37 38 39 40 U1 RE3/MCLR/VPP RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RA0/AN0/ULPWU/C12IN0- RC2/P1A/CCP1 RA1/AN1/C12IN1- RC3/SCK/SCL RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA RA3/AN3/VREF+/C1IN+ RC5/SDO RA4/T0CKI/C1OUT RC6/TX/CK RA5/AN4/SS/C2OUT RC7/RX/DT RA6/OSC2/CLKOUT RA7/OSC1/CLKIN RD0 RD1 RB0/AN12/INT RD2 RB1/AN10/C12IN3- RD3 RB2/AN8 RD4 RB3/AN9/PGM/C12IN2- RD5/P1B RB4/AN11 RD6/P1C RB5/AN13/T1G RD7/P1D RB6/ICSPCLK RB7/ICSPDAT RE0/AN5 RE1/AN6 RE2/AN7 PIC16F887 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10

örnek2 /* RB0 a bağlı butona basıldığında RC0 a bağlı LED yanacak ve 3 sn sonra sönecektir pic16f887 v.y. senyürek */ short say=0; void interrupt() { if (intcon.intf==1) { portc.f0=1; intcon.t0ie=1; intcon.intf=0; } if (intcon.t0if==1) } { if (say==45) { portc=0; say=0; intcon.t0ie=0; } say++; intcon.t0if=0; } void main() { ansel=0; anselh=0; trisb=0xff; trisc=0; portc.f0=0; option_reg=0b01000111; // yükselen kenar, prescaler 256 intcon.gie=1; intcon.inte=1; while(1) { } } RB0 a bağlı bir butona basıldığında RC0 daki LED i yakan ve 3sn sonra söndüren programı timer ve harici kesme kullanarak tasarlayınız.

örnek3 /* AN0 dan okunan gerilim 3.2 volttan büyük ise RC0 a bağlı LED'i 5 sn yakan ve bu sürede işlem yapmayan program */ float gerilim=0; short say=0; short oku=1; void interrupt () { } say++; if (say > 80) { } portc.f0=0; oku=1; say=0; intcon.t0if=0; void main() { ansel=1; anselh=0; trisa=255; trisc=0; portc.f0=0; oku=1; adcon1=0b00000000; //sola yasla, vref'ler beslemedir. adcon0=0b11000001; // RC osilator, kanal 0, ADON aktif. option_reg=0b00000111; // prescaler 256 intcon.gie=1; while(1) { if (oku) { adcon0.go=1; } } delay_us(100); gerilim=(adresh*5.0)/255; if (gerilim > 3.2 ) { portc.f0=1; oku=0; } intcon.t0ie=1;

Örnek 4 /* 20ms de bir AN0 daki gerilimi ölçüp C portuna aktaran ve her 1sn deki ölçümlerin ortalamasını hesaplayıp D portuna yazan program */ short say=0; long toplam=0; void interrupt() { say++; adcon0.go=1; delay_us(100); portc=adresh; toplam=toplam+a dresh; if (say==50) { portd=toplam/say; toplam=0; say=0; } tmr0=176; intcon.t0if=0; } void main () { ansel=1; anselh=0; trisa=1; trisc=0; trisd=0; portc=0; portd=0; adcon1=00000000; adcon0=11000001; option_reg=00000111; tmr0=176; intcon.gie=1; intcon.t0ie=1; while(1) { } }

örnek5 /* rb0'a bağlı başla butonuna basılıp bırakıldığında 50ms de bir AN0 daki değeri port C ye gönderen ve 5sn sonra duran programı yazınız. */ short say=0; void interrupt() { if (intcon.intf) { tmr0=56; intcon.t0ie=1; intcon.intf=0; } if (intcon.t0if) } { say++; adcon0.go=1; delay_us(100); portc=adresh; if (say==5*20) { intcon.t0ie=1; say=0; } intcon.t0if=0; tmr0=56; } // 5sn tamamlandımı void main() { ansel=1; anselh=0; trisa=1; trisc=0; trisb=1; portc=0; adcon1=0b00000000; adcon0=0b11000001; option_reg=0b01000000; intcon.gie=1; intcon.inte=1; intcon.t0ie=0; while(1) {} }