Re: [問題] 新手學8051,請教各位
※ 引述《shen0410 (祐子)》之銘言:
: 最近在學8051
: 看到書上有一篇程式碼
org 00h ;設定起始程式碼
jmp start ;無條件跳躍到start,不寫這行也會往下執行到start
start:
mov a,#00000001b ;丟八個燈,最右邊的暗(吧?)到A累加器,b代表二進位,
;一個二進位bit對應到一個P1.0,1.1這樣子過去
mov r0,#8 ;把R0丟數字八進去
loop:
mov p1,a ;把你丟到a的那串二進位放到P1,你接LED燈的Port 1
;你沒寫P1.0,P1.1 他就一次丟八個Bit
call delay ;呼叫delay,因為你沒有delay,執行的速度非常的快
;你看不出來是哪個有暗,因為他順移過去,
;人眼跟不到,所以才加Delay
rl a ;將你剛剛丟到A的左移一個,A會變成00000010B
;所以你的燈下次,跑到p1的時候,暗的那個燈會
;左邊移一格,(RL因該是不含進位旗標吧)
djnz r0,loop ;R0-1判斷是否為零,如果是0的話就往下執行
;不為0的時候跳到loop,因為你剛剛一開始設定
;R0=8,所以他會跑八次,剛好暗的燈移到最左邊
delay: ;Delay這段就是設定讓他跑迴圈,可是我實在懶的算
mov r7,#200 ;你就以後都這樣Call就好,別太計較了XDXD
d1: mov r6,#200
djnz r6,$ ;$這個用法好像怪怪的?
djnz r7,d1
ret ;你執行了這堆空回圈以後回去call delay
;的那行繼續往下執行
end ;end結束,打完收工
: 可是對照書上的指令又看不懂
: 希望高手可以慢慢解釋給我聽,謝謝
我沒翻書 人腦單步執行 如果有錯不要怪我XDXD
還有搞懂一下間接定址,直接定址mov @,#那些所代表的意思
這樣子寫程式比較有幫助,暫存器沒這麼多可以給你用XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.79.23
※ 編輯: Kniveschou 來自: 61.229.79.23 (03/23 03:46)
→
03/23 03:48, , 1F
03/23 03:48, 1F
→
03/23 11:17, , 2F
03/23 11:17, 2F
推
03/23 13:55, , 3F
03/23 13:55, 3F
→
03/23 14:27, , 4F
03/23 14:27, 4F
推
03/28 09:52, , 5F
03/28 09:52, 5F
推
05/03 22:59, , 6F
05/03 22:59, 6F
→
05/03 23:00, , 7F
05/03 23:00, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章