Keil言語を使用した組み込みCプログラミングチュートリアル

問題を排除するために楽器を試してください





Embedded Cは、電子ガジェットを開発するためのソフトウェア分野で最も人気のあるプログラミング言語です。各プロセッサは、組み込みソフトウェアに関連付けられています。 組み込みCプログラミング プロセッサによる特定の機能の実行において主要な役割を果たします。私たちの日常生活では、洗濯機、携帯電話、デジタルカメラなどの多くの電子機器を頻繁に使用しており、組み込みCによってプログラムされたマイクロコントローラーに基づいて動作します。

組み込みシステムプログラミング

組み込みシステムプログラミング



記述されたCコードは、より信頼性が高く、移植性があり、スケーラブルであり、実際、はるかに理解しやすいものです。何よりも重要なツールは、組み込みシステムの動作を決定する組み込みソフトウェアです。組み込みCプログラミング言語は、マイクロコントローラーのプログラミングに最も頻繁に使用されます。


組み込みCプログラミングチュートリアル(8051)

組み込みCプログラミングは完全なハードウェア関連のプログラミング手法であるため、プログラムを作成するには、組み込み設計者は特定のプロセッサまたはコントローラのハードウェアに関する十分な知識を持っている必要があります。



プログラミングチュートリアル

プログラミングチュートリアル

以前は、多くの組み込みアプリケーションがアセンブリレベルのプログラミングを使用して開発されていました。ただし、C、COBOL、Pascalなどのさまざまな高級言語の出現により、この問題を克服するための移植性は提供されませんでした。しかし、広く受け入れられたのはC言語でした 組み込みシステムアプリケーション開発 、そしてそれはそうし続けます。

組み込みシステム

組み込みシステムは、組み込みCプログラミングソフトウェアとハ​​ードウェア部分の組み合わせとして定義され、主にマイクロコントローラーで構成され、特定のタスクを実行することを目的としています。これらの組み込みシステムは、洗濯機やビデオレコーダー、冷蔵庫など、私たちの日常生活で使用されています。組み込みシステムは、8051マイクロコントローラによって最初に導入されました。

組み込みシステム

組み込みシステム

8051マイクロコントローラーの紹介

8051マイクロコントローラは基本的なマイクロコントローラであり、1970年以来「IntelCorporation」によって最初に導入されました。8086プロセッサアーキテクチャによって開発されました。 8051は、Philips、Atmel、dallsなどのさまざまなメーカーによって開発されたマイクロコントローラのファミリです。 8051マイクロコントローラー 小さな子供のおもちゃから大型の自動車システムまで、多くの組み込み製品に使用されています。


8051マイクロコントローラー

8051マイクロコントローラー

8051マイクロコントローラーは8ビットです 「CISC」アーキテクチャ 。これは、メモリ、シリアル通信、割り込み、入力/出力ポート、およびタイマー/カウンターで構成され、単一の統合チップに組み込まれており、インターフェースされる周辺機器を制御するようにプログラムされています。プログラムはマイクロコントローラのRAMに保存されますが、プログラムを作成する前に、RAMを認識しておく必要があります。 組織 マイクロコントローラの。

組み込みシステムプログラミング:基本宣言

すべての関数は特定のタスクを実行するステートメントのコレクションであり、1つ以上の関数のコレクションはプログラミング言語と呼ばれます。すべての言語は、いくつかの基本的な要素と文法規則で構成されています。 C言語プログラミングは、文字セット、変数、データ型、定数、キーワード、式などで機能するように設計されており、Cプログラムの作成に使用されます。これらはすべてヘッダーファイルまたはライブラリファイルの下で考慮され、次のように表されます。

#include

組み込みCプログラミング開発

組み込みCプログラミング開発

C言語の拡張は、組み込みCプログラミング言語と呼ばれます。上記と比較して、C言語の組み込みプログラミングには、データ型やキーワードなどの追加機能がいくつかあり、ヘッダーファイルまたはライブラリファイルは次のように表されます。

#include

埋め込まれたC追加キーワード

  • sbit
  • ビット
  • SFR
  • 揮発性
  • マクロは定義します

「sbit」は、マイクロコントローラの単一のPINを宣言するために使用されます。たとえば、LEDはP0.1ピンに接続されているため、値をポートピンに直接送信することはお勧めしません。最初に別の変数でピンを宣言してから、プログラムの任意の場所で使用できるようにします。

構文:sbit a = P0 ^ 1 //変数を使用してそれぞれのピンを宣言します//
a = 0x01 //値をポートピンに送信//

「ビット」は、変数のステータスをチェックするために使用されます。

構文:bit c //ビット変数を宣言します//
c = a //値はc変数に割り当てられます//
if(c == 1)//条件を真または偽にチェック//

{{
…..
……
}

「SFR」キーワードは、別の名前でSFRレジスタにアクセスするために使用されます。として定義されたSFRレジスタ 特殊機能レジスタ 、アドレスを示すことにより、周辺に関連するすべてのレジスタが含まれます。 SFRレジスタは、SFRキーワードによって宣言されます。 SFRキーワードは大文字でなければなりません。

構文:SFR port = 0x00 // 0x00は、ポート変数によって宣言されたport0アドレスです//
Port = 0x01 //次に値をport0 //に送信します
ディレイ()
ポート= 0x00
ディレイ()

「volatile」キーワードは、組み込みシステム開発において最も重要です。 volatileキーワード値で宣言する変数は、予期せず変更できませんでした。これは、メモリマップドペリフェラルレジスタ、ISRによって変更されたグローバル変数で使用できます。データの送受信にvolatileキーワードを使用しないと、コードエラーまたは最適化エラーが発生します。

構文:volatile int k

マクロは、ステートメントのブロックをプリプロセッサディレクティブとして宣言するために使用される名前です。名前が使用されるたびに、マクロの内容に置き換えられます。マクロは#defineを表します。ポートピン全体はマクロによって定義されます。

構文:#define dat Po //ポート全体が変数によって宣言されます//
dat = 0x01 //ポートに送信されるデータ0 //

基本的な組み込みCプログラム

マイクロコントローラのプログラミングはそれぞれ異なります オペレーティングシステムの種類 。 Linux、Windows、RTOSなど、多くのオペレーティングシステムが存在しますが。ただし、RTOSには組み込みシステムの開発にいくつかの利点があります。この記事では、8051マイクロコントローラを使用して組み込みCプログラミングを開発するための基本的な組み込みCプログラミングについて説明します。

組み込みCプログラミングステップ

組み込みCプログラミングステップ

  • 8051マイクロコントローラーで使用するLEDの点滅
  • 8051マイクロコントローラを使用した7セグメントディスプレイでの数値表示
  • 8051マイクロコントローラーを使用したタイマー/カウンターの計算とプログラム
  • 8051マイクロコントローラを使用したシリアル通信の計算とプログラム
  • 8051マイクロコントローラを使用した割り込みプログラム
  • 8051マイクロコントローラーを使用したキーパッドプログラミング
  • 8051マイクロコントローラーを使用したLCDプログラミング

8051マイクロコントローラーを使用したLEDの点滅

LEDは、主に表示目的で多くのアプリケーションで使用される半導体デバイスです。さまざまな段階で結果の妥当性をチェックするためのテスト中の指標として、膨大な範囲のアプリケーションを見つけています。それらは非常に安価で、さまざまな形、色、サイズで簡単に入手できます。 LEDは設計に使用されます メッセージ表示板 ここでは、LEDは8051マイクロコントローラーのPORT0と接続されています。

8051マイクロコントローラーを使用したLEDの点滅

8051マイクロコントローラーを使用したLEDの点滅

1. 01010101
10101010

#include //ヘッダーファイル//
void main()//プログラム実行統計ポイント//
{{
unsigned int i //データ型//
while(1)//連続ループの場合//
{{
P0 = 0x55 // 16進値をport0 //に送信します
for(i = 0i<30000i++) //normal delay//
P0 = 0x3AA // 16進値をport0 //に送信します
for(i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

10,000,000

#include

void main()

{{

unsignedint i

unsigned char j、b

while(1)

{{

P0 = 0x01

b = P0

for(j-0j<3000j++)

for(j = 0j<8j++)

{{

b = b<<1

P0 = b

for(j-0j<3000j++)

}

}

}

3. 00001111

11110000

#include

void main()

{{

unsignedint i

while(1)

{{

P0 = 0x0F

for(j-0j<3000j++)

P0 = 0xF0

for(j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

11111111

#include

void main()

{{

unsignedint i

unsigned char j、b

while(1)

{{

P0 = 0x01

b = P0

for(j-0j<3000j++)

for(j = 0j<8j++)

0x01

P0 = b

for(j-0j<3000j++)

}

}

8051マイクロコントローラーを使用した7セグメントディスプレイでの数値の表示

ザ・ 7セグメントディスプレイ は基本的な電子ディスプレイであり、数値情報を表示するために多くのシステムで使用されています。これは、LEDの適切な組み合わせがオンになっている場合に、0から9までの数字を表示するように順番に接続された8つのLEDで構成されています。一度に表示できるのは1桁のみです。

8051マイクロコントローラーを使用した7セグメントディスプレイでの数値の表示

8051マイクロコントローラーを使用した7セグメントディスプレイでの数値の表示

1. 4つの7セグメントディスプレイに「0からF」までの数字を表示するWAP?

#include
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}
署名されていないあなた、j
a = b = c = d = 1
while(1)
{{
for(i = 0i<10i++)
{{
P2 = n [i]
for(j = 0j<60000j++)
}
}
}

2. 7セグメントディスプレイに「00から10」までの数字を表示するWAP?

#include
sbit a = P3 ^ 0
sbit b = P3 ^ 1
void display1()
void display2()
void delay()
void main()
{{
unsignedchar n [10] = {0×40,0xF9,0×24,0×30,0×19,0×12,0×02,0xF8,0xE00,0×10}
署名されていないあなた、j
ds1 = ds2 = 0
while(1)
{{
for(i = 0、i<20i++)
display1()
display2()
}
}
void display1()
{{
a = 1
b = 0
P2 = s [ds1]
ディレイ()
a = 1
b = 0
P2 = s [ds1]
ディレイ()
}
void display2()
{{
ds1 ++
if(ds1> = 10)
{{
ds1 = 0
ds2 ++
if(ds2> = 10)
{{
ds1 = ds2 = 0
}
}
}
void delay()
{{
unsignedint k
for(k = 0k<30000k++)
}

8051マイクロコントローラーを使用したタイマー/カウンターの計算とプログラム

遅延は、アプリケーションソフトウェア開発における重要な要素の1つです。ただし、通常の遅延では、タイマー遅延を実装するためのこの問題を克服するための貴重な結果は得られません。ザ・ タイマーとカウンター はマイクロコントローラのハードウェアコンポーネントであり、カウントパルスで貴重な時間遅延を提供するために多くのアプリケーションで使用されています。両方のタスクはソフトウェア技術によって実装されます。

タイマー遅延

T1M2(timer1およびmode2)を使用して500usの時間遅延を生成するWAP?

#include

void main()
{{
unsigned char i
TMOD = 0x20 //タイマーモードを設定します//
for(i = 0i<2i++) //double the time daly//
{{
TL1 = 0x19 //時間遅延を設定します//
TH1 = 0x00
TR1 = 1 //タイマーoN //
While(TF1 == 0)//フラグビットをチェックします//
TF1 = 0
}
TR1 = 0 //タイマーオフ//
}

通常のループ遅延

void delay()

{{
unsignedint k
for(k = 0k<30000k++)
}

8051マイクロコントローラーを使用したシリアル通信の計算とプログラム

シリアル通信は、信号の送受信に一般的に使用されます。 8051マイクロコントローラは UARTシリアル通信 RxピンとTxピンで送受信される信号。 UARTはデータのバイトを受け取り、個々のビットを順番に送信します。レジスタは、データを収集してメモリに格納する方法です。 UARTは半二重プロトコルです。半二重とは、データの転送と受信を意味しますが、同時には行いません。

8051マイクロコントローラーを使用したシリアル通信の計算とプログラム

8051マイクロコントローラーを使用したシリアル通信の計算とプログラム

1.文字「S」をシリアルウィンドウに送信するWAPは、ボーレートとして9600を使用しますか?

28800は、8051マイクロコントローラの最大ボーレートです。

28800/9600 = 3

そのボーレート「3」はタイマーに保存されます

#include

void main()

{{
SCON = 0x50 //シリアル通信を開始します//
TNOD = 0x20 //タイマーモードを選択しました//
TH1 = 3 //ボーレートをロード//
TR1 = 1 //タイマーON //
SBUF = ’S’ //文字をレジスタに格納します//
while(TI == 0)//割り込みレジスタをチェック//
TI = 0
TR1 = 0 //タイマーをオフ//
while(1)//連続ループ//
}

2.ハイパーターミナルからデータを受信し、そのデータを9600ボーを使用してマイクロコントローラーのポート0に送信するWAP?

28800は、8051マイクロコントローラの最大ボーレートです。

28800/9600 = 3

そのボーレート「3」はタイマーに保存されます

#include

void main()
{{
SCON = 0x50 //シリアル通信を開始します//
TMOD = 0x20 //タイマーモードを選択しました//
TH1 = 3 //ボーレートをロード//
TR1 = 1 //タイマーON //
PORT0 = SBUF // SBUFからport0 //にデータを送信します
while(RI == 0)//割り込みレジスタをチェック//
RI = 0
TR1 = 0 //タイマーをオフ//
while(1)//文字を受信したらプログラムを停止します//
}

8051マイクロコントローラーを使用した割り込みプログラム

割り込みは、現在のプログラムを停止し、他のプログラムをすぐに実行するように強制する信号です。 8051マイクロコントローラは、内部および外部の6つの割り込みを提供します 割り込みソース 。割り込みが発生すると、マイクロコントローラは現在のタスクを一時停止し、ISRを実行して割り込みに対応します。その後、マイクロコントローラは最近のタスクに戻ります。

タイマー0の割り込みが発生したときに左シフト動作を実行するWAPは、メイン機能でP0の割り込み動作を実行しますか?

#include

unsigned char b

void timer0()割り込み2 //選択されたtimer0割り込み//
{{
b = 0x10
P1 = b<<2
}
void main()
{{
unsigned char a、i
IE = 0x82 // timer0割り込みを有効にする//
TMOD = 0x01
TLo = 0xFC //割り込みタイマー//
TH1 = 0xFB
TR0 = 1
a = 0x00
while(1)
{{
for(i = 0i<255i++)
{{
++
Po = a
}
}
}

8051マイクロコントローラーを使用したキーパッドプログラミング

マトリックスキーパッドはアナログスイッチングデバイスであり、ユーザーが必要なタスクを実行できるようにするために多くの組み込みアプリケーションで使用されています。 A マトリックスキーパッド 行と列のマトリックス形式のスイッチの配置で構成されます。行と列は、スイッチの行が1つのピンに接続され、各列のスイッチが別のピンに接続されるようにマイクロコントローラーに接続されてから、操作を実行します。

8051マイクロコントローラーを使用したキーパッドプログラミング

8051マイクロコントローラーを使用したキーパッドプログラミング

1.スイッチを押してLEDを切り替えるWAP

#include
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
void delay()
void main()
{{
while(1)
{{
a = 0
b = 1
c = 1
d = 1
ディレイ()
a = 1
b = 0
c = 1
d = 1
void delay()
{{
unsigned char i
TMOD = 0x20 //タイマーモードを設定します//
for(i = 0i<2i++) //double the time daly//
{{
TL1 = 0x19 //時間遅延を設定します//
TH1 = 0x00
TR1 = 1 //タイマーoN //
While(TF1 == 0)//フラグビットをチェックします//
TF1 = 0
}
TR1 = 0 //タイマーオフ//
}

2.キーパッドのキー「1」を押してLEDをオンにするWAP?

#include

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

void main()
{{

r1 = 0
if(c1 == 0)
{{

LED = 0xff
}
}

3.キーパッドのそれぞれのキーを押して7セグメントに0、1、2、3、4、5の数字を表示するWAP?

#include

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

if(c1 == 0)

{{

a = 0xFC

}

If(c2 == 0)

{{

a = 0x60

}

if(c3 == 0)

{{

a = 0xDA

}

If(c4 == 0)

{{

a = 0xF2

}

}

8051マイクロコントローラーを使用したLCDプログラミング

ザ・ LCDディスプレイ は電子デバイスであり、テキストまたは画像形式で情報を表示するために多くのアプリケーションで頻繁に使用されます。 LCDは、画面に文字を簡単に表示できるディスプレイです。 LCDディスプレイには、マイクロコントローラーとのインターフェースに使用される8本のデータラインと3本の制御ラインがあります。

8051マイクロコントローラーを使用したLCDプログラミング

8051マイクロコントローラーを使用したLCDプログラミング

LEDディスプレイに「EDGEFXKITS」を表示するWAP?

#include
#define kam P0

voidlcd_initi()
voidlcd_dat(unsigned char)
voidlcd_cmd(unsigned char)
void delay()
void display(unsigned char * s、unsigned char r)

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

lcd_initi()
lcd_cmd(0x80)
delay(100)
lcd_cmd(0xc0)
display(“ edgefx kits”、11)
while(1)
}

void display(unsigned char * s、unsigned char r)
{{
unsignedint w
for(w = 0w{{
lcd_data(s [w])
}
}
voidlcd_initi()
{{
lcd_cmd(0×01)
delay(100)
lcd_cmd(0×38)
delay(100)
lcd_cmd(0×06)
delay(100)
lcd_cmd(0x0c)
delay(100)
}
voidlcd_dat(unsigned char dat)
{{
くし=それ
rs = 1
rw = 0
in = 1
delay(100)
in = 0
}
}
voidlcd_cmd(unsigned char cmd)
{{
来た= cmd
rs = 0
rw = 0

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

unsignedint a
for(a = 0a}

この記事が、8051マイクロコントローラを使用した組み込みシステムプログラミングに関する基本的な情報といくつかのサンプルプログラムを提供することを願っています。詳細な組み込みCプログラミングチュートリアルについては、以下のコメントセクションにコメントとクエリを投稿してください。