Professional Documents
Culture Documents
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; LED0.asm ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
ORG 0000h ;程式開始
MOV A, #01h
Loop:
MOV P1, A
CPL A
ACALL Delay ;呼叫 副程式 注意!
SJMP Loop
RAM 每一個byte 最大值為255!
Delay: ; *8051晶片袋瓜一直轉, 發展板沒有動作
MOV R4, #10
Delay10: MOV R5, #24
Delay1: MOV R6, #100
Delay2: MOV R7, #100
Delay0: DJNZ R7, Delay0
DJNZ R6, Delay2
DJNZ R5, Delay1
DJNZ R4, Delay10
RET ; 返回 主程式
;-------------------------------------------
END ;程式結束
Lab_2: Project_2b
• Demo2: 2顆 LED燈 靠近又分開, 來來回回閃
MOV A, #00110011b
MOV R0, #10100001b ANL A, R0
ORL A, R0 • Note:
• (雖然這次不會用到, 但是ORL跟AND類似)
0011 0011b • 將A跟R0 裡面的Data做 AND,
A 0011 0011b
0011b
1010 0001b • 結果放進A
1011
1011 0011b
R0 1010 0001b
程式結束
P1 10111111B
R1 01000000B
Lab_2: Project_2b (修改說明)
程式開始
初始值設定: P1 11111110B
R0 01H R0 00000001B
R1 80H
Loop:
A = R0 OR R1
P1 01111111B
R1 10000000B
將A值取互補
P1 A
R0 內資料向左旋
R1 內資料向右璇 P1 11111101B
R0 00000010B
呼叫Delay副程式
P1 10111111B
程式結束
R1 01000000B
Lab_2: Project_2c
• Demo3: 讓LED燈 向右旋, 一下亮1顆, 一下亮2顆
• 注意! 影片是去年的,影片與本講義不同的時候! 請以本講義的內容為準!
初始值設定:
R0 ??H ; 用於一顆LED亮
R1 ??H ;用於兩顆 LED 亮
C 0 ; C=0 一個燈亮, C=1 兩個燈亮
Loop:
No, 兩顆LED亮
C = #0 ?
One_LED: Yes, 一顆LED亮
P1 R0亮暗設定
Two_LED:
P1 R1亮暗設定 影片中口誤:
R0 是每丟出去一次,才RR或RL一次,
並非每次Loop 就RR或RL一次
使用RR 或RL, 變更R1值
R1 是每丟出去一次,才RR或RL一次,
All_Do: 並非每次Loop 就RR或RL一次
CPL C
呼叫Delay副程式
程式結束