Menü English Ukrainian Rusça Ana Sayfa

Hobiler ve profesyoneller için ücretsiz teknik kütüphane Ücretsiz teknik kütüphane


RADYO ELEKTRONİK VE ELEKTRİK MÜHENDİSLİĞİ ANSİKLOPEDİSİ
Ücretsiz kütüphane / Radyo-elektronik ve elektrikli cihazların şemaları

PİK nedir? Radyo elektroniği ve elektrik mühendisliği ansiklopedisi. Radyo elektroniği ve elektrik mühendisliği ansiklopedisi

Ücretsiz teknik kütüphane

Radyo elektroniği ve elektrik mühendisliği ansiklopedisi / Mikrodenetleyiciler

makale yorumlarımakale yorumları

Giriiş. PIC16CXX, Microchip Technology tarafından üretilen 8 bitlik RISC mikrodenetleyicileridir. Bu mikrodenetleyici ailesi, düşük fiyat, düşük güç tüketimi ve yüksek hız ile karakterize edilir.

Mikrodenetleyiciler yerleşik bir program EEPROM'una, veri RAM'ine sahiptir ve 18 ve 28 çıkış paketlerinde mevcuttur.

PIC OTP, daha fazla kod değişikliğine uğramayacak tamamen test edilmiş ve bitmiş ürünler için tasarlanmış, kullanıcı tarafından programlanabilen tek seferlik kontrolörlerdir. Bu kontrolörler, önceden ayarlanmış tipte bir harici osilatör - kuvars veya RC ile ucuz plastik kasalarda mevcuttur.

Programlarda hata ayıklama ve prototip oluşturma için, ultraviyole silme özellikli bir denetleyici sürümü mevcuttur. Bu denetleyiciler, çok sayıda yazma/silme döngüsüne izin verir ve çok kısa bir silme süresine sahiptir - tipik olarak 1-2 dakika.

Bununla birlikte, bu tür denetleyicilerin fiyatı, bir kez programlananlardan önemli ölçüde daha yüksektir, bu nedenle, bunları seri üretime kurmak kârsızdır.

Programı değişebilen veya değişken parçalar, tablolar, kalibrasyon parametreleri, tuşlar vb. içeren ürünler için elektriksel olarak silinebilir ve yeniden programlanabilir bir PIC16C84 denetleyici mevcuttur. Aynı zamanda elektriksel olarak parlatılabilen bir veri ROM'u içerir. Deneyler için kullanacağımız bu denetleyicidir.

Bu yazıdan en iyi şekilde yararlanmak için IBM PC uyumlu bir kişisel bilgisayar, bilgisayarın paralel portuna bağlı bir programlayıcı, bir PIC16C84 yongası, bir devre tahtası, 8 adet rezistanslı LED, bir +5V güç kaynağı ve bir sokete ihtiyacınız olacak. çip.

Küçük PIC yazılımı parçaları yazacağız, birleştireceğiz, çipe yerleştireceğiz ve ardından LED'lerde sonuçları izleyeceğiz. Gömülü Kontrol El Kitabında sağlanan diğer uygulama örneklerini ve listeleri daha kolay kullanabilmeniz için bu makalede temel MICROCHIP anımsatıcılarını kullanacağız.

PIC16CXX AİLESİ PIC mikro devre ailesinin ayrıntılı bir açıklamasına, bu mikro denetleyicileri diğerlerinden ayıran özellikler ve avantajlarla başlayacağız. Veri güvenliği uygulamaları için, her PIC, program kodunun ve veri ROM'unun okunmasını devre dışı bırakmak üzere programlanabilen bir güvenlik bitine sahiptir. Programlama yapılırken önce program kodu yazılır, doğru yazıp yazmadığı kontrol edilir ve ardından güvenlik biti ayarlanır. Çipi güvenlik biti ayarlı olarak okumaya çalışırsanız, PIC16C5X için kodun üst 8 biti 0 olarak okunacak ve alt 4 bit komutun 12 bitini karıştıracaktır. PIC16C84 için benzer şekilde, en önemli 7 bit sıfır olarak okunacak ve en önemsiz 7 bit, komutun karıştırılmış 14 bitini temsil edecektir. Güvenlik biti ayarlandığında PIC16C84 EEPROM verileri okunamaz. Şekil 1, şu anda üretilen tüm mikro denetleyicileri gösterir ve kısa özelliklerini verir. (Şekil sayfa 2-1) PIC mikrodenetleyici ailesi, yalnızca 35 komuttan oluşan çok verimli bir komut setine sahiptir. 2 döngüde yürütülen koşullu atlamalar ve program sayacını değiştiren komutlar dışında tüm komutlar bir döngüde yürütülür. Bir talimat yürütme döngüsü, 4 saat döngüsünden oluşur. Böylece, 4 MHz'lik bir frekansta, komut yürütme süresi 1 µs'dir. Her talimat, işlem kodu ve işlenenle bölünmüş 14 bitten oluşur (kayıtlarla, bellek konumlarıyla ve anlık verilerle olası manipülasyon). PIC16CXX mikrodenetleyicilerinin komut seti Şekil 2'de gösterilmektedir. (Tablo 7.2 sayfa 2-569) PIC'de yüksek komut yürütme hızı, geleneksel tek veri yolu Von Neumann yerine iki veri yolu Harvard mimarisi kullanılarak elde edilir. mimari. Harvard mimarisi, ayrı yollara ve komutlar ve veriler için bir adres alanına sahip bir dizi kayıt üzerine kuruludur. Bir kayıt kümesi, G/Ç bağlantı noktaları, bellek hücreleri ve bir zamanlayıcı gibi tüm yazılım nesnelerinin fiziksel olarak uygulanan donanım kayıtları olduğu anlamına gelir.

PIC16CXX için veri belleği (RAM) 8 bit, program belleği (PROM) PIC12C16X için 5 bit ve PIC14CXX için 16 bittir. Harvard mimarisini kullanmak, yüksek hızda bit, bayt ve kayıt işlemleri elde etmenizi sağlar. Ek olarak, Harvard mimarisi, aynı anda geçerli komut yürütülürken ve bir sonraki komut okunurken, yönergelerin ardışık düzende yürütülmesine izin verir. Geleneksel Von Neumann mimarisinde, komutlar ve veriler tek bir paylaşımlı veya çoklanmış veri yolu üzerinden aktarılır, böylece ardışık düzen olasılıkları sınırlandırılır. Şekil 3, PIC16CXX ikili veri yolu yapısının bir blok diyagramını göstermektedir. (Şekil B sayfa 2-536) Gördüğünüz gibi, PIC16CXX'i oluşturan dahili fiziksel ve mantıksal bileşenler, şimdiye kadar çalışmış olabileceğiniz diğer tüm mikrodenetleyicilere benzer. Bu nedenle, PIC için program yazmak, diğer herhangi bir işlemciden daha zor değildir. Mantık ve sadece mantık...

Tabii ki, Harvard mimarisi ve büyük komut boyutu, PIC kodunun diğer mikrodenetleyicilere göre çok daha kompakt hale getirilmesini mümkün kılıyor ve program yürütme hızını önemli ölçüde artırıyor.

PIC REGISTER SET PIC'in çalışabileceği tüm yazılım nesneleri fiziksel kayıtlardır. PIC'in nasıl çalıştığını anlamak için, hangi kayıtlara sahip olduğunu ve her biriyle nasıl çalışılacağını anlamanız gerekir. Şekil 4, PIC16C84'ün tüm kayıtlarını göstermektedir. (resim 3.7.1, s.

2-541) Bir dizi operasyonel kayıtla başlayalım. Bu set dolaylı adres kaydından (f0), zamanlayıcı/sayaç kaydından (f1), program sayacından (f2), durum word kaydından (f3), seçme kaydından (f4) ve giriş/çıkış kayıtlarından ( f5,f6).

Mikrodenetleyicinin yazılımla erişilebilen nesnelerinin çoğunu temsil ettikleri için bu kayıtları nasıl kullanacağınızı anlamanız zorunludur. "Dahili olarak nasıl yapıldığını" değil, çoğunlukla "nasıl yönetileceğini" anlamamız gerektiğinden, her kayıt için olası kullanımları gösteren çok basit örnekler ekledik.

f0...DOLAYLI ADRES KAYDI IND0 Dolaylı adres kaydı f0 fiziksel olarak mevcut değil. 4 olası kayıttan birini dolaylı olarak seçmek için f64 seçim kaydını kullanır.

f0 kullanan herhangi bir talimat aslında f4 tarafından işaret edilen veri kaydına erişir.

f1... TMR0 ZAMANLAYICI/SAYICI KAYDI TMR0 zamanlayıcı/sayaç kaydı, diğer herhangi bir kayıt gibi yazılabilir ve buradan okunabilir. TMR0, RTCC pinine uygulanan harici bir sinyalle veya komut frekansına karşılık gelen dahili bir frekansla arttırılabilir.

Zamanlayıcı/sayacın ana kullanımı, harici olayların sayısını saymak ve zamanı ölçmektir. Harici veya dahili bir kaynaktan gelen sinyal, PIC'in yerleşik programlanabilir ayırıcısı kullanılarak önceden bölünebilir.

f2...PCL PROGRAM SAYACI Program sayacı (PC), 14 bitlik talimatlar içeren bir program ROM hücre adresleri dizisi oluşturmak için kullanılır. PC, 13Kx8 ROM hücrelerini doğrudan adreslemenizi sağlayan 14 bit kapasiteye sahiptir. Ancak PIC16C84 için fiziksel olarak yalnızca 1K hücreler mevcuttur. PC'nin alt 8 biti f2 registerı üzerinden yazıp okunabilir, üst 5 biti 0Ah adresli PCLATCH registerından yüklenir.

f3... DURUM KAYDI Durum word kaydı, çoğu mikroişlemcide bulunan PSW kaydına benzer. Taşıma, ondalık taşıma ve sıfır bitlerinin yanı sıra etkinleştirme modu bitlerini ve sayfalama bitlerini içerir.

f4...FSR SELECT REGISTER Daha önce bahsedildiği gibi, FSR seçme kaydı, 0 olası kayıttan birini dolaylı olarak seçmek için dolaylı adresleme kaydı f64 ile birlikte kullanılır. Fiziksel olarak, 36Ch-0Fh adreslerinde bulunan 2 kullanıcı RAM kaydı ve farklı adreslerde bulunan 15 servis kaydı yer alır.

f5, f6... G/Ç KAYITLARI PORTA, PORTB Kayıtları f5 ve f6, PIC16C84'te bulunan iki G/Ç bağlantı noktasına karşılık gelir. Port A, 5h adresindeki TRISA kaydı kullanılarak giriş veya çıkış olarak ayrı ayrı programlanabilen 4 bit PA0-PA85'a sahiptir. Port B, 8 bit PB7-PB0'a sahiptir ve 86h adresi ile TRISB kaydı kullanılarak programlanmıştır. TRIS kayıt bitindeki 1 ayarı, karşılık gelen port bitini bir giriş olarak programlar. Portu okurken çıkışın anlık durumu okunur, porta yazarken tampon yazmacında yazma işlemi gerçekleşir.

f8, f9...EEDATA, EEADR EEPROM KAYITLARI PIC16C84, EEDATA veri kaydı ve EEADR adres kaydı kullanılarak okunabilen ve yazılabilen yerleşik bir 64 baytlık EEPROM'a sahiptir. Yeni bir bayt yazmak yaklaşık 10 ms sürer ve yerleşik bir zamanlayıcı tarafından kontrol edilir. Yazma ve okuma kontrolü, 1h adresine sahip EECON88 kaydı aracılığıyla gerçekleştirilir. Kayıt üzerinde ek kontrol için 2h adresine sahip EECON89 kaydı kullanılır.

GENEL AMAÇLI KAYITLAR Genel amaçlı kaydediciler, 0Ch-2Fh adreslerinde bulunan statik RAM'dir. PIC16C84'te toplam 36 RAM hücresi kullanılabilir.

ÖZEL KAYITLAR W, INTCON, OPTION Son olarak özel PIC kayıtlarına bakalım. Bunlar, çoğu komutta akümülatör kaydı olarak kullanılan çalışma kaydı W'yi ve INTCON ve OPTION kayıtlarını içerir. INTCON kesme kaydı (adres 0Bh), kesme modlarını kontrol etmek için kullanılır ve çeşitli kaynaklardan ve kesme bayraklarından gelen kesme etkinleştirme bitlerini içerir. SEÇENEK modu kaydı (Adres 81h), ön ölçekleyici ve zamanlayıcı/sayaç için sinyal kaynaklarını ayarlamak ve ayrıca ön ölçekleyicinin bölme faktörünü, RTCC için sinyalin aktif kenarını ve kesme girişini ayarlamak için kullanılır. Ek olarak, SEÇENEK kaydı kullanılarak, giriş olarak programlanan bağlantı noktası B bitleri için sonlandırma dirençleri etkinleştirilebilir.

WDT WDT Watchdog WDT watchdog, yanlışlıkla program hatalarından kaynaklanan feci sonuçları önlemek için tasarlanmıştır. Aynı zamanda, kayıp darbe detektörü gibi zamanlama uygulamalarında da kullanılabilir. Bir bekçi köpeği zamanlayıcı kullanma fikri, zaman gecikmesi sona ermeden ve işlemci sıfırlanmadan önce bir programın kontrolü veya harici bir etki altında düzenli olarak sıfırlamaktır. Program normal çalışıyorsa, işlemcinin sıfırlanmasını önlemek için CLRWDT watchdog sıfırlama komutu düzenli olarak çalışmalıdır. Mikroişlemci yanlışlıkla programın sınırlarının dışına çıkarsa (örneğin, güç devresindeki güçlü parazit nedeniyle) veya programın bir bölümünde takılırsa, bekçi uygulaması sıfırlama komutu büyük olasılıkla yeterli bir süre içinde yürütülmeyecek ve bir işlemcinin tamamen sıfırlanması gerçekleşecek, tüm kayıtlar başlatılacak ve sistem çalışır duruma getirilecektir.

PIC16C84'teki watchdog zamanlayıcı herhangi bir harici bileşen gerektirmez ve yerleşik bir RC osilatör üzerinde çalışır ve işlemci saat frekansı olmasa bile üretim durmaz. Tipik bekçi uygulaması süresi 18 ms'dir. Watchdog zamanlayıcısına bir ön ölçekleyici bağlayabilir ve süresini 2 saniyeye kadar artırabilirsiniz.

Watchdog zamanlayıcısının diğer bir işlevi, işlemcinin SLEEP komutuyla aktarıldığı düşük güç modundan işlemciyi açmaktır. Bu modda, PIC16C84 çok az akım tüketir - yaklaşık 1 µA. Bu moddan çalışma moduna, bir düğmeye basma, bir sensörü tetikleme gibi harici bir olayla veya bir izleme zamanlayıcısı ile geçiş yapabilirsiniz.

SAAT JENERATÖRÜ PIC ailesinin mikrodenetleyicileri için dört tip saat üreteci kullanılabilir: XT kuvars rezonatör HS yüksek frekanslı kuvars rezonatör LP mikro tüketen RC kristal RC devresi çip programlama işlemi. XT, HS ve LP seçenekleri ayarlanmışsa, mikro devreye bir kuvars veya seramik rezonatör veya harici bir saat kaynağı bağlanır ve RC seçeneği ayarlanmışsa, bir direnç ve bir kapasitör bağlanır. Tabii ki, bir seramik ve özellikle bir kuvars rezonatör çok daha doğru ve kararlıdır, ancak yüksek zamanlama doğruluğu gerekli değilse, bir RC jeneratörünün kullanılması, cihazın maliyetini ve boyutunu azaltabilir.

RESET DEVRESİ PIC mikrodenetleyici ailesi, çoğu durumda geleneksel bir direnç ve kapasitör ihtiyacını ortadan kaldıran bir osilatör başlatma zamanlayıcısı ile birlikte dahili bir açılış sıfırlama devresi kullanır.

MCLR girişini bir güç kaynağına bağlamanız yeterlidir. Güç açıldığında dalgalanmalar veya geçici dalgalanmalar meydana gelme olasılığı varsa, 100-300 ohm'luk bir seri direnç kullanmak en iyisidir. Güç artışı çok yavaşsa (70 ms'den az) veya çok düşük saat hızlarında çalışıyorsanız, geleneksel bir direnç ve kapasitör sıfırlama devresi kullanılmalıdır.

TEORİDEN UYGULAMAYA...

PIC ailesinin mikrodenetleyicilerini oluşturan ana unsurlarla kısaca tanıştık. Şimdi pratik alıştırmalara geçelim.

Kısa programlar yazacağız, birleştireceğiz, bir mikro devreye yazacağız ve ne olacağını göreceğiz.

Bunu yapmak için aşağıdakilere ihtiyacımız var: - çip PIC16C84; - montajcı MPALC; - PROPIC programcısı; - doğrudan veya alternatif akım 18-36 V güç kaynağı; - görüntüleme cihazlı prototip tahtası.

Temel PIC16C84 komutlarının işleyişini göstermek için kullanacağımız görüntüleme cihazının şematik diyagramı Şekil 5'te gösterilmiştir. ve frekans ayar öğeleri. PIC ailesindeki mikrodenetleyicilerin her çıkışı, ek amplifikatörler olmadan doğrudan LED'i kontrol edebilir.

PIC nedir?

Örneklerimizde kullanılacak temel kodu tanımlayarak başlayalım. Projeniz için kod yazmaya başladığınızda, başlık bölümü (ORG 0 satırına kadar olan tüm kodlar) uygulamanıza özel olmalıdır. Başlık bölümü, projede kullanılan tüm kaynaklar için mantıksal adları tanımlar - bağlantı noktaları, bit ve bayt değişkenleri ve kayıtlar. Başlığımız ayrıca G/Ç bağlantı noktalarını ayarlar, böylece aşağıdaki komutlar yürütüldükten sonra A ve B bağlantı noktalarının tüm bitleri çıkış olarak ayarlanır: MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB Güç açıldığında, PIC16C84, G/Ç bağlantı noktalarının tüm bitlerini ayarlar. A ve B bağlantı noktalarına giriş yapar ve programı 000h adresinden yürütmeye başlar. Temel kod Şekil 6'da gösterilmiştir. (çizmek gerekiyor) Bunun gibi bir şey: ; Demo programı için örnek temel kod; LİSTE P=16C84, E=2 ; ; Başlık bölümü; ; çalıştırma kayıtlarının açıklaması TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; G/Ç kayıtları CNTRLPORT EQU 05h DATAPORT EQU 06h ; RAM konumları SCRATCH EQU 0Ch DIGIT EQU 0Dh ; kayıt bitleri DURUM C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h ; kontrol kayıtları TRISA EQU 85h TRISB EQU 86h ; G/Ç bağlantı noktaları için başlatma sözcükleri INITA EQU B'00000000' INITB EQU B'00000000' ; ; Çalışma bölümü; ; yürütülebilir kodun başlangıcı ORG 0 GOTO BEGIN ; ORG 100h BEGIN MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; Örnek kodu buraya yapıştırın; SON ; Temel kodu tartışırken gerekirse Şekil 4'e geri dönün. İlk olarak, ";" ile başlayan tüm satırlar, çevirici tarafından yorum olarak değerlendirilir. TMR0 ifadesine geçelim. Derleyiciye, TMR0 kelimesiyle her karşılaşıldığında, 01h (01 hex) değerinin yerine geçmesi gerektiğini söyledik. "EQU" kelimesi eşitlik anlamına gelir. Böylece, TMR0'a 1h değerini atadık. Şekil 4'te görebileceğiniz gibi, TMR0 yazmacı gerçekten de 1h adresine sahiptir. TMR01 kaydına her adres vermek istediğinizde 0h'yi kullanabilirsiniz, ancak bunun hata ayıklaması çok daha zor olacaktır çünkü 01h'nin her zaman RTCC anlamına geldiğini hatırlamanız gerekir. Ayrıca 01h'ye eşit verileriniz olabilir. Sembolik isimlerin kullanılması belirsizliği ortadan kaldırır ve kaynak metnin daha kolay okunmasını sağlar. PC, STATUS ve FSR kayıtları için ifadeleri de görebilirsiniz. PC adı kayıt adresi 02h'ye karşılık gelir, STATUS adı kayıt adresi 03h'ye karşılık gelir, FSR adı kayıt adresi 04h'ye karşılık gelir vb. G/Ç bağlantı noktalarına da CNTRLPORT (05h) ve DATAPORT (06h) adları verdik. RAM hücrelerinin de adları olabilir. 0Ch'deki hücre için "SCRATCH" ve 0Dh'deki hücre için "DIGIT" adlarını seçtik. Bu yazının sonuna kadar okursanız bu isim tanımlanmış olmasına rağmen PC'yi hiçbir yerde direk kullanmadığımızı göreceksiniz. Bunda bir yanlışlık yok - isimleri tanımlayabilir ve sonra kullanamazsınız, ancak elbette daha önce tanımlanmamış bir ismi kullanamazsınız. Bu konuda fazla endişelenmeyin - montajcının işi, metni tüm kurallara göre kontrol etmektir ve bir şey eşleşmezse hata mesajları alırsınız. Kayıtları adlandırmanın yanı sıra, kayıtlar içindeki tek tek bitleri de adlandırabilirsiniz. STATUS kaydını ayarlayan bölüme dikkat edin. Şekil 7, STATUS kaydının nelerden oluştuğunu göstermektedir. (Şekil 3.9.1 sayfa 2-544) Sembol C, 0h'ye ayarlanır çünkü C veya CARRY, DURUM durum word'ünün sıfır bitidir. CARRY bitini (bit 0) her kontrol etmemiz gerektiğinde, önceden tanımlanmış "C" karakterini kullanacağız. Bit 2'ye veya ZERO bitine her erişmek istediğimizde, 02h yerine "Z" karakterini kullanacağız. Daha sonra hepsini kullanmasanız bile bir kaydın tam bit yapısını tanımlayabilirsiniz. Artık yazmaçların nasıl tanımlandığı bizim için açık ve yürütülebilir koda geçebiliriz. Yürütülebilir kodu başlatmadan önce ORG ifadesini 0 olarak ayarlamalıyız. Bu, derleyiciye, bu ifadeyi izleyen kodun EEPROM adresi sıfırdan başladığını gösteren bir işaretçidir. "ORG" ifadesi, kod segmentlerini EEPROM boyutu içinde farklı adreslere tahsis etmek için kullanılır. Başka bir ORG ifadesi, ORG ifadesi 100h tarafından verildiği gibi, 100h adresindeki BEGIN etiketinden önce gerçekleşir. Yürütülebilir kod bir END yönergesi ile bitmelidir, yani bu yönergeyi izleyen yürütülebilir komut yoktur. Güç verildiğinde, PIC16C84 000h adresine atlar. İşlemci tarafından yürütülecek ilk komut, kontrolü 100h adresine aktaracak ve bundan sonraki çalışmalara bu adresten devam edecek olan GOTO BEGIN komutudur. BEGIN, montajcının referans olarak kullandığı, kullanıcı tarafından seçilebilen bir etiket adıdır (etiketler her zaman ilk satır konumundan başlamalıdır). Çalıştırma sırasında, çevirici BEGIN etiketinin yerini belirler ve bu adla tekrar karşılaşılırsa etiketin adresinin onun yerine geçeceğini hatırlar. CALL ve GOTO komutları, kaynak metindeki bağlantılar için etiketler kullanır. Şimdi işlemci tarafından yürütülen aşağıdaki komutlara bakalım. MOVLW INITA komutu, INITA adına atanan değeri W çalışma kaydına yükler. Bu değer başlıkta ayarlanır ve 00000000h olan B'00' değerine eşittir. B' karakterleri, verilerin ikili biçimde verildiği anlamına gelir. Aynı yere 0 (ondalık) veya 0h (onaltılık) yazılabilir ve aynı sonuç elde edilebilir. İkili temsil, bir yazmaçtaki bitlerle bir işlemin beklendiği durumlarda kullanmak için daha uygundur. Aşağıdaki MOVWF TRISA talimatı, W çalışma kaydındaki değeri TRISA bağlantı noktası A konfigürasyon kontrol kaydına yükler. Bu yazmacın bir bitinin 0 olarak ayarlanması, karşılık gelen bağlantı noktası A bitinin bir çıkış olduğunu belirtir. Bizim durumumuzda, A portunun tüm bitleri çıkışlar tarafından ayarlanır. A portunun sadece 5 biti olduğunu ve yine 3 biti olan TRISA yazmacına yazılan değerin üstteki 5 bitinin kullanılmadığına dikkat edin. Örneğin, A bağlantı noktasının düşük bitini bir giriş olarak ayarlamak istiyorsak, kayıt açıklaması bölümünde INITA'nın değerini B'00000001' olarak ayarlardık. Program sırasında, örneğin çift yönlü aktarım sırasında, bireysel port bitlerinin atamasını yeniden tanımlamamız gerekirse, INITA ve INITB için yaptığımız gibi, açıklama bölümünde gerekli tüm yapılandırma sözcüklerini belirtmek en uygunudur. Sonraki iki komut MOVLW INITB ve MOVWF TRISB, port B'nin konfigürasyonunu tanımlar. MOVLW INITB komutunu yazmayarak paradan tasarruf edebiliriz çünkü bizim durumumuzda INITB de 0h'dir. Ancak bunu yapmadık, çünkü daha sonra herhangi bir bitin atamasını değiştirmemiz gerekirse, bulması zor hatalara yol açabilir. Bir portta sadece bir biti değiştirmek yerine, iki portta aynı numaraya sahip iki bit değişecektir. Bu nedenle, program bitmemişken bu tür tasarrufların yapılması istenmez, ancak sonunda kod optimizasyonu aşamasında bu tür tekrarlar kaldırılabilir. Biz zaten ne yaptık? 1. EQU satırları ile hangi sembol isimlerini kullanacağımızı montajcıya söyledik. 2. Sıfırlama vektörünü 000h adresine ayarladık. 3. Program yürütmenin başlangıç ​​adresini BEGIN etiketinden 100h adresine ayarladık. 4. A ve B portlarının tüm bitlerini çıkış olarak yapılandırdık. Artık yorumlanan "Insert example code here" satırı yerine temel kodumuzun başlığı ile sonu arasına örnek kodu ekleyebiliriz. Bu satırı gerçek komutlarla değiştireceğiz, ortaya çıkan programı birleştireceğiz, bir mikro devreye yazacağız, mikro devreyi bir gösterge cihazı ile bir prototipleme kartında yeniden düzenleyeceğiz ve ne olacağını göreceğiz. BİRİNCİ PROGRAM Birinci program için sadece üç komuta ihtiyacımız var: MOVLW k MOVWF f GOTO k Bu komutları zaten temel kodumuzun başlığında kullanmıştık. MOVLW komutu, W iş kaydına bir bayt değişmezi veya sabiti yükler. Aşağıdaki MOVWF komutu, W çalışan yazmacından belirtilen f yazmacına bir bayt taşır. GOTO komutu, kontrolü k adresine aktarır. Aşağıdaki program, 01010101 değerini çalışma yazmacı W'ye yazar ve ardından içeriğini port B'ye yazar. Bu programı başlattıktan sonra dört LED'in yandığını göreceksiniz. MOVLW B'01010101' ;01010101'i W kaydına yükleyin MOVWF DATAPORT ;B bağlantı noktasına (DATAPORT) W yazın GOTO $ ;sonsuza kadar döngü Assembler yönergesi "$", program sayacının (PC) geçerli değeri anlamına gelir. Bu nedenle, GOTO $ komutu şu anda bulunduğumuz yere atlamak anlamına gelir. Böyle bir döngü sonsuzdur, çünkü bundan kurtulmanın (kesinti dışında) bir yolu yoktur. GOTO $ komutu genellikle hata ayıklama sırasında kodu durdurmak için kullanılır. MONTAJ MICROCHIP tarafından ücretsiz olarak dağıtıldığı ve ihtiyacımız olan tüm özellikleri içerdiği için makro birleştirici MPALC'yi kullanacağız. Başka bir derleyici kullanmayı tercih ederseniz, programımızı derlemek için onun açıklamasını kullanın. MPALC makro derleyicisini çalıştırmak için kullanılan komut satırı çok basittir: MPALC <kaynak_metni> [seçenekler] burada <kaynak_metin>, birleştirilecek kaynak metni içeren dosyanın adıdır ve pek çok seçenek olabilir. Seçeneklerin tam açıklaması montajcı tarafından /? İlk başta herhangi bir seçenek belirtmemize gerek yok. Hala yapmamız gereken tek şey, programımızın yazıldığı işlemci tipini ve montajcının üretmesi gereken hataların tipini belirlemek. Bu, LIST birleştirici direktifi kullanılarak yapılır (Şek. 6). Varsayılan kaynak dosya uzantısı .ASM'dir. Başka bir uzantı açıkça belirtilmelidir. Şekil 6'da gösterilen metni içeren EXAMPLE.ASM dosyasını alın ve çeviriciyi çalıştırın: MPALC ÖRNEK Derleyici sonucunda aşağıdaki uzantılara sahip dosyalar oluşturulur: * OBJ nesne dosyası * LST listeleme dosyası * ERL hatası ve uyarı dosyası * SYM simge dosyası Nesne dosyası onaltılık biçimde oluşturulur ve çipe yazılması gereken kodu içerir. Listeleme dosyası, önyükleme koduyla birlikte programın tam listesini içerir. Hata ve uyarı dosyası, derleme işlemi sırasında oluşan tüm hata ve uyarıları kaydeder. Listeleme dosyasında da bulunurlar. Sembolik bir dosyaya yazılan sembolik etiketler tablosu, hata ayıklayıcıyla daha fazla çalışmak için tasarlanmıştır. Programımızı işledikten sonra, montajcının "Assembler tarafından hata bulunamadı" mesajını vermiş olması gerekirdi, yani hiçbir hata bulunamadı. Hata dosyası oluşturulmamalıydı. Derleyiciniz herhangi bir hata mesajı oluşturduysa veya EXAMPLE.OBJ, EXAMPLE.LST ve EXAMPLE.SYM dosyaları oluşturulmadıysa, her şeyi doğru yapıp yapmadığınızı tekrar kontrol edin. PROGRAMLAMA Artık, çipe yazılması gereken EXAMPLE.OBJ adında bir nesne dosyanız var. Kayıt, programlayıcı ve PROPIC programı yardımıyla gerçekleştirilir. PROPIC programını çalıştırmak için komut satırı, çeviriciyi çalıştırmak için kullanılan satıra benzer: PROPIC <nesne_dosyası> [seçenekler] burada <nesne_dosyası, çevirici tarafından oluşturulan nesne dosyasının adıdır ve seçenekler dosyaya yazma modunu belirler. çip. Seçenekler listesi /? Assembler durumunda olduğu gibi, ilk başta herhangi bir seçenek belirtmemize gerek yok. Programlayıcıyı alın, kablosunu yazıcı bağlantı noktası konektörüne bağlayın (makinenizde 2 veya 3 yazıcı bağlantı noktası varsa ilk yazıcı bağlantı noktasına).

PIC nedir? PIC nedir?

18 mA'ya kadar iletebilen bir 36...100 V DC veya AC güç kaynağı alın ve programlayıcıya bağlayın. PIC16C84 çipini hazırlayın ancak henüz programcı soketine takmayın. Şimdi programlayıcıyı başlatabilirsiniz:

PROPİK ÖRNEĞİ Buraya programcının programının nasıl çalıştığı ile ilgili { eklenmelidir. } Artık programlanmış bir çipiniz var ve nasıl çalışacağını görebilirsiniz. TEST YAPMAK

Bir breadboard alın ve Şekil 5'te gösterilen devreyi üzerine kurun. Bu devrede kritik parça yoktur. Tüm dirençler, nominal akımdan 30 mA'dan fazla olmayan herhangi biri olan nominal + -%10, LED'lerden sapma gösterebilir. PIC16C84 çipini takmak için soketi kullanın. Devremize güç sağlamak için, mikro devreyi programlarken kullandığınız güç kaynağını kullanabilirsiniz. 5 V laboratuvar güç kaynağı da kullanabilirsiniz, bu durumda KR142EH5A dengeleyici, diyot köprüsü ve elektrolitik kondansatöre gerek yoktur ve şemadaki 5 noktasına 2 V voltaj verilir.

Devre kurulduktan sonra, her şeyin doğru şekilde monte edildiğini, LED'lerin doğru kutuplara takıldığını, mikro devreye giden gücün doğru pimlere ve doğru kutuplara gelip gelmediğini dikkatlice kontrol edin. Programlanan çipi alın, devre tahtasındaki yuvaya takın ve gücü açın. 4 LED yanmalıdır (birden sonra). İlk programınız çalışıyor! PIC KOMUT SETİ

Artık bir programın nasıl birleştirileceğini, bir çipe yazılacağını ve bir devre tahtasında test edileceğini öğrendiğinize göre, PIC ailesi mikrodenetleyiciler için tüm talimat setini açıklamaya devam edebiliriz. Bahsedeceğimiz hemen hemen her şey PIC ailesinin diğer mikrodenetleyicileri için geçerli olsa da PIC16C84'e odaklanmaya devam edeceğiz. Anlatım sürecinde belirli komutların nasıl çalıştığını daha iyi anlamak için kısa programlar yapacağız. Bu programları temel koda bağlayabilir, birleştirebilir, bir çipe koyabilir ve çipi bir breadboard'a takabilir ve nasıl çalıştığını görebilirsiniz. Bir sonraki paragrafta her şey sizin için kesinlikle açıksa, deneyemezsiniz, doğrudan bir sonraki paragrafa geçebilirsiniz. HAYIR

Açıklamamıza NOP komutu ile başlayalım. Bu komutun çıktısını görmek zor çünkü hiçbir şey yapmıyor. Bu talimat genellikle zaman geciktirme döngülerinde veya programın belirli bir bölümünün yürütme süresine ince ayar yapmak için kullanılır. CLRW

Bu komut W çalışma kaydını siler. Örneğimize bir satır ekleyelim ve tüm LED'lerin yandığını görelim.

MOVLW B'01010101'; 01010101'i W kaydına yükleyin

CLRW ; W kaydını temizle

MOVWF DATAPORT ;B bağlantı noktasına W yaz (DATAPORT)

GOTO $ ;sonsuza kadar döngü CLRF f

CLRF, herhangi bir kayıt için, CLRW'nin çalışma kaydı W için yaptığını yapar. Aşağıdaki komut, bağlantı noktası B'yi 0h olarak ayarlayacaktır.

CLRF DATAPORT ;B bağlantı noktasını temizle (DATAPORT) SUBWF f,d ADDWF f,d

W çalışma kaydını herhangi bir f kaydından çıkarın. Bu komut ayrıca STATUS kaydındaki CARRY, DIGIT CARRY ve ZERO bayraklarını ayarlar. Komutu çalıştırdıktan sonra, bu işaretleri kontrol edebilir ve sonucun sıfır mı, pozitif mi yoksa negatif mi olduğunu belirleyebilirsiniz. Virgülden sonraki d karakteri, komut sonucunun yerleştirileceği adresi ifade eder. d=0 ise sonuç W çalışma kaydına, d=1 ise sonuç komutta kullanılan f kaydına yazılır.

Örneğimizde, SCRATCH kaydına 0FFh değeri ve W kaydına 01h değeri yüklenmiştir. Ardından SUBWF komutu yürütülür ve sonuç LED'lerde görüntülenir.

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF SCRATCH ;W içeriğini SCRATCH kaydına yükleyin

MOVLW 01h ;W kaydına 01h yükleyin

SUBWF SCRATCH,0 ;çıkartma LED'leri, 11111110'in kapalı ve 1'ın açık olduğu 0'u göstermelidir.

ADDWF komutu, tam olarak aynı şekilde çalışır, W çalışma kaydını herhangi bir f kaydına ekler ve aynı bayrakları ayarlar. Aşağıdaki örnek, ADDWF komutunun nasıl çalıştığını gösterir.

MOVLW 0h ;W kaydına 0 yükleyin

MOVWF SCRATCH ;W içeriğini SCRATCH kaydına yükleyin

MOVLW 1h ;W kaydına 01h yükleyin

ADDWF SCRATCH,0 ;ekleme yap LED'leri 00000001 göstermelidir.

Çıkarma örneğinde FFh değerinin önünde "0" olduğuna dikkat edin. Assembler için "0" sembolü, bunun bir etiket değil, bir sayı olduğu anlamına gelir. 0 sembolü olmasaydı, montajcı bu programda olmayan FFh adında bir etiket aramaya başlar ve buna göre bir hata oluşur. 0FF değerini takip eden "h" karakteri, değerin onaltılık biçimde belirtildiği anlamına gelir. SUBLW k ADDLW k

Bu iki komut, işlemin W çalışma yazmacı ile komutta belirtilen bayt sabiti arasında gerçekleştirilmesi dışında yukarıda açıklananla tamamen aynı şekilde çalışır. SUBLW komutu, W çalışma kaydını k sabitinden çıkarır ve ADDLW komutu W çalışma kaydını k sabitine ekler. Bu komutlar ayrıca CARRY, DIGIT CARRY ve ZERO bayraklarını da ayarlar. Komutun sonucu çalışma yazmacı W'ye yerleştirilir. Aşağıdaki örnek SCRATCH'ı 5 azaltacaktır.

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF SCRATCH ;W içeriğini SCRATCH kaydına yükleyin

SUBLW 05h ;çalışan yazmaçtan 5 çıkar

MOVWF SCRATCH ;SCRATCH LED'lerinin yeni içeriğini yükle 11111010 göstermelidir. DECF f,d INCF f,d

DECF komutu verilen yazmacı 1 azaltır ve INCF verilen yazmacı 1 artırır. Sonuç, verilen yazmaca (d=1 için) veya çalışma yazmacı W'ye (d=0 için) geri yerleştirilebilir. Bu komutların yürütülmesi sonucunda STATUS kaydında SIFIR işareti ayarlanabilir. İşte bu komutları kullanmanın bir örneği:

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF SCRATCH ;W içeriğini SCRATCH kaydına yükleyin

DECF SCRATCH,0 ;SCRATCH değerini 1 azalt

Bu örnek, SCRATCH'ı 0'dan 1'e yükseltecektir.

CLRF SCRATCH; SCRATCH'i temizle

INCF SCRATCH,0 ;SCRATCH değerini 1 IORWF f,d ANDWF f,d XORWF f,d artırın

Bu üç komut OR, AND ve ÖZEL OR mantıksal işlemlerini gerçekleştirir. Mantıksal toplama VEYA işlemi, genellikle kayıtlardaki bireysel bitleri ayarlamak için kullanılır. Bu bitler daha sonra mantıksal bir VE işlemiyle sıfırlanır.Özdeş bitler üzerinde ÖZEL VEYA işlemi gerçekleştirildiğinde, sonuç 0'dır. kayıt olmak. Aşağıdaki prosedür, IORWF komutunu kullanarak B bağlantı noktasındaki bit 1'i ayarlayacaktır:

CLRF DATAPORT ;B bağlantı noktasını temizle

MOVLW B'00000010'; W kaydında maskeyi ayarla

IORWF DATAPORT,1 ;B portundaki bitleri W maskesiyle ayarlayın

GOTO $ ;sonsuza kadar döngü LED'ler 00000010 göstermelidir. Şimdi ANDWF komutuyla 2 biti temizleyin:

MOVLW B'11111111' ;0FFh'yi W kaydına yükleyin

MOVWF DATAPORT ;B bağlantı noktasındaki tüm bitleri ayarlayın

MOVLW B'00000101'; W kaydında maskeyi ayarla

ANDWF DATAPORT,1 ; bağlantı noktası B'deki bitleri W maskesiyle temizleyin

GOTO $ ;sonsuza kadar döngü LED'ler 00000101 göstermelidir.

Diyelim ki SCRATCH kaydını kullandık ve 04h'ye eşit olup olmadığını bilmek istiyoruz. Bu, XORWF komutunu kullanmak için iyi bir zamandır:

MOVLW 04h ;W kaydına 04h yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

XORWF SCRATCH,0 ; W ve SCRATCH'in eşit olup olmadığını kontrol edin SCRATCH ve W eşit olduğundan, XORWF işleminin sonucu sıfırdır (tüm LED'ler yanar). STATUS kaydı, gerçek programın kontrol edip işleyebileceği ZERO bitini ayarlayacaktır. IORLW k ANDLW k XORLW k

Bu üç komut, işlemin W çalışma yazmacı ile komutta belirtilen maske arasında gerçekleştirilmesi dışında yukarıda açıklanan benzerleriyle aynı eylemleri gerçekleştirir. Komut yürütmenin sonucu W çalışma kaydına yerleştirilir. Örneğin:

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

ANDLW 040h ;6. bitten çıkın LED'ler 01000000 gösterecektir.

MOVLW 10h ;W kaydına 10h yükleyin

IORLW 09h ;set bitleri 0 ve 3 LED 00011001 gösterecektir.

MOVLW B'00100000'; W kaydına 40 saat yükle

XORLW B'11111111' ;ters W LED'leri 11011111'i gösterir. MOVF f,d

Bu komut esas olarak bir kaydı çalışma kaydına W (d=0) taşımak için kullanılır. d=1 olarak ayarlarsanız bu komut registerı kendi içine yükleyecektir fakat STATUS registerindeki ZERO biti register içeriğine göre set edilecektir. Örneğin, 0Fh SCRATCH kaydına yüklemek ve ardından SCRATCH kaydını W çalışma kaydına yüklemek istiyoruz.

MOVLW 0Fh ;0Fh'yi çalışma yazmacı W'ye yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

CLRW; açık W

MOVF SCRATCH,0 ;SCRATCH'ı W kaydına yükleyin

MOVF SCRATCH,1 Koşul karşılanırsa (SCRATCH = 0h) STATUS kaydının ZERO biti ayarlanır. COMF f,d

Bu komut herhangi bir kaydı ters çevirir. d=0 olduğunda, sonuç çalışma yazmacı W'ye girilir ve d=1 olduğunda belirtilen yazmacın içeriği ters çevrilir. Örnek olarak, 01010101 değerini ters çevirelim:

MOVLW B'01010101'; 01010101'i W kaydına yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

COMF SCRATCH,0 ;invert SCRATCH LED'leri 10101010 gösterecektir. DECFSZ f,d INCFSZ f,d

PIC birleştirici ile biraz deneyim kazandıkça, bu komutları çok sık kullanacaksınız. d=1 ile, DECFSZ komutu bir azaltır ve INCFZ belirtilen kaydı bir artırır ve eğer kayıt sıfır olursa bir sonraki talimatı atlar. d=0 ile sonuç W registerına yazılır ve çalışan register W sıfır olursa bir sonraki komut atlanır. Bu komutlar, zaman gecikmeleri, sayaçlar, döngüler vb. oluşturmak için kullanılır. İşte bir döngü kullanmanın tipik bir örneği: BAŞLAT

MOVLW 0FFh ;FFh'yi W kaydına yükleyin

MOVWF SCRATCH ;W kaydını SCRATCH LOOP'a yükleyin

DECFSZ SCRATCH,1 ;SCRATCH değerini 1 azalt

GOTO LOOP ;ve = 0'a kadar geri döngü

MOVF DIGIT ;DIGIT kaydını W olarak yükleyin

MOVWF DATAPORT; LED'lere çıkış

DECF DIGIT,1 ;DIGIT kaydını 1 azalt

GOTO START ;başlangıca git Sonuç olarak, LED'ler farklı oranlarda yanıp sönecektir. Düşük sıralı LED en sık yanıp sönecek ve yüksek sıralı LED en az yanıp sönecektir. 4 MHz'lik bir saat frekansıyla, en yüksek sıradaki LED'in yanıp sönme frekansı yaklaşık 8 Hz olacaktır ve sonraki her biri iki kat daha sık yanıp sönecektir. Şimdi bunu nasıl yaptığımıza bakalım. Buradaki DECFSZ komutu, iki komuttan oluşan bir gecikme döngüsünde çalışır - DECFSZ ve GOTO LOOP. SCRATCH kaydını 0FFh ile önceden yüklediğimiz için, bu döngü SCRATCH sıfır olana kadar 255 kez yürütülür. 4 MHz'lik bir saat frekansı ile bu, 1 µs/komut * 2 talimat * 255 = 510 µs'lik bir gecikme sağlar. DIGIT yazmacına önceden bir şey yazmadık bu yüzden ilk geçişte ledlerde herhangi bir değer gösteriliyor olabilir. Daha sonra DIGIT kaydı 1 azaltılır ve döngü baştan tekrarlanır. Sonuç olarak, DIGIT kaydı 256 döngüde tüm değerler üzerinde yinelenir, yani. yaklaşık 130 ms.

Aynı kod, SCRATCH kaydına yüklenen değeri FFh'den 0h'ye değiştirerek INCFSZ komutu ile kullanılabilir. DECF komutu INCF komutu ile değiştirilirse LED'ler aynı şekilde yanıp sönecektir. SWAF f,d

Bu komut, herhangi bir kayıttaki nibble'ları değiştirir. Diğer komutlarda ise d=0 olduğunda sonuç work register W'ye yazılır, d=1 olduğunda ise registerda kalır. İşte bu komutu kullanmanın basit bir örneği:

MOVLW B'00001111'; 0Fh'yi W kaydına yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

SWAPF SCRATCH,0 ;değiştirme nibbles LED'leri 11110000 gösterecektir. RRF f,d RLF f,d

PIC derleyicisinde iki kaydırma talimatı vardır - herhangi bir RRF yazmacının CARRY biti boyunca sağa kaydırma ve herhangi bir RRF yazmacının CARRY biti aracılığıyla sola kaydırma. Diğer komutlarda ise d=0 olduğunda kaydırmanın sonucu W registerına yazılır, d=1 olduğunda ise registerda kalır. Shift komutları, çarpma ve bölme işlemlerini gerçekleştirmek, seri veri aktarımı ve diğer amaçlar için kullanılır. Her durumda, kaydırmanın yönüne bağlı olarak 8 bitlik yazmacın dışına kaydırılan bit STATUS yazmacındaki CARRY bitine, CARRY biti yazmacın diğer ucuna yazılır. Sola kaydırma, yazmacın en önemsiz bitine RLF CARRY yazar ve yazmacın en önemli bitine sağa kaydırma RRF CARRY yazar.

CLRF STATUS ;DURUM kaydını temizle

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

RRF SCRATCH,0 ;sağa kaydır LED'ler 01111111'i göstermelidir çünkü CARRY yüksek bite yüklenmiştir. Şimdi sola geçelim:

CLRF STATUS ;DURUM kaydını temizle

MOVLW 0FFH ;0FFh'yi W kaydına yükleyin

MOVWF SCRATCH ;SCRATCH'de W yazmacını yükle

RLF SCRATCH,1 ;sola kaydırma LED'leri 11111110'u göstermelidir. BCF f,b BSF f,b

Clear BCF biti ve set BSF bit komutları, yazmaçlardaki ayrı bitler üzerinde işlem yapmak için kullanılır. Parametre b, işlemin gerçekleştirildiği bit sayısı anlamına gelir ve 0 ile 7 arasında değerler alabilir. BCF komutunu kullanarak LED'i açmaya çalışalım:

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF DATAPORT; LED'leri kapatın

BCF DATAPORT,7 ;B bağlantı noktasındaki bit 7'yi temizleyin

GOTO $ ;sonsuza kadar döngü Bu, bit 7'ye karşılık gelen LED'i açacaktır. Aynı şeyi bir maske ve ANDWF komutu kullanarak yaptığımızı hatırlayın. Aradaki fark, ANDWF ve IORWF komutlarının maskenin önceden biçimlendirilmesini ve bazı kayıtlarda saklanmasını gerektirmesidir, ancak aynı zamanda birkaç biti aynı anda ayarlayabilir veya temizleyebilirler. BCF ve BSF komutları yalnızca bir bit üzerinde çalışır. Ek olarak, BCF ve BSF komutları STATUS kaydını değiştirmez, bu nedenle genellikle durum kaydının müteakip kontrolünün gerekli olmadığı durumlarda kullanılırlar. BTFSC f,b BTFSS f,b

Koşullu atlama komutları BTFSC ve BTFSS, herhangi bir kayıttaki belirli bir bitin durumunu kontrol eder ve sonuca bağlı olarak bir sonraki komutu atlar. BTFSC komutu, belirtilen bit açıksa komutu, ayarlanmışsa BTFSS komutunu atlar. İşte basit bir örnek:

MOVLW 0FFh ;0FFh'yi W yazmacına yükleyin

MOVWF DATAPORT; LED'leri kapatın

MOVLW B'00000001'; W kaydına 01 saat yükle

MOVWF SCRATCH ;W kaydını SCRATCH LOOP'a yükleyin

BTFSS CNTRLPORT,0 ;CNTRLPORT'ta bit 0'ı kontrol edin

GOTO LOOP ; bit 0 ayarlanana kadar bekleyin

BCF DATAPORT,7 ;LED'i aç

GOTO $ ;sonsuza kadar döngü Bu örnek, bağlantı noktası A'nın (yonga pimi 0) bit 17'ını kontrol eder ve bu pim yüksek ayarlanmışsa, LED'i yakar. Bu örnekte BTFSS'yi BTFSC ile değiştirmeyi deneyin. A bağlantı noktasının 0 biti azaldığında LED yanacaktır.

Daha önce STATUS kaydındaki durum bitlerini kontrol etme olasılığından bahsetmiştik. Bu aynı zamanda BTFSS ve BTFSC komutlarıyla da yapılır:

;CARRY bitini kontrol edin

BTFSS STATUS,C ; C ayarlanmışsa, GOTO'yu atla

HERHANGİ BİR YERE GİT ; ZERO biti aynı şekilde kontrol edilir:

;SIFIR bitini kontrol edin

BTFSS STATUS,Z ; Z ayarlanmışsa, GOTO'yu atla

HERHANGİ BİR YERE GİT ; Bu örnekleri çok sık kullanacağınızı rahatlıkla söyleyebiliriz. ARAMA k GERİ DÖN

Bu iki komut, alt programlarla çalışmak için tasarlanmıştır. CALL komutu, komutta belirtilen adresteki alt programa atlamak için, RETURN komutu ise alt programdan geri dönmek için kullanılır. Her iki komut da 2 döngüde yürütülür. CALL komutunun bulunduğu adres, yığın adı verilen özel olarak düzenlenmiş kayıtlarda saklanır. Bu kayıtlara erişilemez ve yalnızca alt program çağrıları ve geri dönüşler için kullanılır. Yığın derinliği, yani özel kayıtların sayısı 8'dir. Bu nedenle, ana programdan 8'den fazla iç içe alt program çağrısı yapılamaz. Alt program döndükten sonra yürütme, CALL'dan sonraki komutla devam eder. W kaydı ve STATUS kaydı, bir alt program çağrıldığında kaydedilmez, dolayısıyla gerekirse, ayrı bellek konumlarında saklanabilirler. İşte bir alt program kullanmanın basit bir örneği: BAŞLAT

BSF DATAPORT,7 ; LED'i kapatın

CALL TURNON; alt programı çağır

GOTO START ; TURNON'u başlatmak için git

BCF DATAPORT,7 ;LED'i aç

RETURN ; alt programdan geri dönüş Sonuç olarak, LED yaklaşık 150 kHz frekansta yanıp sönecektir. RETLW'den RETFIE'ye dönüştürücü

Alt programlardan dönmek için iki komut daha vardır. RETLW komutu, W çalışma kaydında bu komutta belirtilen sabiti döndürür ve RETFIE komutu kesmeleri etkinleştirir. RETLW komutu genellikle değer tabloları oluşturmak için kullanılır. Çalışma kaydı W'nin tablonun başından bir uzaklık içermesine izin verin. Ardından, aşağıdaki prosedürle istediğiniz öğeyi elde edebilirsiniz:

MOVLW 02h ; ofseti ayarla

CALL SHOWSYM; alt programı çağır

MOVWF DATAPORT ; çıkış tablosu öğesi B bağlantı noktasına

GOTO $ ;sonsuza kadar döngü SHOWSYM

ADDWF PC ;tablo ofsetini hesapla

RETLW 0AAh ;tablonun 1. elemanı

RETLW 0BBh ;tablonun 2. elemanı

RETLW 0CCh ;3. tablo giriş LED'leri 10111011 göstermelidir. ÖZEL KOMUTLAR

Geriye iki özel komuttan bahsetmek kalıyor - CLRWDT ve SLEEP. CLRWDT komutu, amacını daha önce tartıştığımız bekçi uygulaması zamanlayıcısını sıfırlamak için tasarlanmıştır. Bu komut, iki bitişik CLRWDT komutu arasındaki programın yürütme süresinin bekçi köpeği zamanlayıcısını aşmaması için programın bu tür bölümlerinde bulunmalıdır. UYKU komutu, işlemciyi düşük güç moduna geçirmek için tasarlanmıştır. Bu komutu yürüttükten sonra, işlemci saat üreteci kapatılır ve işlemci, sıfırlama girişi veya bekçi köpeği zamanlayıcısı veya kesinti ile çalışma moduna geri döndürülebilir. ÇÖZÜM

Bu makale, PIC16C84 mikrodenetleyicisinin yeteneklerinin tam bir açıklaması olma iddiasında değildir. Bunu yapmak için teknik açıklamasını okumalısınız. Ayrıca, MPALC derleyicisinin tüm olanaklarını, makroları, seçenekleri vb. anlamak için. Kullanım kılavuzunu okumanız sizin için faydalı olacaktır. Gerekli tüm seçenekleri doğru bir şekilde ayarlamak için programlayıcıyı kullanma talimatlarını okumalısınız. Mikrodenetleyicilerin uygulama örnekleri size bağımsız projeler için sağlam bir temel sağlayacaktır. Herhangi bir sorunuz varsa, aşağıdaki adresten MICROCHIP ürünleri için bölgesel destek merkeziyle iletişime geçebilirsiniz: Moscow, Rubtsovskaya nab. 3 ofis 502, tel. (095)-263-9930 Burada her zaman tüm sorularınızı yanıtlamaya hazır olacaklar. Ayrıca (095)-162-8405 numaralı telefonu arayarak yazılımın yeni sürümlerini, uygulama örneklerini ve referans bilgilerini bölgesel BBS'den alabilirsiniz.

AD mikro BBS

Yayın: N. Bolshakov, rf.atnn.ru

Diğer makalelere bakın bölüm Mikrodenetleyiciler.

Oku ve yaz yararlı bu makaleye yapılan yorumlar.

<< Geri

En son bilim ve teknoloji haberleri, yeni elektronikler:

Sıcak biranın alkol içeriği 07.05.2024

En yaygın alkollü içeceklerden biri olan biranın, tüketim sıcaklığına bağlı olarak değişebilen kendine özgü bir tadı vardır. Uluslararası bir bilim insanı ekibi tarafından yapılan yeni bir araştırma, bira sıcaklığının alkol tadı algısı üzerinde önemli bir etkiye sahip olduğunu ortaya çıkardı. Malzeme bilimcisi Lei Jiang liderliğindeki çalışma, farklı sıcaklıklarda etanol ve su moleküllerinin farklı türde kümeler oluşturduğunu ve bunun da alkol tadı algısını etkilediğini buldu. Düşük sıcaklıklarda, "etanol" tadının keskinliğini azaltan ve içeceğin tadının daha az alkollü olmasını sağlayan daha fazla piramit benzeri kümeler oluşur. Aksine, sıcaklık arttıkça kümeler daha zincir benzeri hale gelir ve bu da daha belirgin bir alkol tadıyla sonuçlanır. Bu, baijiu gibi bazı alkollü içeceklerin tadının neden sıcaklığa bağlı olarak değişebileceğini açıklıyor. Elde edilen veriler içecek üreticileri için yeni fırsatlar sunuyor. ... >>

Kumar bağımlılığı için başlıca risk faktörü 07.05.2024

Bilgisayar oyunları gençler arasında giderek daha popüler bir eğlence biçimi haline geliyor ancak buna bağlı oyun bağımlılığı riski önemli bir sorun olmaya devam ediyor. Amerikalı bilim insanları bu bağımlılığa katkıda bulunan ana faktörleri belirlemek ve önlenmesine yönelik öneriler sunmak amacıyla bir çalışma yürüttüler. Altı yıl boyunca 385 genç, hangi faktörlerin onları kumar bağımlılığına yatkın hale getirebileceğini bulmak için takip edildi. Sonuçlar, çalışmaya katılanların %90'ının bağımlılık riski altında olmadığını, %10'unun ise kumar bağımlısı olduğunu gösterdi. Kumar bağımlılığının başlangıcındaki temel faktörün düşük düzeyde olumlu sosyal davranış olduğu ortaya çıktı. Düşük düzeyde olumlu sosyal davranışa sahip gençler, başkalarının yardım ve desteğine ilgi göstermezler, bu da gerçek dünyayla temasın kaybolmasına ve bilgisayar oyunlarının sunduğu sanal gerçekliğe bağımlılığın derinleşmesine yol açabilir. Bu sonuçlara dayanarak bilim insanları ... >>

Trafik gürültüsü civcivlerin büyümesini geciktiriyor 06.05.2024

Modern şehirlerde bizi çevreleyen sesler giderek daha keskin hale geliyor. Ancak çok az insan bu gürültünün hayvanlar dünyasını, özellikle de henüz yumurtalarından çıkmamış civcivler gibi hassas canlıları nasıl etkilediğini düşünüyor. Son araştırmalar bu konuya ışık tutuyor ve gelişimleri ve hayatta kalmaları açısından ciddi sonuçlara işaret ediyor. Bilim insanları, baklava sırtlı zebra yavrularının trafik gürültüsüne maruz kalmasının gelişimlerinde ciddi aksamalara yol açabileceğini buldu. Deneyler, gürültü kirliliğinin yumurtadan çıkmalarını önemli ölçüde geciktirebildiğini ve ortaya çıkan civcivlerin sağlığı geliştiren bir dizi sorunla karşı karşıya olduğunu göstermiştir. Araştırmacılar ayrıca gürültü kirliliğinin olumsuz etkilerinin yetişkin kuşlara da yayıldığını buldu. Üreme şansının azalması ve doğurganlığın azalması, trafik gürültüsünün yaban hayatı üzerindeki uzun vadeli etkilerini göstermektedir. Araştırma sonuçları ihtiyacı vurguluyor ... >>

Arşivden rastgele haberler

Posta kutusu mikropları öldürür 22.12.2002

Geçen yılki şarbon hikayesinden sonra, birçok Amerikalı posta kutularına korkuyla yaklaşıyor.

Florida'dan Mucit Fritz Braun onları korkudan kurtarmayı planlıyor. Her Amerikan evinde yol kenarında duran standart posta kutularına cerrahi dikişleri ve pansumanları sterilize etmek için kullanılan tipte üç ultraviyole lamba üreten küçük bir firma kurdu.

Ultraviyole sadece zarfların yüzeyindeki tüm mikroorganizmaları öldürmekle kalmaz, aynı zamanda kağıda nüfuz ederek şarbon sporlarını 6 saat içinde dezenfekte eden ozon üretir (deneyler Brezilya'daki laboratuvarlardan birinde gerçekleştirildi - görünüşe göre, hiçbir şey yoktu). ABD'de risk almaya istekli insanlar).

Posta Servisi tasarımı onaylarsa, terörle mücadele posta kutuları her biri 300 ila 400 dolar arasında satışa sunulacak.

Diğer ilginç haberler:

▪ Böceklerde Kolektif Zeka

▪ Sabit disklerin kapasitesi önemli ölçüde artacak

▪ Körlük geni keşfedildi

▪ Recon Jet: Google Glass'ın rakibi

▪ Işıkla çalışan mikroskobik metacarlar

Bilim ve teknolojinin haber akışı, yeni elektronik

 

Ücretsiz Teknik Kitaplığın ilginç malzemeleri:

▪ sitenin bölümü Elektrik güvenliği, yangın güvenliği. Makale seçimi

▪ makale Beyaz köleler. Beyaz siyahlar. Popüler ifade

▪ makale Satrançta dikey olarak nasıl rok atılır? ayrıntılı cevap

▪ makale İyonlaştırıcı radyasyon ve bunlara karşı koruma

▪ makale Esansların, ekstraktların ve tentürlerin hazırlanması için genel talimatlar. Basit tarifler ve ipuçları

▪ makale Farklı yerlerden aydınlatma kontrolü. Radyo elektroniği ve elektrik mühendisliği ansiklopedisi

Bu makaleye yorumunuzu bırakın:

Adı:


E-posta isteğe bağlı):


Yorum:





Bu sayfanın tüm dilleri

Ana sayfa | Kütüphane | Makaleler | Site haritası | Site incelemeleri

www.diagram.com.ua

www.diagram.com.ua
2000-2024