Re: [請益] 8051一些問題...

看板ASM (組合語言)作者 (Knives)時間16年前 (2008/04/09 03:09), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《t620she (很.無.聊)》之銘言: 這是8051的程式碼 經過助教解釋過後還是不太明白... 可以請各位大大幫忙再解說一下嘛~3Q 以下 MOV R2,#0 ;R2設定為數值0 MOV 40H,#0 ;40H這個address設定為0 MOV R3,#10000000B ;R3設定為二進位1000,0000 START: MOV A,#10000000B ;A設定為二進位的1000,0000 LOOP: RL A ;A左移,所以變成二進位的0000,0001 MOV R2,A ;把A的數值丟到R2去 ORL A,40H ;A跟40H做OR,第一次40H為0,所以不會改變 ;如果40H等於1000,0000B的時候,你的A ;最高位就會被mask為1, ;第二次就會最高兩位 MOV P0,A ;把OR過的A丟到P0,PS.做LED用P1比較簡單 ACALL DELAY100MS ;Delay MOV A,R2 ;把丟到R2的數值放回來A繼續左移 CJNE A,R3,LOOP ;若A=!R3則跳去Loop,A=R3則往下執行 ;CJNE不能這樣用,你如果要用A跟R3比較 ;你要改成 CJNE A,direct,Loop ;這邊可能就是你的作業了,你自己寫寫看吧 ;提示:把R3先丟出去 MOV 40H,P0 ;當A走到了1000,0000終於跟R3相同了以後 ;就會把P0丟到40H,40H會等於1000,0000B ;第二次走到的時候,會變成1100,0000B MOV A,R3 ;把R3的1000,0000丟回去A(洗到原始狀態) RR A ;A右移 MOV R3,A ;把A丟到R3,R3會變成0100,0000B ;所以下次要跳出CJNE的時候,就是要 ;0100,0000B才會跳出, ;再下次CJNE就是0010,0000B才跳出 JMP START ;跳到START開始 include delay.inc ;include delay進來 END 講這麼多 我用畫的比較明顯 你的P0 下面是P0.0~P0.7的對應 0 1 2 3 4 5 6 7 1-> 0 0 0 0 0 0 0 1-> 0 0 0 0 0 0 0 1-> 0 0 0 0 ............. 1 1-> 0 0 0 0 0 1 0 1-> 0 0 0 0 1 ............1 1 ... 1 1 1 1 1 1 1 1 最後P0會全部變成1 我不知道你們助教要的是不是這個意思.. 然後這是一個迴圈,助教說要把他改成無線迴圈...又難倒我了 :( 小弟不才,請各位大大幫忙嚕~謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.217.11

04/08 17:47,
可以先把你看懂看不懂的地方說一遍嗎
04/08 17:47
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.6.90

04/09 03:10, , 1F
383元 讚啦XDXD 半夜寫類神經寫到瘋掉 來賺批幣XDXD
04/09 03:10, 1F

04/16 08:00, , 2F
謝謝...
04/16 08:00, 2F
文章代碼(AID): #17-yB__d (ASM)
文章代碼(AID): #17-yB__d (ASM)