找回密码
 立即注册
查看: 1181|回复: 6

单片机始终处于复位状态,怎么回事?

[复制链接]

4

主题

11

回帖

62

积分

注册会员

积分
62
发表于 2023-2-21 14:37:37 | 显示全部楼层 |阅读模式
版主:您好!请教一个问题,电路设计完成,程序也已经编辑完,仿真已通过,之后用面包板试做系统,程序也已经烧录到单片机中,可是没有出现预设的结果,经检查各I/O口始终输出的是复位信号,即P0口都是0,其他口都是1,怎么回事呢?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2023-2-21 16:26:54 | 显示全部楼层
把你详细的原理图的PDF 发上来,大家帮你
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-2-21 16:28:27 | 显示全部楼层
能在线下载程序说明MCU已经能正常跑了,先测试STC官方的例程吧。

4

主题

11

回帖

62

积分

注册会员

积分
62
发表于 2023-2-25 13:17:43 | 显示全部楼层
首先感谢版主百忙之中抽出时间回复,给您添麻烦了!我这个项目的设计是这样的,用超声波检测是否有人员靠近,然后发出声音和灯光警示。
电路图.png

4

主题

11

回帖

62

积分

注册会员

积分
62
发表于 2023-2-25 13:20:45 | 显示全部楼层
上面是原理图,也是用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
                  }
            }
        }
}

4

主题

11

回帖

62

积分

注册会员

积分
62
发表于 2023-2-25 13:46:41 | 显示全部楼层
我用面包板做完系统后没出现预想的结果,也请教了一下别人,他说面包板有时候连接不好,所以我就焊了个板子,结果跟面包板差不多,也没出现理想结果。现在我只连了声音模块,没连警报灯模块,结果警报音一直在响,无论超声波检测没检测到人。我测了一下单片机的各引脚信号,是这样,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,一个地,一个接单片机发射(触发)引脚,一个接单片机接收引脚。为什么接收引脚始终是高电平呢?请版主百忙之中抽时间帮分析一下,不胜感激!再附上实物照片。
1.jpg
2.jpg
3.jpg

4

主题

11

回帖

62

积分

注册会员

积分
62
发表于 2023-2-25 15:20:21 | 显示全部楼层
看教科书上说p1、p2、p3口作为输入口,在读取状态前应该先输入一个1,是因为这个原因吗,我的传感器接收引脚一直是高电平?但我仿真程序里并没有输入1,也读取正确状态了?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 15:41 , Processed in 0.119280 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表