C İLE PİC PROGRAMLAMA
Giriş
Assembly dili kullanarak mikro programlama, artik söz değil çok sinir bozucu ve hantal. Zaman geçtikçe, geliştiriciler mikro için özel olarak hedeflenen üst düzey diller için Derleyicileri başlamıştır. Ben şahsen PIC kullanın ve onlar için kaynak oldukça çok şey var. MBasic gibi bile iyi bir temel derleyiciler var, ama TEMEL nefret, ben bile bu konuda konuşmak olmaz! Ben CC5X, SDCC (bu açık kaynak) ve HiTech yazılım PIC C gibi çeşitli derleyiciler ile, PIC16F84, çok popüler bir mikroişlemci için uygulamalar oluşturmak için çalıştık. Ben yüksek PIC kullanmayın çünkü henüz, Microchip mikroC kullanmamışlardır. Orada ücretsiz bir Lite versiyonu Bunların her biri kendi güçlü noktaları ve zayıf olanlar vardır, ama bugüne kadar, ben tavsiye ederim en iyi derleyici PIC C olan HiTech Yazılım ve beklendiği gibi, beklediğim olmaz bir şirketten daha az bir şey özellikle PIC mikro denetleyiciler için C derleyicileri geliştirmeyi amacı vardır.Geçmiş
Her zamanki gibi, kodlama her türlü herhangi bir yeni başlayanlar için, her zaman o ilk "merhaba dünya" uygulaması olmalı! Mikroişlemcilerin programlanması, bu kesinlikle bir LED açık ve kapalı yanıp sönüyor. Şimdi bu yapacağız.Ben PIC C Pro (45 günlük deneme sürümü) ile HI-TIDE Integrated Development Environment kullanıyorum. Siz de PIC C Lite kullanabilirsiniz (bu her şeyi bilen kod üretimi olmadığı için daha büyük bir hex dosyası üretecektir). Dahası var? PIC C Lite kolayca mikroçipler MPLAB entegre ... bu yüzden oraya gitmek ... iki ücretsiz ürün var.
SDCC DevMic adlı bir IDE vardır (Ben gibi Delphi ile yazılmış olduğunu düşünüyorum DevC + +, onlar çok benzer) ve her ikisi de açık kaynak vardır. Ancak, başka bir zaman için rezerv SDCC izin ... Ben bir acemi için daha iyi söyleyemem.
Yani, eski CodeProject demişler Biraz zzzzt zzzt izin!
<htc.h> Ve <pic.h> standart tanımlar içerir ve birlikte çalıştığınız herhangi bir kaynak dosya dışında bırakılmak asla. Biz LED biraz geciktirmek istediğiniz bu yana, bir fonksiyonu kullanmak zorundadırDelayMs(int)
, bu işlevi 255 değerleri sürer. Bu sayı LED açık veya kapalı olmak istediğiniz milisaniye sayısını gösterir. Ayrıca, işaretçilerine olanlar girişler çıkışlar ve hangi hangi portu, ya da daha spesifik olarak, beyan etmek zorunda kalacak. PortB RB0-RB7 8 bağlantı noktası vardır, ve (herhangi bir pin bir giriş ya da çıkış olabilir) iki yönlüdür. PortA RA0-RA5 gelen işaretçilerine vardır ve aynı zamanda iki yönlüdür. Ancak, RB4 için RB7 kesmeleri olarak yapılandırılabilir. Daha sonra bir kesme ne olduğunu göreceğiz. Sizin kod editörü şu şekilde olmalıdır:# Include <htc.h> # Include <pic.h> # Include <delay.c> Ana () { TRISB = 0; / / outpot olarak PORTB ilan (için, ;) / / sonsuza kadar do { RB0 = 1 / / LED ON DelayMs (250); 0,25 saniye / / gecikme RB0 = 0; / / OFF LED DelayMs (250); } }Oluşan HEX dosyası almak ve mikro (Bunu nasıl yapacağınızı öğrenmek varsayıyorum) içine yükleyin. Bir PIC16F84 kullandığınızı unutmayın. Eğer başka bir türü kullanıyorsanız, o zaman proje yaparken bu ayrıntıyı belirtmek gerekir. Eğer proje ile çalışmak bile HI TIDE bile, her zaman PIC herhangi bir türü için kaynak kodu uyum sağlar.
PIC (I 26.3mA bazı kez akımları ölçmüş) 25mA akım en fazla kaynağı vardır ve bu yeterli doğrudan LED sürücü etmektir. Eğer RB0 pin ve yere LED bağlamak Yani, bunu bir saniyenin dörtte yanıp görmelisiniz. Bir LED Eğer (kısaca, bir oryantasyon işe yaramazsa, ikinci gerekir!!!) Sağ bağlantısı olması gerekir bu yüzden, bir pn kavşak olduğunu unutmayın.
Normal çalışma müdahale
Her zaman, mikroişlemciler ve mikrodenetleyiciler, biz çok şeyler kontrol isteyip istemediğinizi ve farklı durumlara göre farklı şekilde etkiler. Diğer bir deyişle, orada normal çalışma sequence1 olsun, bu tür ve böyle bir şey olduğunda, sequence2 etkinleştirin. Normalde, bu bir "kesme dizisi" denilen, ama daha deneyimli programcılar (kesme dizileri program dahilinde kendi kod alanı ikamet ve doğrudan değiştirmek için ana rutin yürütülmesine neden gerekir) eleştirilerine önlemek için, bize sadece izin "normal işlemini engelliyor" diyoruz!Orada C. One bunu yapmak için iki yol kullanmakta olup
if
ifadeleri, ve başka bir kullanmaktır while
tablosu. Sevmiyorum while
döngüler, bu yüzden "sadık olacaktır if
".Biz kod biraz değiştirmek için gidiyor ve yerine milisaniye (üstelik 255!) Sınırlı olma saniye ondalık bizim "gecikme" belirtebilirsiniz böylece bile ekstra bir işlev eklemek vardır.
Yani, bize HITIDE veya MPLAB başka bir proje oluşturmanızı ve bu kodu eklemek. Bu benim yüklenen kaynak kodu Interrupt.c denir.
# <htc.h> Dahil # <pic.h> Dahil # <delay.c> Dahil int j, ben kullanacak / / genel global değişkenler geçersiz Wait_These_Seconds (float s) / / sadece 3 ondalık { milli_Equiv int / / mili saniye eşdeğer tamsayı milli_Equiv = 1000 * s; (; j <= milli_Equiv; j + + j = 1) için { DelayMs (1); } } Ana () { TRISB = 0xF0 / / RB4: RB7 girilir, ikili 11110000 for (; ;) { if (RB7 == 1) { RB0 = 1 / / LED ON Wait_These_Seconds (1 8)., 1.8 saniye / / gecikmesi RB0 = 0; / / OFF LED Wait_These_Seconds (0 9).; } (RB7 == 0) / / kesme yere RB7 bağlanıyor ise { RB0 = 1 / / LED ON Wait_These_Seconds (0 7)., 0.7 saniye / / gecikmesi RB0 = 0; / / OFF LED Wait_These_Seconds (0 1).; } } }Sana onaltılık ikili ve tersi dönüştürmek öğrenmek öneririz. Eğer C ne şimdi yapmış olduğu içinde PIC çalışmak için gidiyoruz eğer ihtiyacınız:
- Biz girişleri kabul RB7 için işaretçilerine RB4 yapılandırılmış ve böylece kesmeler, onlar bunu tek işaretçilerine olduğu ve var
- bizim kesme pin olarak RB7 var. Normal operasyonlarda, RB7 = 1. Bizim kesme eylemi RB7 zemin ve sıfır (donanım her zaman yazılım öncelikli!) Için zorlamak için olacaktır.
Dahası var?
Yerine büyük bir ampul veya bir DC motor yanıp ister misiniz? Eğer bana bildirin, ben nasıl anlatacağım! Biz sadece mevcut yükseltmek ve bir transistör kullanmak zorunda!Herhangi bir sorunuz ve sorun giderme açıktır.
Ben dekoratif ışıklar gibi şeyler için karmaşık algoritmalar oluşturmak için nasıl hakkında daha fazla makale yazacağım, aynı anda farklı zaman aralıklarında yanıp sönen LED, ve çok daha fazlası!
0 yorum:
Yorum Gönder
Not: Yalnızca bu blogun üyesi yorum gönderebilir.