作者Kniveschou (Knives)
看板ASM
标题Re: [请益] 8051一些问题...
时间Wed Apr 9 03:09:50 2008
※ 引述《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
1F:推 mepass:可以先把你看懂看不懂的地方说一遍吗 04/08 17:47
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.6.90
2F:→ Kniveschou:383元 赞啦XDXD 半夜写类神经写到疯掉 来赚批币XDXD 04/09 03:10
3F:推 t620she:谢谢... 04/16 08:00