1.ORG,在匯編語言中也是一條指令,其作用是告訴匯編程序,在開始執行的時候,將某段機器語言裝載到內存中的哪個地址。
2.長轉移指令的功能是:把指令碼中的目標地址addr16裝入程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序,不影響任何標志。
3.LCALL是調用子程序,當子程序執行完后就返回到LCALL指令下一條指令繼續執行程序,而子程序是可以多次調用,也可以在任何位置調用。這是從哪里走的,還要返回哪里的。
而JMP是無條件轉移指令,轉移到某執行程序后就不再返到回原處,是一去不回返的。
4.CPL是取反指令,也稱邏輯非指令。可以取反P1.0
5.AT89C51簡介(晶振為11.0592M 和12M)
6.clr p1.5。p1.5清零 等價於 p1.5=0。
7.好像是單片機上的。
DJNZ是用來控制循環次數的,比如:DJNZ 10H,del
意思就是執行這一句,后面的那個十六進制數10H自動減一,看是不是0,不是0就跳到del的標識符語句后,是0就順序執行。
8.sjmp $ 是原地跳轉的指令。 作用:1,可以防止程序亂跳。 2,等待中斷發生。 51單片機指令。(注意!是原地跳轉,並不是所在程序段跳轉)
9.即使不設置循環,在ISIS里面程序還是循環執行的。
10.復位是必須的。
MOV A,#0FEH ;ACC中先裝入LED1亮的數據
MOV P1,A ;將ACC的數據送P1口
匯編代碼如下:
;本代碼設計分成3個模塊:①開關跳轉循環(使用JB進行跳轉);②MAIN正向閃爍模塊、LOOPR反向閃爍模塊;③延時模塊(DELAY)。
ORG 0000H ;單片機上電后從0000H地址執行
AJMP MAIN ;跳轉到主程序存放地址處
ORG 0030H ;設置主程序開始地址
MAIN:
MOV A,#0FEH ;ACC中先裝入LED1亮的數據,默認是#0FFH,這里少一個用來裝燈亮。FE(十六進制) = 11111110(二進制)
MOV P1,A ;將ACC的數據送P1口,P1有8個口,A有8位,一個一個給。
JB P0.0,LOOPL ;若為1就跳轉到L
LOOPL:
RL A ;將ACC中的數據左移一位
MOV P1,A ;把ACC移動過的數據送p1口顯示
ACALL DELAY ;調用延時子程序
JNB P0.0,LOOPR ;若不為1就跳轉到LOOPR,這樣寫可以隨時保證跳轉,即使在運行中也可以跳轉
SJMP LOOPL
LOOPR:
RR A
MOV P1,A
ACALL DELAY
JB P0.0,LOOPL ;若為1就跳轉到LOOPL
SJMP LOOPR
DELAY:
MOV R0,#255 ;延時一段時間
D1:MOV R1,#255
DJNZ R1,$
DJNZ R0,D1
RET ;子程序返回
END
1.初始化復位是0FFH,變成0是滅。
2.把P1.0置1:SETB P1.0
3.A是字節,P1.0是位,不能用MOV A,P1.0
4.間接寄存器r0,r1
5.使用雙重循環控制時間間隔
DELAY:
MOV R3,#9FFH
LOOP2:MOV R2,#0F0H
LOOP1:DJNZ R2,LOOP1 ;內循環,減R2,減完R2,減R3
DJNZ R3,LOOP2
RET ;子程序調用使用RET
- P1.7是高位,P1.0是低位
- JNB:等於0轉移,等於1順序執行。