标题: [求助]用keil仿真是有些程序段编译执行! [打印本页]

作者: tongxingma    时间: 2010-5-17 21:12
标题: [求助]用keil仿真是有些程序段编译执行!
 
最近做了一个小的项目,写了一段程序,编译没有错,但是在用keil进行仿真时,有的程序段直接跳过不执行了,百思不得其解!望哪位高手指点指点! 
附:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit d_q=P1^1;
sbit d_h=P1^0;
sbit d_z=P1^3;
sbit d_y=P1^2;


sbit feng=P2^0;

uchar dot,flag;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init ()
{
TMOD=0x05;// T0的方式1
TH0=0;
TL0=0;
TR0=1;//计数器0的设置


d_q=0;
d_h=0;
}
main()
{
init ();
while(1)
{
d_q=1;
delay(5);
d_q=0;
delay(7);
dot=TL0;
if(dot>5)
{
TH0=0;
TL0=0;
}
dot=TL0;
if(dot==5)
		{       
 //主要是从这儿开始的
			   TL0=0;
			   d_q=0;
d_h=0;
d_z=0;
d_y=0;
feng=1;
delay(600);
feng=0;
delay(600);
feng=1;
delay(600);
feng=0;
delay(600);
feng=1;
delay(600);
// 后面在中断子程序里面的相同部分也是一样
feng=0;
delay(2000);
d_q=1;
TL0=0;
flag=0;
}
dot=TL0;
if(dot==3&flag==0)
{
flag=1;
feng=1;
delay(600);
feng=0;
delay(4400);
d_q=1;
TL0=0;
}

d_q=1;
delay(8);
d_q=0;

}

}

作者: hjfxljx    时间: 2010-5-22 18:57

你的意思是用定时器的计数值来控制引脚输入输出的时序吗?

这种想法太天真了,你的定时器与你执行一句代码的时间是同一数量级,可与Delay()却有很大的差别。你在语句中加入Delay()显然会对TL0造成不可估计的影响啊,根本无法确定程序执行到指定位置的TL0值,所以用这个来控制太不可能了。

有问题一起探讨吧,QQ: 616743429






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1