作者wayn12342000 (阿菁)
看板ASM
标题[问题] C++求救!不知道问题在哪里!!
时间Sat Jul 18 21:44:33 2009
※ [本文转录自 C_and_CPP 看板]
作者: wayn12342000 (阿菁) 看板: C_and_CPP
标题: [问题] C++求救!不知道问题在哪里!!
时间: Sat Jul 18 21:40:13 2009
目前正在进行专题,
遇到一个很奇怪的问题,
我描述一下情况:
目前从学长那继承一个由伺服马达控制的机器人,
原有的控制方式是组语,
後来改用C控制,
但发生副程式无法动作的情况,
下面是控制方式
范例(组语):
略...
mov r2,#50 ;给值50
loop0:
mov p2,00000001;丢值进P2.0 控制motor1
call delay15 ;延迟1.5ms(角度一)
mov p2,00000010;丢值进P2.1 控制motor2 同时将P2.0值=0
call delay20 ;延迟2.0ms(角度二)
call delay200 ;延迟20ms (满足周期 驱动马达动作)
djnz r2,loop0
略...
注:伺服马达的控制是给予一小段特定时间脉波(1.5ms 2.0ms...
并於满足周期後向着目标角度进行一动(视马达而定...
给予足够回圈就可以移至正确角度位置(r2=50...
简单介绍後进入正题,
目前写出来的C是
略....
void hd1( int );宣告各部位副程式 头
void lh2( int ); 手
略...
main()
{
int i;
for(i=0;i<50;i++)
{
hd1( 45 );要求移向的角度
}
for(i=0;i<50;i++)
{
lh2( 45 );
}
}
void hd1( int angle )
{
p1=00000001;
angledelay( angle );
}
void lh2( int angle )
{
p1=00000010;
angledelay( angle );
}
void angledelay( int angle )
略...
问题开始!!
在原先测试的时候发现robot像中风一样一直抖...抖...抖...
转而用这个简易程式测试
结果发现各种交叉测试
1.交换马达
2.交换程式位置(考虑定义先後
3.改变输出port点
都无法使lh2这个副程式正常动作
但hd1完全正常!!!
但hd1完全正常!!!
但hd1完全正常!!!
DEBUG到目前为止并无发现任何硬体上的错误以及软体上直接的错误
是有什麽隐规则被忽略掉了吗?
这两个副程式只差在一个叫hd1 一个叫lh2
但结果是天差地别
请问各位高手有什麽办法吗??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.126.120.102
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.126.120.102
1F:推 WolfLord:再这两个副程式结束时都加一个 P2=0; 如何? 07/18 22:05
2F:→ WolfLord:看错了,P1=0。对了,为甚ASM写P2,C写P1 ? 07/18 22:06
3F:→ wayn12342000:忘记说了 补充:副程式结束时都有加上P1=0 07/18 22:10
4F:推 WolfLord:那检查一下电路,可能有SHORT或连到别的东西 07/18 22:12
5F:→ wayn12342000:经交叉测试 硬体方面完全没有错误 07/18 22:15
6F:→ wayn12342000:hd1不论是去控制p1.0或是p1.1都OK 两颗马达也单独测 07/18 22:16
7F:→ wayn12342000:试,结果也是正常的 07/18 22:16