天天看點

單片機實驗----LED燈閃爍(彙編)

單片機實驗----LED燈閃爍(彙編)

代碼如下:

ORG 0000H
	MAIN: CLR P1.0  		;點亮LED
		  MOV R1,#200		;LED電亮後延時一段時間
	D1:  MOV R2,#150
	D2:	  DJNZ R2,D2
		  DJNZ R1,D1
		  SETB P1.0			;熄滅LED燈
		  MOV R1,#200		;LED電熄滅後延時一段時間
	D1_1: MOV R2,#150
	D2_2: DJNZ R2,D2_2
		  DJNZ R1,D1_1
		  LJMP MAIN			;跳回到MAIN
	END
           

本程式需要的三個指令:

  1. MOV :

    MOV指令是資料傳送指令,也是最基本的程式設計指令,用于将一個資料從源位址傳送到目标位址(寄存器間的資料傳送本質上也是一樣的)。其特點是不破壞源位址單元的内容。

    例如:

  • MOV AX,2000H ;将16位資料2000H傳送到AX寄存器
  • MOV AL,20H ; 将8位資料20H傳送到AL寄存器
  • MOV AX,BX ; 将BX寄存器的16位資料傳送到AX寄存器
  • MOV AL,[2000H] ;将2000H單元的内容傳送到AL寄存器
  1. DJNZ
  2. LJMP

本程式分四塊内容:

  1. 點亮LED:
CLR P1.0  		;點亮LED
           
  1. 熄滅LED:
SETB P1.0			;熄滅LED燈
           
  1. 延時:

    在本例中通過減1條件轉移指令DJNZ

    格式:DJNZ 操作數,标号

    功能:使得操作數-1,并判斷操作數是否等于0,如果不等于0,則跳轉到标号處;如果登入0,則順序執行。

MOV   R1,#200		;LED電亮後延時一段時間
	D1:  MOV R2,#150
	D2:	  DJNZ R2,D2
		  DJNZ R1,D1
           
  1. 循環:

    循環用到的是無條件轉移指令LJMP

    格式:LJMP 标号

    注意:這裡的無條件是指不規定條件

LJMP MAIN			;跳回到MAIN
           

時間:2018年9月26日15:54:01

這裡再補充點内容:怎麼做到延時時間的精準計算呢?

要精确計算時間,首先需要了解下面幾個概念:

時鐘周期(震蕩周期):就是晶體振蕩器CY的時鐘周期。對于單片機來說,標明了晶體振蕩器,時鐘周期也就确定了。

例如:12MHz的晶體振蕩器的時鐘周期為(1/12)us,對應的機器周期就是12X(1/12)us=1us。

機器周期:單片機在執行一條指令時,會将執行過程劃分為若幹個階段,每個階段完成一個基本操作,如取指令、都存儲器、寫存儲器等,完成一個基本操作的時間就是機器周期。

指令周期:從字面上就很好了解,指的是完成一條指令的時間,每條指令執行的時間是固定的,不同指令執行的時間可能不同。單片機有但機器周期指令、雙機器周期指令和四機器周期指令。

是以說要精确精算延時時間,你需要知道晶體振蕩器的頻率和指令周期。

時間:2018年9月27日13:15:57

-END-