单片机始终处于复位状态,怎么回事?
版主:您好!请教一个问题,电路设计完成,程序也已经编辑完,仿真已通过,之后用面包板试做系统,程序也已经烧录到单片机中,可是没有出现预设的结果,经检查各I/O口始终输出的是复位信号,即P0口都是0,其他口都是1,怎么回事呢? 把你详细的原理图的PDF 发上来,大家帮你 能在线下载程序说明MCU已经能正常跑了,先测试STC官方的例程吧。 首先感谢版主百忙之中抽出时间回复,给您添麻烦了!我这个项目的设计是这样的,用超声波检测是否有人员靠近,然后发出声音和灯光警示。 上面是原理图,也是用proteus仿真的结果。下面是所编的程序。//头文件
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
//#include <math.h>
//宏定义
#define uc unsigned char
#define ui unsigned int
sbit GM=P2^4; //光敏
sbit TX1= P1^1; //超声波发射引脚
sbit RX1= P1^0; //超声波接收引脚
sbit TX2= P1^3; //超声波发射引脚
sbit RX2= P1^2; //超声波接收引脚
sbit TX3= P1^5; //超声波发射引脚
sbit RX3= P1^4; //超声波接收引脚
sbit TX4= P1^7; //超声波发射引脚
sbit RX4= P1^6; //超声波接收引脚
sbit TX5= P2^1; //超声波发射引脚
sbit RX5= P2^0; //超声波接收引脚
sbit KZ1=P2^5; //警报灯(继电器)1
sbit KZ2=P2^6; //警报灯(继电器)2
sbit KZ3=P2^7; //警告音
uc m=0; //定义次数变量m
void delay(ui x)//延时函数
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void init() //初始化函数
{
GM=0; //光敏置低
KZ1=1; //警报灯(继电器)1关
KZ2=1; //警报灯(继电器)2关
KZ3=0; //警告音关
TMOD=0x01; //定时器工作方式
TH0=0x3c;
TL0=0xb0; //赋初值50ms 这个计数初值是正确的,我已经验算过了
ET0=1; //打开中断允许开关
TR0=1; //打开定时器计时开关
EA=1; //打开中断总开关
}
void T0_time() interrupt 1 //定时器执行函数,每隔半秒发送一次超声波检测信号
{
TH0=0x3c;
TL0=0xb0; //重新赋初值50ms
m++; //m加一次是50ms
if(m>=10) //加到10次,就是半秒
{
m=0; //m清零
TX1=1; //每半秒启动一次超声波检测
TX2=1;
TX3=1;
TX4=1;
TX5=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX1=0;
TX2=0;
TX3=0;
TX4=0;
TX5=0;
}
}
void main() //主函数
{
init();//初始化函数
while(1)//空循环
{
while(!(RX1||RX2||RX3||RX4||RX5)) //当RX为零时等待
{
KZ1=1; //警报灯(继电器)1关
KZ2=1; //警报灯(继电器)2关
KZ3=0; //警告音关
}
while(RX1||RX2||RX3||RX4||RX5) //当RX为1说明检测到有人或事物靠近
{
if(GM==1) //说明是白天
{
KZ1=1;
KZ2=1;
KZ3=1;
delay(5000); //延时5s
}
if(GM==0) //说明是夜晚
{
KZ1=0;
KZ2=0;
KZ3=1;
delay(5000);//延时5s
}
}
}
}
我用面包板做完系统后没出现预想的结果,也请教了一下别人,他说面包板有时候连接不好,所以我就焊了个板子,结果跟面包板差不多,也没出现理想结果。现在我只连了声音模块,没连警报灯模块,结果警报音一直在响,无论超声波检测没检测到人。我测了一下单片机的各引脚信号,是这样,p0.0~p0.7是0V,EA是5V,ALE是0V,PSEN是5V,p2.7~p2.2都是5V,p2.1、p1.1、p1.3、p1.5、p1.7,也就是超声波的发射引脚都是0V,p2.0、p1.0、p1.2、p1.4、p1.6,也就是超声波的接收引脚都是5V,RST是0V,p3.0~p3.7是5V,XTAL2是1.4V,XTAL1是1.2V。超声波传感器用的是HC-SR04,有四个引脚,一个VCC,一个地,一个接单片机发射(触发)引脚,一个接单片机接收引脚。为什么接收引脚始终是高电平呢?请版主百忙之中抽时间帮分析一下,不胜感激!再附上实物照片。 看教科书上说p1、p2、p3口作为输入口,在读取状态前应该先输入一个1,是因为这个原因吗,我的传感器接收引脚一直是高电平?但我仿真程序里并没有输入1,也读取正确状态了?
页:
[1]