ゼロ基礎学習単片機(一)--LED


最近、会社はスマートカーの改装をします.私はとても耻ずかしくて、ぼんやりと大学で4年の电子の専门を読んで、结局単片机はすべて2回游んだことがありません.
一眼レフをプレイして、一番簡単なLEDから始める予定です.
このシリーズの学習ノート開発環境は次のとおりです.
开発板:HC 800 EM 3はとても良い开発板だと感じて、提供する外部のインターフェースは少なくなくて、板はまた単片机とARMの“交换のインターフェース”を提供しました.
シングルチップマシン型番:STC 90 C 516 RD+
ARM:STM32
開発ツール:keil 3(モノリシック版)
一、原理図
ネット上のチュートリアルが多いため、keilの使用やボードの回路分析については具体的に紹介しません.△ありがたいことに、板の原理図が多少読めるようになった.
分かりやすく、1ピンを0にすると、このランプD 8が点灯します.
二、単片機遅延プログラムの粗浅分析
LEDランプに多様な効果(例えば点滅)をもたらすためには、必ず遅延プログラムが用いられる.一部のネットユーザーによると、単片機の遅延プログラムの精度は高くなく、タイマーを使うことを提案している.でもさすがに入門ですから、あとでタイマーを検討しましょう.
次の手順は12 MHZ結晶振動源で1 ms遅延するc手順である.
void delay_ms(void) 
{
    unsigned char a,b,c;

    for(c = 1;c > 0; c--)
        for(b = 142; b > 0; b--)
            for(a = 2; a>0; a--);
}
1、機械周期
1つのマシンサイクルは12クロックサイクルを含む.クロック周期の計算式=(1/結晶振動数)秒.
例えば、結晶振動12 MHZ
このモノリシックマシンのクロック周期=(1/12)マイクロ秒であることから、マシン周期が1 usであることが得られる.
ここで機械周期は命令周期と理解でき,単片機が1つの命令を実行するのにかかる時間である.注意:ここの命令はC言語の命令ではありません.そして、機械の命令は、逆アセンブリで見ることができます.
2、逆アセンブリ
対応する逆アセンブリコードを表示するために、プログラムが実行される時間を計算します.ここに上記のプログラムの逆アセンブリコードを添付し、keilは逆アセンブリコードを呼び出してウィンドウを表示することができます.
    54: void delay(void)    
    55: { 
    56:     unsigned char a,b,c; 
    57:     for(c=1;c>0;c--) 
C:0x0045    7F01     MOV      R7,#0x01
    58:         for(b=142;b>0;b--) 
C:0x0047    7E8E     MOV      R6,#0x8E
    59:             for(a=2;a>0;a--); 
C:0x0049    7D02     MOV      R5,#0x02
C:0x004B    DDFE     DJNZ     R5,C:004B
C:0x004D    DEFA     DJNZ     R6,C:0049
C:0x004F    DFF6     DJNZ     R7,C:0047
    60: } 
C:0x0051    22       RET   
3、逆アセンブリ分析
以下にdelay_を示します.ms()各命令に対応するマシンサイクル.
ここに8051の命令周期表ダウンロードアドレスを添付します.
				  		    
C:0x0045    7F01     MOV      R7,#0x01		1

C:0x0047    7E8E     MOV      R6,#0x8E		1

C:0x0049    7D02     MOV      R5,#0x02		1
C:0x004B    DDFE     DJNZ     R5,C:004B		2
C:0x004D    DEFA     DJNZ     R6,C:0049		2
C:0x004F    DFF6     DJNZ     R7,C:0047		2

C:0x0051    22       RET      			2
では、プログラムにどれだけの時間がかかるかを計算します.(アセンブル命令を理解していなければ8051命令周期表を見ることができます)
DJNZ R 5,C:004 B,このサイクルを実行するためのマシンサイクル数は2*2=4である.
第3条指令から第5条指令までのサイクルは、そのサイクルを実行するためのマシンサイクル数が(1+2*2+2)*142
2番目の命令から6番目の命令までのサイクルは、そのサイクルを実行するためのマシンサイクル数が(1+(1+2*2+2)*142+2)*1
delay_time = 1+(1+(1+2*2+2)*142+2)*1+2  
ネット上では、優れた遅延プログラム計算ソフトウェアが提供されています.モノリシックポケモンソフト
三、メインプログラム
int main(void)
{
	P2 = 0xFE;

	while(1)
	{
		delay_ms(100);		//  100ms
		P2 ^= (1 << 0);		//  
	}

	return 0;
}
         D1  100ms     



, , LED 。 ~~ 。

, , 。 , 。 :[email protected]