主要功能:1、检测GP1和GP2是否为高来控制GP0的高低,从而输出一段时序。
问题:1、GP1 GP2配置为输入后,硬件上给高电平,但是if仍然判断不到GP1==1,不能继续执行if里面的语句。
2、无论GP1 是否为高,一直在执行if里面语句,即IF判断失效。
3、用NOP()可以正常延时,但是用自己写得delay函数就不跑不过去了。编译无错误。
程序如下,望各位多多指点错误之处,必细心修改,比较急,在线等!
#include<pic.h>
//__CONFIG(RC & WDTEN & UNPROTECT);
__CONFIG(0x08);
#define uchar unsigned char
#define uint unsigned int
#define Trigger GP0
#define Status GP1
#define Reset GP2
void delaytime(uchar i)
{
uint j;
for(;i>0;i--)
for(j=0;j<400;j++)asm("clrwdt");
}
void init(void)
{
TRIS = 0B00000110; //GP0配置为输出,GP1、GP2为输入
OPTION = 0X00; //GP0、GP1、GP2配置为IO口
FOSC4=0;
Reset = 0;
Status = 1;
Trigger= 0;
}
void main()
{
init();
/****检测延时用
while(1)
{
NOP();NOP();
delaytime(138);//1秒
Trigger = 1;
delaytime(138);//1秒
Trigger = 0;
delaytime(138);//1秒
Trigger = 1;
delaytime(138);//1秒
Trigger = 0;
delaytime(138);//1秒
}
******/
while(1)
{
if(Reset==1)
{
delaytime(138);//1秒
Trigger = 1;
delaytime(690);//5秒
Trigger = 0;
delaytime(414);//3秒
Trigger = 1;
delaytime(69);//500毫秒
Trigger = 0;
if(Status!=1)
{
delaytime(138);//1秒
Trigger = 1;
delaytime(69);//500毫秒
Trigger = 0;
}
}
// asm("clrwdt");
}
}
我QQ136314885,希望大家能指点! |