求助!51单片机和上位机通讯

wuhulove99 2010-07-21 05:23:20
小弟初学单片机,前几天做了个设计。让一个红外传感器信号输出线接在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;

}
...全文
305 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
joo_lee 2012-12-06
  • 打赏
  • 举报
回复
小弟现在也正在做这个设计,不太会啊,帮忙带一把
joo_lee 2012-12-06
  • 打赏
  • 举报
回复
wuhulove大哥,你还在么?
wuhulove99 2010-07-23
  • 打赏
  • 举报
回复
谢谢了,我的设计做出来了,真的非常感谢。
wu1373369 2010-07-23
  • 打赏
  • 举报
回复
手册到网上可以下,你的信号采集看来很有问题,对P0.1的设置好好看看
ps:手册的学习的重要资料,你居然没有
Linux_lee 2010-07-23
  • 打赏
  • 举报
回复
把传感器去掉,直接在P0^1接5V和0V电压试试,先确定是那一边的问题
wuhulove99 2010-07-23
  • 打赏
  • 举报
回复
1K的,错了
Linux_lee 2010-07-23
  • 打赏
  • 举报
回复
1G的排阻??
wuhulove99 2010-07-23
  • 打赏
  • 举报
回复
我用的单片机是STC89C52,开发板上在P0口接有1G的排阻,可以吗
Linux_lee 2010-07-23
  • 打赏
  • 举报
回复
NPN输出的光电传感器需要加上拉电阻,在传感器输出端到VCC加一个10K左右电阻试试
wuhulove99 2010-07-23
  • 打赏
  • 举报
回复
我测了一下,加5v电压,没人时传感器输出电平是3.65v,有人时是0.77V,信号线直接接到单片机的P0.1口,用万用表的红表笔接信号线,黑表笔接5v电源负端,应该是那样测的,传感器有正、负电源线,信号线,输出为NPN,运行下面程序不行啊,有人时蜂鸣器也不响
#include<reg52.h>
sbit D1=P0^1;
sbit D2=P3^7; 接蜂鸣器
void main()
{
while(1)
{
int i;
if(D1==0)
{
D2=0;
for(i = 0; i < 0xffff; ++i)asm("nop");
D2 = 1;
write();//给串口发数据
}
}
}
wuhulove99 2010-07-23
  • 打赏
  • 举报
回复
没有数据手册,型号是GY10-W3-3E1,是直接连吗?需要对他的输出信号进行处理吗?
wuhulove99 2010-07-22
  • 打赏
  • 举报
回复
传感器感应到人时输出低电平,大致在-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;
}

}
上面程序是错的,把程序下到单片机后,再给传感器上电,蜂鸣器就响了,要是先给传感器上电,再给单片机上电,他又不响了,但你给传感器断电,他也响,怎么办啊,各位大哥?帮帮小弟我刚学啊
wu1373369 2010-07-22
  • 打赏
  • 举报
回复
更正:
unsigned int i;
for(i = 0; i < 0xffff; ++i)asm("nop");//延时
wu1373369 2010-07-22
  • 打赏
  • 举报
回复
while(1)
{
int i;
if(D1==0)
{
D2=0;
for(i = 0; i < 0xffff; =+i)asm("nop");
D2 = 1;
write();//给串口发数据
}
}
传感器的数据采集看的接的引脚的设置,数字的还是模拟的,看看手册怎么写的
小富0759 2010-07-22
  • 打赏
  • 举报
回复
while(1)
{
if(D1==0)D2=0;
}
这个是一个死循环啊!
一旦D1==0,那么你的D2就一直为0.
那么一直为0,你的蜂鸣器会一直响的了!
在这个问题上建议你写一个D0的置1的程序!
或者一个延时控制程序!
Linux_lee 2010-07-21
  • 打赏
  • 举报
回复
用万用表测下传感器输出的电平信号是否正常
Great_Bug 2010-07-21
  • 打赏
  • 举报
回复
void main()
{
Uart_timer1_init();

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

/* 记得你的main()一定要写成一个循环...... */
schlafenhamster 2010-07-21
  • 打赏
  • 举报
回复
if(D0==0)SBUF=0X0A;//这是对的
else SBUF=0x41;//'A';这也应该对
wuhulove99 2010-07-21
  • 打赏
  • 举报
回复
单片机P3.7口接的是蜂鸣器,P0.1口接传感器,当传感器感应到人时,蜂鸣器响了,可就是像上位机通信那块不行
#include<reg52.h>
sbit D1=P0^1;
sbit D2=P3^7;
void main()
{
while(1)
{
if(D1==0)D2=0;
}

}
wuhulove99 2010-07-21
  • 打赏
  • 举报
回复
我不连传感器,直接给P0.1口低电平,用串口调试助手就能收到单片机发来的信号0A,但接上传感器就不行了,谢谢大哥,我的程序有什么毛病吗
加载更多回复(1)

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧