STC15F104W逻辑判断问题为什么我RX不等于0时它会执行ft()?而且for i 循环也不起作用。

#include<reg51.h> // 用的是LM298N驱动

#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RX=P3^4; //echo接口

sbit K1=P3^2;
sbit K2=P3^3;

void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}

void qudong() //小车驱动程序
{

K1=1;
K2=0;

}

void stop() //电机停止
{
K1=0;
K2=0;

}

void ft() //反转
{
K1=0;
K2=1;

}

void Delay(unsigned int a)//0~65535
{
unsigned char b;
for(;a>0;a--)
{
for(b=110;b>0;b--);
}
}

void main( )

{
uint i;
stop();

while(1)
{
if(RX==0)
{
for(i=0;i<60000;i++)
{
qudong(); //顺时针转动

}
stop();

ft();

}

}

}

作为实物单片机不可能有逻辑上的错误的,那是销售的正规产品,存在问题也不会出厂的。
sbit RX=P3^4; //echo接口
这P3.4 脚的是传感 器吧?还是按键,肯定是P3.4脚被外电路拉成了低电平了,才会执行
if(RX==0) 下面的程序,至于那for循环的时间,对于 实物而言,延时比较短,你感觉不出来吧。还是查一下电路,或者把P3.4 脚上的什么东西先拿掉再试一试。
另外,再检查一下LM298N驱动的控制方法,也许是不执行ft();函数,就会反转的。先把if(RX==0) 下面的ft();函数先注释掉,//ft(); 这样,就不起作用了,再烧录一下程序,看电机转不转,就知道原因了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-23
你的程序在进入主循环后RX的状态是不确定的,所以会影响接下来的if判断,你在主循环
前面加一句RX=1;试试看。
void main( )

{
uint i;
stop();
RX=1;
while(1)
{
*******
第2个回答  2018-08-23
程序里ft()是在if的大括号内,并且处在if大括号的结尾处,一旦RX==0满足,就执行了
for循环和stop()及ft();即使最后if条件不满足时退出,ft()仍在执行
想让其停下来,可以在if大括号外加一个stop即可
第3个回答  2018-08-23
可以降低程序优化级别,试试无优化的程序运行情况。
可以在定义RX和i的前面加volatile关键字,避免对这个变量优化,经常会出现程序编译后,不去读取自己定义的绝对地址的值,而是一个不变的临时值
第4个回答  2018-08-20
STC15F104E
有bug,官方资料中已经说明。推荐
STC15F104W替代追问

我用的就是STC15F104W

本回答被网友采纳
相似回答