登录
首页 单片机论坛
回帖 发帖
正文

主题:初学以的小程序却出问题了

点击:713 回复:6


初学c,写下了这个程序,用于检测相应的管脚的电平状态,并将最后形成的顺序
形成一个数字发送出去
现在出现的问题是,本来程序是按要求按下key1键才会产生发送动作的,但现在是单片机在办公室上试机时没有问题,
但如果装好外围电路,就是用了几个中继器,对相应的地方进行监控.
现在是不按下按纽,它也会自动发送信号
并且是无规律的
#include
sbit P12=P1^2; //作为0线的检查
sbit P00=P0^0; //准备1000为开始点
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
sbit key1=P1^0;
unsigned char SentNo;
void init(); //串口初始化子程序
void  delay(unsigned int i) // 长延时 约1ms
{
 unsigned int k,j;
 for(k=i;k>0;k--)
  for(j=1000;j>0;j--);
}
void  shortdelay(unsigned int i) // 短延时 约10Us
{
 unsigned int k,j;
 for(k=i;k>0;k--)
  for(j=10;j>0;j--);
}
void send(unsigned char ch) //串口1发送数据子程序
{
  ES=0;
  SBUF=ch;
  while(!TI);
  TI=0;
}
char panduan()   //判断各指定管脚电平的子程序
{
SentNo=100;
P0=0xff; //判断先置高电平   每次都是7?是电平的问题?
P12=0x0; //0xff; //也会用到这个脚? 会用到P1口
//这里的判断总是出问题不知是何原因?每次都是07就有问题了
if(P07==0)
{ SentNo=8; return 0; }
if(P06==0)
{ SentNo=7;   return 0; }
  if(P05==0)
{ SentNo=6;   return 0; }
if(P04==0)
{ SentNo=5; return 0;   }
if(P03==0)
{ SentNo=4;   return 0; }
if(P02==0)
{ SentNo=3; return 0;   }
  if(P01==0)
{ SentNo=2; return 0;   }
if(P00==0)
{ SentNo=1; return 0;   }
if(P12==0)
{ SentNo=0; return 0;   }   //开始点
}
main() //主程序,
{
 init(); //串口初始化
 delay(700); //约3秒

 while(1) //这里有与没有;的差别很大  有后面的都不再执行,
 {
    key1=1; //置高电平用于确定是否真的接入了低电平!
  if (!key1)
{
  delay(1); //此结构即所谓的防抖动功能了
  if(!key1)
  {
           delay(2) ;       //加延时,看看有什么问题
           panduan() ;   //判断管脚的状况
send(0x55);   //发送数据 '前导数
shortdelay(1); //延时约20Us
send(SentNo); //发送数据 '这个数据没有
shortdelay(1); //延时约20Us
send(0xdd); //发送数据 '结束码
delay(700);     //约5秒后再检查
  }
}
 }
}
void init()   //串口一的通讯初始化处理
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
EA=1;
ES=1;
TR1=1;
}
12-09-27 16:45
问题点: key1=1;
12-09-27 17:37
要确定该线是否真的低电平,不是要先置高电平,如果它接了地,一定会回低电平,再检测?
要改的话如何改呢?
谢谢
12-09-27 21:50
没仔细看.但一般程序试好了,是不会出问题的.
是不是硬件干扰或硬件设计问题?
12-09-28 09:33
都加了点延时,好象就行了,多谢各位
12-09-28 16:35
1:KEY1=1在while前初始化;
2:或者key1=1;后加个NOP延时再判断:STC单片机速度快,管脚初始化高就判断低,有可能管脚还没有反转过来;
附件
12-10-07 23:30

引用 sunsoncheng 在 2012/9/27 21:50:43 发言【内容省略】

12-11-17 17:39

工控新闻

更多新闻资讯