Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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.

Benzer bir sunumlar


... konulu sunumlar: "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."— Sunum transkripti:

1 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.

2 Mikroişlemci gelişimi

3 CISC ve RISC mimarileri CISC (Complex Instruction Set Computers) RISC (Reduced Instruction Set Computers) CISC RISC Large (100 to 300)Komut SetiSmall (100 or less) Complex (8 to 20)Adresleme ModlarıBasit (4 or less) UzmanlaşmışKomut FormatıBasit DeğişkenKod uzunluğuSabit Değişkenİşletme çevrimiStandart Yüksek Cost / CPU Complexity Düşük Derlemebasitlikİşlemci tasarımı KarmaşıklıkYazılım

4 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.

5 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İ

6 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.

7 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.

8 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.

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

10 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

11 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

12 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ı

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

14 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.

15 Getirme evresi(1)

16 Getirme evresi(2)

17 Getirme evresi(3)

18 Getirme evresi(4)

19 Getirme evresi(5)

20 Getirme evresi(6)

21 Getirme evresi(7)

22 Getirme evresi(8)

23 Mikrodenetleyici

24 Mikrodenetleyici

25 Bellekler Çalıştırılacak olan programın kalıcı olarak saklandığı ROM bellektir. Flash teknolojidir. 13Volt Program bellek ROM gibi kalıcıdır. Mikrodenetleyicinin çalışması sırasında içeriği değiştirilebilir. Kalibrasyon yada sayma bilgiler saklanır. EEPROM bellek RAM bellektir. Program sırasında geçici veri ve sonuçlar tutulur. Genel amaçlı bellek 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. Özel amaçlı bellek(SFR)

26 Bellek

27 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 kere programlanabilir. In-Circuit Serial Programming imkanı

28 PIC16F 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

29 PIC16F887 Blok şeması

30 Pin Yapısı

31 RAM bellek bank

32

33 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.

34 TRISx kaydedicisi

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

36 PortA’nın RA0 pin’iULPWU 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

37 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.

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

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

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

41 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.

42 Pin RB0/INTRB6 and RB7 Pins 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. Pic’in proglanması sırasında ROM’a yazma için kullanılır. ICSP (In-Circuit Serial Programming) proglamlamanda kullanılırlar.

43 Port C

44 Port D

45 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).

46 ANSEL ve ANSELH Registers

47 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ı

48 Komut seti f – Herhangi bir hafıza bölgesi(register); W - accumulator; b - 8-bit register içindeki Bit adresi; d – hedef (w veya f);

49 Komut seti(devam)

50 Durum(status) kaydedicisi RP1RP0Active Bank 00Bank0 01Bank1 10Bank2 11Bank3 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..

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

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

53 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

54

55 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

56 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)

57 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=0X10W=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=0X13W=0x12 Z=0 …. DECF REG,f …… Komut çalıştırılmadan önce: REG=0x01 çalıştırıldıktan sonra REG=0x00 Z=1

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

59 TOS: Yığının tepesi PC: Program sayıcı GIE: global interrupt enable

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

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

62 CALL k Alt program çağırma.... LAB_01 CALL LAB_02 ;LAB_02deki alt programa git.... LAB_ 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

63 RETURN veRETLW k.... [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 [etiket] RETURN Komutan önce: PC = x TOS (yığın) = x Komutan sonra: PC = TOS (yığın) TOS (yığın) = TOS - 1

64 ö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.

65 Örnek şematiği

66 Ö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

67 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.

68 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.

69 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

70 Kesmeler (Interrupt)

71 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ı

72 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.

73 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. PS2PS1PS0TMR0WDT 0001:21:1 0011:41:2 0101:81:4 0111:161:8 1011:641: :1281: :2561:128

74 Diğer kesme kontrol kaydedicileri

75 Ö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.

76 /* 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) { }

77 Harici kesme uygulama devresi

78 Timer TMR0

79 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

80 /* 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) { } }

81 ADC

82 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. ADCS1ADCS2Clock 00Fosc/2 01Fosc/8 10Fosc/32 11RC * 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ı.

83 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ğı.

84 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.

85 Ö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=0B ; // 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); }

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

87 LCD void Lcd_Config() Port ve gerekli pin konfigürasyonu yapmak için kullanılır. Lcd_Config(&PORTD,1,2,0,3,5,4,6); void Lcd_Init() Pin yapısı yandaki olacak şekilde port seçimi yapar. Lcd_Init(&PORTB); D7 → port.7 D6 → port.6 D5 → port.5 D4 → port.4 E → port.3 RS → port.2 RW → port.0

88 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);

89

90 /*4 bit LCD kullanımına örnektir. Volkan Yusuf Şenyürek*/ char *test="merhaba :) "; short say=0; char txt[5]; void main() { trisc=0; Lcd_init(&portc); 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++; }

91 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())

92 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);

93 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(); // Read data portb=i; } while (1); }

94 ö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=0; // port A giriş adcon1=0b ; // sola yasla, referens kaynakları beslemedir. adcon0=0B ; // RC osilatör, kanal 0 ve ADON aktif option_reg=0b ; // 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.)

95 ö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=0b ; // 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.

96 ö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=0b ; //sola yasla, vref'ler beslemedir. adcon0=0b ; // RC osilator, kanal 0, ADON aktif. option_reg=0b ; // 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; intcon.t0ie=1; oku=0; } }

97 Ö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= ; adcon0= ; option_reg= ; tmr0=176; intcon.gie=1; intcon.t0ie=1; while(1) { } }

98 örnek5 void main() { ansel=1; anselh=0; trisa=1; trisc=0; trisb=1; portc=0; adcon1=0b ; adcon0=0b ; option_reg=0b ; intcon.gie=1; intcon.inte=1; intcon.t0ie=0; while(1) {} } /* 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) // 5sn tamamlandımı { intcon.t0ie=1; say=0; } intcon.t0if=0; tmr0=56; }


"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." indir ppt

Benzer bir sunumlar


Google Reklamları