首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

!51单片机和上位机通讯

2013-03-26 
求助!51单片机和上位机通讯小弟初学单片机,前几天做了个设计。让一个红外传感器信号输出线接在STC单片机的P

求助!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;

}
[解决办法]
if(D0==0)SBUF=0X0A;//这是对的
else     SBUF=0x41;//'A';这也应该对
[解决办法]
void main()
{   
Uart_timer1_init();

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

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

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

热点排行