Keil Language ile Gömülü C Programlama Eğitimi

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Gömülü C, elektronik araçlar geliştirmek için yazılım alanında en popüler programlama dilidir. Her işlemci gömülü yazılımla ilişkilendirilmiştir. Gömülü C Programlama işlemci tarafından belirli işlevleri gerçekleştirmede önemli bir rol oynar. Günlük hayatımızda çamaşır makineleri, cep telefonları, dijital kamera vb. Birçok elektronik cihazı sıklıkla kullanıyoruz, gömülü C ile programlanan mikrodenetleyicilere dayalı olarak çalışacaktır.

Gömülü Sistem Programlama

Gömülü Sistem Programlama



Yazılan C kodu daha güvenilir, taşınabilir ve ölçeklenebilir ve aslında anlaşılması çok daha kolay. İlk ve en önemli araç, gömülü bir sistemin çalışmasına karar veren gömülü yazılımdır. Gömülü C programlama dili, en çok mikro denetleyicileri programlamak için kullanılır.


Gömülü C Programlama Eğitimi (8051)

Gömülü C programlama tam bir donanımla ilgili programlama tekniği olduğundan, programı yazmak için gömülü tasarımcıların belirli işlemcilerin veya denetleyicilerin donanımı hakkında yeterli bilgiye sahip olması gerekir.



Programlama Eğitimi

Programlama Eğitimi

Daha önce, montaj seviyesinde programlama kullanılarak birçok gömülü uygulama geliştirildi. Bununla birlikte, C, COBOL ve Pascal gibi çeşitli üst düzey dillerin ortaya çıkmasıyla bu sorunun üstesinden gelmek için taşınabilirlik sağlamadılar. Ancak, geniş çapta kabul gören C diliydi. gömülü sistemler uygulama geliştirme ve bunu yapmaya devam ediyor.

Yerleşik sistem

Gömülü sistem, gömülü C programlama yazılımı ve donanım kısmı büyük ölçüde mikro denetleyicilerden oluşan bir kombinasyon olarak tanımlanır ve belirli bir görevi yerine getirmesi amaçlanır. Bu tür gömülü sistemler, çamaşır makineleri ve video kaydediciler, buzdolapları vb. Gibi günlük hayatımızda kullanılmaktadır. Gömülü sistem ilk olarak 8051 mikro denetleyiciler tarafından tanıtıldı.

Yerleşik sistem

Yerleşik sistem

8051 Mikrodenetleyiciye Giriş

8051 mikro denetleyici temel bir mikro denetleyicidir ve ilk olarak 1970 yılından bu yana ‘Intel Corporation’ tarafından tanıtılmıştır. 8086 işlemci mimarisi tarafından geliştirilmiştir. 8051, Philips, Atmel, dalls vb. Gibi farklı üreticiler tarafından geliştirilmiş bir mikro denetleyici ailesidir. 8051 mikro denetleyiciler küçük çocuk oyuncaklarından büyük otomotiv sistemlerine kadar birçok gömülü üründe kullanılmıştır.


8051 Mikrodenetleyici

8051 Mikrodenetleyici

8051 mikro denetleyici 8 bitlik 'CISC' mimarisi . Arabirimli çevre aygıtlarını kontrol etmek için programlanmış tek bir entegre yonga içine yerleştirilmiş bellekler, seri iletişim, kesintiler, giriş / çıkış portları ve zamanlayıcı / sayaçlardan oluşur. Program mikro denetleyicinin RAM'inde saklanır, ancak programı yazmadan önce RAM'in farkında olmalıyız. organizasyon mikrodenetleyicinin.

Gömülü Sistem Programlama: Temel Beyan

Her işlev, belirli bir görevi yerine getiren bir ifadeler koleksiyonudur ve bir veya daha fazla işlevin koleksiyonuna programlama dili denir. Her dil bazı temel unsurlardan ve gramer kurallarından oluşur. C dili programlaması, bir C programı yazmak için karakter seti, değişkenler, veri türleri, sabitler, anahtar sözcükler, ifadeler vb. İle çalışmak üzere tasarlanmıştır. Tüm bunlar başlık dosyası veya kitaplık dosyası altında değerlendirilir ve şu şekilde temsil edilir:

#Dahil etmek

Gömülü C Programlama Geliştirme

Gömülü C Programlama Geliştirme

C dilinin uzantısı Gömülü C programlama dili olarak adlandırılır. Yukarıdakiyle karşılaştırıldığında, C dilinde gömülü programlama, veri türleri ve anahtar sözcükler gibi bazı ek özelliklere sahiptir ve başlık dosyası veya kitaplık dosyası şu şekilde temsil edilir:

#Dahil etmek

Gömülü C Ek Anahtar Sözcükler

  • sbit
  • bit
  • SFR
  • uçucu
  • makrolar tanımlar

'Sbit', mikro denetleyicinin tek PIN kodunu bildirmek için kullanılır. Örneğin P0.1 pinine led bağlanır, değerin direk port pinine gönderilmesi tavsiye edilmez, önce pini başka bir değişkenle bildirmemiz gerekir, sonra programın herhangi bir yerinde kullanabiliriz.

Sözdizimi: sbit a = P0 ^ 1 // ilgili pini bir değişkenle bildirir //
a = 0x01 // değeri port pinine gönder //

'Bit', değişkenin durumunu kontrol etmek için kullanılır.

Sözdizimi: bit c // bit değişkenini bildirir //
c = a // c değişkenine bir değer atanır //
if (c == 1) // true veya false koşulunu kontrol edin //

{
… ..
……
}

'SFR' anahtar sözcüğü, SFR kayıtlarına başka bir adla erişmek için kullanılır. SFR kaydı bir özel işlev kaydı , adresi belirterek çevreyle ilgili tüm kayıtları içerir. SFR kaydı, SFR anahtar sözcüğü ile bildirilir. SFR anahtar sözcüğü büyük harflerle yazılmalıdır.

Sözdizimi: SFR bağlantı noktası = 0x00 // 0x00, bağlantı noktası değişkeni tarafından bildirilen bir bağlantı noktası 0 adresidir //
Port = 0x01 // sonra değeri port0'a gönderin //
gecikme ()
bağlantı noktası = 0x00
gecikme ()

'Uçucu' anahtar kelime, gömülü sistem geliştirmede en önemlisidir. Uçucu anahtar kelime değeri ile bildiren değişken beklenmedik şekilde değiştirilemedi. Bellek eşlemeli çevresel kayıtlarda, ISR'ler tarafından değiştirilen global değişkenlerde kullanılabilir. Verileri iletmek ve almak için geçici anahtar sözcüğü kullanmadan, kod hatası veya bir optimizasyon hatası meydana gelecektir.

Sözdizimi: volatile int k

Makro, ön işlemci yönergesi olarak ifade bloğunu bildirmek için kullanılan bir addır. Ad her kullanıldığında, makronun içeriği ile değiştirilir. Makrolar #define'ı temsil eder. Tüm bağlantı noktası pinleri makrolar tarafından tanımlanır.

Sözdizimi: #define dat Po // tüm bağlantı noktası bir değişken tarafından bildirilir //
dat = 0x01 // veri port0'a gönderilir //

Temel Gömülü C Programları

Mikrodenetleyici programlaması her biri için farklı olacaktır. işletim sistemi türü . Linux, Windows, RTOS vb. Gibi birçok işletim sistemi mevcut olsa da. Bununla birlikte, RTOS, gömülü sistem geliştirme için çeşitli avantajlara sahiptir. Bu makalede, bir 8051 mikro denetleyici kullanarak gömülü C programlaması geliştirmek için temel gömülü C programlaması anlatılmaktadır.

Gömülü C Programlama Adımları

Gömülü C Programlama Adımları

  • 8051 mikro denetleyici ile yanıp sönen LED
  • 8051 mikro denetleyici kullanarak 7 segmentli ekranda Numara Görüntüleme
  • 8051 mikro denetleyici kullanarak Zamanlayıcı / Sayaç hesaplamaları ve programı
  • 8051 mikro denetleyici kullanarak Seri İletişim hesaplamaları ve programı
  • 8051 mikro denetleyici kullanarak Programları Kes
  • 8051 mikro denetleyici kullanarak Tuş Takımı Programlama
  • 8051 mikro denetleyici ile LCD Programlama

8051 Mikrodenetleyici kullanarak LED Yanıp Sönüyor

LED, çoğu uygulamada, çoğunlukla gösterge amacıyla kullanılan yarı iletken bir cihazdır. Sonuçların farklı aşamalarda geçerliliğini kontrol etmek için test sırasında gösterge olarak çok çeşitli uygulamalar bulmaktadır. Çok ucuzdurlar ve çeşitli şekil, renk ve boyutlarda kolayca bulunabilirler. LED'ler tasarlamak için kullanılır mesaj görüntüleme panoları ve trafik kontrol sinyal lambaları vb. Burada LED'ler, 8051 mikrodenetleyicinin PORTO'su ile arayüzlenir.

8051 Mikrodenetleyici kullanarak LED Yanıp Sönüyor

8051 Mikrodenetleyici kullanarak LED Yanıp Sönüyor

1. 01010101
10101010

#include // başlık dosyası //
void main () // program yürütme durum noktası //
{
işaretsiz int i // veri türü //
while (1) // sürekli döngü için //
{
P0 = 0x55 // hexa değerini port0'a gönder //
için (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // hexa değerini port0'a gönder //
için (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10.000.000

#Dahil etmek

void main ()

{

imzasız i

işaretsiz karakter j, b

süre (1)

{

P0 = 0x01

b = P0

için (j-0j<3000j++)

için (j = 0j<8j++)

{

b = b<<1

P0 = b

için (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#Dahil etmek

void main ()

{

imzasız i

süre (1)

{

P0 = 0x0F

için (j-0j<3000j++)

P0 = 0xF0

için (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#Dahil etmek

void main ()

{

imzasız i

işaretsiz karakter j, b

süre (1)

{

P0 = 0x01

b = P0

için (j-0j<3000j++)

için (j = 0j<8j++)

0x01

P0 = b

için (j-0j<3000j++)

}

}

8051 Mikrodenetleyiciyi Kullanarak 7 Segmentli Ekranda Numaraları Görüntüleme

7 segmentli görüntüler birçok sistemde sayısal bilgileri görüntülemek için kullanılan temel elektronik ekranlardır. Uygun LED kombinasyonları açıldığında, 0'dan 9'a kadar rakamları gösterecek şekilde sırayla bağlanan sekiz LED'den oluşur. Bir seferde yalnızca bir rakam görüntüleyebilirler.

8051 Mikrodenetleyiciyi Kullanarak 7 Segmentli Ekranda Numaraları Görüntüleme

8051 Mikrodenetleyiciyi Kullanarak 7 Segmentli Ekranda Numaraları Görüntüleme

1. Dört 7 segmentli ekranda '0 - F' arasındaki sayıları görüntülemek için WAP?

#Dahil etmek
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
seni imzalamadım, j
a = b = c = d = 1
süre (1)
{
için (i = 0i<10i++)
{
P2 = n [i]
için (j = 0j<60000j++)
}
}
}

2. 7 segmentli ekranlarda ’00 ile 10 ’arasındaki sayıları görüntülemek için WAP?

#Dahil etmek
sbit a = P3 ^ 0
sbit b = P3 ^ 1
geçersiz ekran1 ()
geçersiz display2 ()
geçersiz gecikme ()
void main ()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
seni imzalamadım, j
ds1 = ds2 = 0
süre (1)
{
için (i = 0, i<20i++)
ekran1 ()
ekran2 ()
}
}
geçersiz ekran1 ()
{
a = 1
b = 0
P2 = s [ds1]
gecikme ()
a = 1
b = 0
P2 = s [ds1]
gecikme ()
}
geçersiz display2 ()
{
ds1 ++
eğer (ds1> = 10)
{
ds1 = 0
ds2 ++
eğer (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
geçersiz gecikme ()
{
unsignedint k
(k = 0k için<30000k++)
}

8051 Mikrodenetleyici kullanarak Zamanlayıcı / Sayaç Hesaplamaları ve Programı

Gecikme, uygulama yazılımı geliştirmede önemli faktörlerden biridir. Bununla birlikte, normal gecikme, zamanlayıcı gecikmesini uygulamak için bu sorunun üstesinden gelmek için değerli bir sonuç vermeyecektir. zamanlayıcılar ve sayaçlar Sayım darbeleri ile değerli zaman gecikmesini sağlamak için birçok uygulamada kullanılan mikrodenetleyicinin donanım bileşenleridir. Her iki görev de yazılım tekniği ile gerçekleştirilir.

Zamanlayıcı Gecikmesi

T1M2 (timer1 ve mode2) kullanarak 500us zaman gecikmesi oluşturmak için WAP?

#Dahil etmek

void main ()
{
imzasız karakter i
TMOD = 0x20 // zamanlayıcı modunu ayarla //
için (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // zaman gecikmesini ayarlayın //
TH1 = 0x00
TR1 = 1 // zamanlayıcı oN //
(TF1 == 0) // iken bayrak bitini kontrol edin //
TF1 = 0
}
TR1 = 0 // zamanlayıcı kapalı //
}

Normal Döngü Gecikmesi

geçersiz gecikme ()

{
unsignedint k
(k = 0k için<30000k++)
}

8051 Mikrodenetleyici kullanarak Seri Haberleşme Hesaplamaları ve Programı

Sinyalin iletilmesi ve alınması için genellikle seri iletişim kullanılır. 8051 mikro denetleyici, UART seri iletişim Rx ve Tx pinleri tarafından iletilen ve alınan sinyaller. UART, veri baytlarını alır ve ayrı bitleri sıralı bir şekilde gönderir. Kayıtlar, hafızadaki verileri toplamanın ve saklamanın bir yoludur. UART, yarı çift yönlü bir protokoldür. Yarı çift yönlü, verilerin aynı anda değil, aktarılması ve alınması anlamına gelir.

8051 Mikrodenetleyici kullanarak Seri Haberleşme Hesaplamaları ve Programı

8051 Mikrodenetleyici kullanarak Seri Haberleşme Hesaplamaları ve Programı

1. Seri pencereye 'S' karakterini iletmek için WAP baud hızı olarak 9600 kullanıyor mu?

28800, 8051 mikro denetleyicinin maksimum baud hızıdır

28800/9600 = 3

Baud hızı '3', zamanlayıcılarda saklanır

#Dahil etmek

void main ()

{
SCON = 0x50 // seri iletişimi başlat //
TNOD = 0x20 // zamanlayıcı modunu seçti //
TH1 = 3 // baud hızını yükle //
TR1 = 1 // Zamanlayıcı AÇIK //
SBUF = ’S’ // karakteri kayıt defterine kaydedin //
while (TI == 0) // kesme kaydını kontrol et //
TI = 0
TR1 = 0 // zamanlayıcıyı kapat //
while (1) // sürekli döngü //
}

2. Hiper terminalden veri almak ve bu verileri Mikroişlemcinin PORT 0'a 9600 baud kullanarak göndermek için WAP?

28800, 8051 mikro denetleyicinin maksimum baud hızıdır

28800/9600 = 3

Baud hızı '3', zamanlayıcılarda saklanır

#Dahil etmek

void main ()
{
SCON = 0x50 // seri iletişimi başlat //
TMOD = 0x20 // zamanlayıcı modunu seçti //
TH1 = 3 // baud hızını yükle //
TR1 = 1 // Zamanlayıcı AÇIK //
PORT0 = SBUF // veriyi SBUF'tan port0'a gönder //
while (RI == 0) // kesinti kaydını kontrol et //
RI = 0
TR1 = 0 // zamanlayıcıyı kapat //
while (1) // karakter alındığında programı durdur //
}

8051 Mikrodenetleyiciyi Kullanarak Programları Kes

Kesinti, mevcut programı durdurmaya ve diğer programı hemen yürütmeye zorlayan bir sinyaldir. 8051 mikro denetleyici, dahili ve harici olmak üzere 6 kesinti sağlar. kaynakları kesmek . Kesinti oluştuğunda, mikro denetleyici mevcut görevi duraklatır ve ISR'yi çalıştırarak kesmeye katılır, ardından mikro denetleyici son göreve geri döner.

Zamanlayıcı 0 kesildiğinde sola kaydırma işlemini gerçekleştirmek için WAP, ardından ana işlevde P0 için kesme işlemi gerçekleştirilsin mi?

#Dahil etmek

işaretsiz karakter b

void timer0 () interrupt 2 // seçilen zamanlayıcı0 interrupt //
{
b = 0x10
P1 = b<<2
}
void main ()
{
işaretsiz karakter a, i
IE = 0x82 // zamanlayıcı 0 kesintisini etkinleştir //
TMOD = 0x01
TLo = 0xFC // kesinti zamanlayıcısı //
TH1 = 0xFB
TR0 = 1
a = 0x00
süre (1)
{
için (i = 0i<255i++)
{
a ++
Po = a
}
}
}

8051 Mikrodenetleyici kullanarak Tuş Takımı Programlama

Matris tuş takımı, kullanıcının gerekli görevleri gerçekleştirmesine izin vermek için birçok yerleşik uygulamada kullanılan analog bir anahtarlama cihazıdır. Bir matris tuş takımı satırlar ve sütunlar halinde matris biçiminde anahtarların bir düzenlemesinden oluşur. Sıralar ve sütunlar, mikro denetleyiciye, anahtar sırası bir pime bağlanacak ve her sütundaki anahtarlar başka bir pime bağlanacak şekilde bağlanır, ardından işlemleri gerçekleştirir.

8051 Mikrodenetleyici kullanarak Tuş Takımı Programlama

8051 Mikrodenetleyici kullanarak Tuş Takımı Programlama

1. WAP, düğmeye basarak LED'i değiştirmek için

#Dahil etmek
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
geçersiz gecikme ()
void main ()
{
süre (1)
{
a = 0
b = 1
c = 1
d = 1
gecikme ()
a = 1
b = 0
c = 1
d = 1
geçersiz gecikme ()
{
imzasız karakter i
TMOD = 0x20 // zamanlayıcı modunu ayarla //
için (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // zaman gecikmesini ayarlayın //
TH1 = 0x00
TR1 = 1 // zamanlayıcı oN //
(TF1 == 0) // iken bayrak bitini kontrol edin //
TF1 = 0
}
TR1 = 0 // zamanlayıcı kapalı //
}

2. Tuş takımındaki '1' tuşuna basarak LED'i AÇMAK için WAP?

#Dahil etmek

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit LED = P0 ^ 1

void main ()
{

r1 = 0
eğer (c1 == 0)
{

LED = 0xff
}
}

3. Tuş takımındaki ilgili tuşa basarak yedi segmentteki 0,1,2,3,4,5 sayısını görüntülemek için WAP?

#Dahil etmek

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

void main ()

{

r1 = 0 a = 1

eğer (c1 == 0)

{

a = 0xFC

}

Eğer (c2 == 0)

{

a = 0x60

}

eğer (c3 == 0)

{

a = 0xDA

}

Eğer (c4 == 0)

{

a = 0xF2

}

}

8051 Mikrodenetleyici ile LCD Programlama

LCD ekran Bilgiyi bir metin veya resim formatında görüntülemek için birçok uygulamada sıklıkla kullanılan elektronik bir cihazdır. LCD, ekranda karakterleri kolayca gösterebilen bir ekrandır. LCD ekran, mikro denetleyiciye arayüz oluşturmak için kullanılan 8 veri hattı ve 3 kontrol hattından oluşur.

8051 Mikrodenetleyici ile LCD Programlama

8051 Mikrodenetleyici ile LCD Programlama

LED ekranda “EDGEFX KITS” görüntülemek için WAP?

#Dahil etmek
#define kam P0

voidlcd_initi ()
voidlcd_dat (işaretsiz karakter)
voidlcd_cmd (işaretsiz karakter)
geçersiz gecikme ()
geçersiz görüntüleme (işaretsiz karakter * s, işaretsiz karakter r)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit at = P2 ^ 2
void main ()
{

lcd_initi ()
lcd_cmd (0x80)
gecikme (100)
lcd_cmd (0xc0)
ekran ('edgefx kitleri', 11)
süre (1)
}

geçersiz görüntüleme (işaretsiz karakter * s, işaretsiz karakter r)
{
imzasız w
için (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
gecikme (100)
lcd_cmd (0 × 38)
gecikme (100)
lcd_cmd (0 × 06)
gecikme (100)
lcd_cmd (0x0c)
gecikme (100)
}
voidlcd_dat (işaretsiz karakter verisi)
{
tarak = o
rs = 1
rw = 0
in = 1
gecikme (100)
in = 0
}
}
voidlcd_cmd (işaretsiz karakter cmd)
{
geldi = cmd
rs = 0
rw = 0

in = 1
gecikme (100)
in = 0
}
void delay (unsigned int n)
{

unsignedint a
için (a = 0a}

Umarım bu makale, birkaç örnek programla 8051 mikrodenetleyiciyi kullanan gömülü sistem programlama hakkında temel bilgiler verir. Ayrıntılı gömülü C programlama öğreticisi için lütfen yorumlarınızı ve sorularınızı aşağıdaki yorum bölümüne gönderin.