作者loveflames (.....)
看板ASM
标题Re: 麻烦会8051的大大,帮我一个忙!拜托了...谢谢
时间Wed Jan 31 23:29:14 2007
注:此程式完全没考虑clock cycle
3个LED的负分别接p1.0 p1.1 p1.2(由p3来控制p1,如果p3.0为1则p1.0为1)
p1.0是0则第1个LED会亮
p1.0是1则第1个LED不会亮
以此类推
如果p1.0是1维持了50000us*200=10000000us=10秒会跳到start2
p1.1是1维持了10秒会跳到start3
p1.2是1维持了10秒会跳到over结束
$mod51
$DEBUG
mov p1,
#11111110b
mov p3,
#11111111b
mov tmod,#01h;timer0 =mode1
start:mov r0,#199
lcall re
loop:jnb tf0,c1 ;2 50000
lcall re;2 50000
djnz r0,c1
sjmp start2
c1:jnb p3.0,d1
clr p1.0
sjmp start
d1:setb p1.0
sjmp loop
start2:mov p1,
#11111101b
mov r0,#199
lcall re;2
loop2:jnb tf0,c2 ;2
lcall re;2
djnz r0,c2
sjmp start3
c2:jnb p3.1,d2
clr p1.1
sjmp start2
d2:setb p1.1
sjmp loop2
start3:mov p1,
#11111011b
mov r0,#199
lcall re;2
loop3:jnb tf0,c3 ;2
lcall re;2
djnz r0,c3
sjmp over
c3:jnb p3.2,d3
clr p1.2
sjmp start3
d3:setb p1.2
sjmp loop3
over:sjmp $
re:clr tr0;1
mov th0,#03ch;3cb0h=15536=65536-50000
mov tl0,#0b0h;
clr tf0;1
setb tr0;1
ret;2
end
※ 编辑: loveflames 来自: 61.225.2.81 (02/01 01:33)
※ 编辑: loveflames 来自: 61.225.2.81 (02/01 01:37)
※ 编辑: loveflames 来自: 61.225.2.81 (02/01 18:35)
1F:推 ruemann:这个程式是利用p3来侦测led是否有坏吗?那硬体要如何接? 02/03 00:28
2F:→ ruemann:不太懂为何p3可以知道led是好是坏 02/03 00:28
3F:推 loveflames:其实只是让LED的负端变1使其不亮 02/03 00:29
4F:推 loveflames:我的猜测是如果送电进p3的某接脚会使该接脚的值变1 02/03 00:31
5F:→ loveflames:p3的接脚如果是1则会设定p1对应的接脚为1,用p3来控制亮或不亮 02/03 00:33
6F:→ loveflames:至於实作,要到下学期才行,所以有些猜测无法证实 02/03 00:34
7F:→ loveflames:现在都只是在pc上模拟而已 02/03 00:37
※ 编辑: loveflames 来自: 61.225.1.115 (02/03 00:39)
8F:→ ruemann:所以在读状态时要先将该pin设为1後才能正确读取资料 02/03 00:38
9F:→ ruemann:另外问个问题,我记得8051的io是类似open drain的做法 02/03 00:39
10F:→ ruemann:所以在读状态时要先将该pin设为1後才能正确读取资料 02/03 00:39
11F:→ ruemann:所以这个程式部份有点问题(上面被砍了,重推) 02/03 00:39
12F:→ loveflames:一开始不是把p3每个接脚都归0了?送电给p3是希望该接脚 02/03 00:40
13F:→ loveflames:变1,进而设定p1接脚 02/03 00:42
14F:→ loveflames:假设送电进p3就变1,似乎是我想得太简单的样子 02/03 00:43
15F:推 ruemann:所谓的open drain是指pin只拥有输出0的能力 02/03 00:51
16F:→ ruemann:因此输出1的能力很差。所以若设为0时,可视为接地 02/03 00:52
17F:→ ruemann:如此外部的电压也会被keep在接近的电位 02/03 00:52
18F:→ ruemann:如此外部的电压也会被keep在接近地的电位 02/03 00:54
19F:→ ruemann:因此需要先设为1後,将pin释放才能正确的取得外部号 02/03 00:55
※ 编辑: loveflames 来自: 61.225.1.115 (02/03 01:40)