请会51单片机的高手帮我看看程序哪不对。

voidmain(){init();TMOD=0x12;TH0=156;TL0=156;TH1=(65536-50000)/256;TL1=(65536-50000)%2... void main()
{
init();
TMOD=0x12;
TH0=156;
TL0=156;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET0=1;
ET1=1;
EA=1;
while(1)
{
display();
keys();
if(s>99999999)
{
sorry1();
}
dj=1;
if(key==13)
{
zj=10;
sd=5;
key=0;
TR1=1;
TR0=1;
}
}
}

void shi0() interrupt 1
{
dj=~dj;
}

void shi1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
if(t>=20)
{
t=0;
sk++;
switch(flag)
{
case 0:
if(sk>=(shu1-1)){sk=0;flag=1;TR0=1;} //停shu1时间
break;
case 1:
if(shu2==0){TR1=0;TR0=0;break;}
else shu2--;
if(sk>=(zj-1)){sk=0;TR0=0;flag=0;} //走zj时间
break;
}
}
}
我写程序本来希望电机按照按键→停shu1→转zj→停shu1.......直到shu2--为0时结束。可是不知为何当我按下按键后电机总是先转,然后才进入正确的循环,而且循环的最后还比自己输入的数值多了一次,但是时间很短。请问各位高手,我该怎么改才对呢?
display();
keys();
if(s>99999999)
{
sorry1();
}
这部分是对应自己输入数值的,所以若大于99999999才会出现sorry1。自己觉得这部分没问题。
展开
 我来答
做而论道
高能答主

2014-02-14 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
按照按键→停shu1→转zj→停shu1.......直到shu2--为0时结束。可是不知为何当我按下按键后电机总是先转,
--------

决定《转》、《停》的变量flag,好像没有初始化。

另外,《转》和《停》,只有两个值,用 CASE 结构,明显是跑偏。

用 if...else...,才对路。

稍稍改了改,供参考:

void shi1() interrupt 3
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

t++;

if(t >= 20) {

t = 0;

sk++; //sk初始化时是多少?

if(flag) { //flag初始化时是0,还是1?

if(sk >= (zj - 1)) {sk = 0; flag = 0; TR0 = 0;} //走zj时间
shu2--;
if(shu2 == 0) {TR1 = 0; TR0 = 0;}
}

else
if(sk >= (shu1 - 1)) {sk = 0; flag = 1; TR0 = 1;} //停shu1时间

}
====================
而且循环的最后还比自己输入的数值多了一次
----

你输入的数字,竟然能有 99999999 !
很显然,你输入数字的函数,难免有错。
更多追问追答
追问
不行,跟原来的一样。还是电机先走了十几秒。
我的flag初始化时是0,sk就在那了。
追答
不行,跟原来的一样。还是电机先走了十几秒。
--那就检查你输入的数字吧。

我的flag初始化时是0
--如果是零,那就不会转:
if(flag) { //flag初始化时是0,还是1

  if(sk >= (zj - 1)) {sk = 0; flag = 0; TR0 = 0;} //走zj时间

sk就在那了。
--难以理解。
SHUZILEIDA
2014-02-14 · TA获得超过256个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:254万
展开全部
if(s>99999999) S是什么?他的值能用这么大吗?什么样的数据类型能有这么大
只是对应没有意义,要知道C语言中有没有这么大的值,99999999可是个天文数字。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2014-02-14 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1071万
展开全部
看起来按键程序有点问题。

s是什么类型的变量? 有没有溢出的可能?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xulei89617
2014-02-14 · TA获得超过174个赞
知道答主
回答量:353
采纳率:100%
帮助的人:130万
展开全部
99999999
是不是溢出了,算算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秋水vs夏花
2014-02-14 · TA获得超过701个赞
知道小有建树答主
回答量:662
采纳率:75%
帮助的人:220万
展开全部
S>99999999? 啥情况?S能有这么大的数值么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式