当前位置: 代码迷 >> 单片机 >> !51单片机和下位机通讯
  详细解决方案

!51单片机和下位机通讯

热度:64   发布时间:2016-04-28 15:43:39.0
求助!51单片机和上位机通讯
小弟初学单片机,前几天做了个设计。让一个红外传感器信号输出线接在STC单片机的P0.2口,当传感器感应到人时,便输出信号给单片机,单片机通过串口给上位机(计算机)发信号。程序如下,可就是不对,请各位大哥大姐帮忙看看。传感器
#include<reg52.h>
#include<intrins.h>
sfr ISP_CONTR=0xe7;
sbit D0=P0^1;
void Uart_timer1_init()    串口初始化,这一块是对的,我确信。
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
////////////////////////////////
void Uart_init()interrupt 4           串口中断
{
unsigned char Write_C=0;
if(RI)
{
RI=0;
Write_C=SBUF;
if(Write_C==0xc3) ISP_CONTR=0X60;
}
if(TI)
{
TI=0;
}
}
/**************************************************/
void main()
{  
Uart_timer1_init();

 if(D0==0)SBUF=0X0A;

}
------最佳解决方案--------------------
把传感器去掉,直接在P0^1接5V和0V电压试试,先确定是那一边的问题
------其他解决方案--------------------
while(1)
{
  int i;
  if(D1==0)
  { 
    D2=0;
    for(i = 0; i < 0xffff; =+i)asm("nop");
    D2 = 1;
    write();//给串口发数据  
 }
}
传感器的数据采集看的接的引脚的设置,数字的还是模拟的,看看手册怎么写的
------其他解决方案--------------------
NPN输出的光电传感器需要加上拉电阻,在传感器输出端到VCC加一个10K左右电阻试试
------其他解决方案--------------------
void main()
{   
Uart_timer1_init();

while (1){
   if(D0==0)SBUF=0X0A;
   ............
   }
}

/* 记得你的main()一定要写成一个循环...... */
------其他解决方案--------------------
用万用表测下传感器输出的电平信号是否正常
------其他解决方案--------------------
if(D0==0)SBUF=0X0A;//这是对的
else     SBUF=0x41;//'A';这也应该对
------其他解决方案--------------------
while(1)
{
if(D1==0)D2=0;
}
这个是一个死循环啊!
一旦D1==0,那么你的D2就一直为0.
那么一直为0,你的蜂鸣器会一直响的了!
在这个问题上建议你写一个D0的置1的程序!
或者一个延时控制程序!

------其他解决方案--------------------
把错误说出来
------其他解决方案--------------------
我不连传感器,直接给P0.1口低电平,用串口调试助手就能收到单片机发来的信号0A,但接上传感器就不行了,谢谢大哥,我的程序有什么毛病吗
------其他解决方案--------------------
单片机P3.7口接的是蜂鸣器,P0.1口接传感器,当传感器感应到人时,蜂鸣器响了,可就是像上位机通信那块不行
#include<reg52.h>
sbit D1=P0^1;
sbit D2=P3^7;
void main()
{
while(1)
{
if(D1==0)D2=0;
}

}
------其他解决方案--------------------
传感器感应到人时输出低电平,大致在-3.7到-6V之间,通电没人时在3.2到5.4V之间,没通电时差不多为零,输入信号电压十五伏左右,怎么采集啊?就写if(D0==0)....吗?
单片机P3.7口接的是蜂鸣器,P0.1口接传感器,
#include<reg52.h>
sbit D1=P0^1;
sbit D2=P3^7;
void main()
{
while(1)
{
if(D1==0)D2=0;
}

}
上面程序是错的,把程序下到单片机后,再给传感器上电,蜂鸣器就响了,要是先给传感器上电,再给单片机上电,他又不响了,但你给传感器断电,他也响,怎么办啊,各位大哥?帮帮小弟我刚学啊

------其他解决方案--------------------
更正:
unsigned int i;
for(i = 0; i < 0xffff; ++i)asm("nop");//延时
  相关解决方案