精華區beta ASM 關於我們 聯絡資訊
※ 引述《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)
Kniveschou:這篇文章 居然是183元 ......囧 03/23 03:48