lozhen001 发表于 2025-8-15 10:25:36

紧急救助

没有用,刚才把KEIL里面重新设置了一下,还是那样

国芯人工智能 发表于 2025-8-15 10:28:00

您好,您提到在KEIL中重新设置后问题仍未解决,建议您检查以下几点:

1. 项目配置:确认目标设备和晶振频率是否与实际硬件一致,错误的配置可能导致程序无法正常运行。

2. 编译器设置:确保使用正确的编译器版本,并检查优化选项是否合理,过高的优化可能引入兼容性问题。

3. 代码逻辑:排查是否存在死循环、未初始化的变量或指针越界等逻辑错误,这些可能导致程序卡顿或崩溃。

4. 硬件连接:检查开发板与电脑的连接是否稳定,USB接口或调试工具(如J-Link)是否正常工作。

5. 固件更新:尝试更新KEIL至最新版本,或检查是否有可用的补丁修复已知问题。

6. 日志分析:启用调试输出或查看系统日志,定位异常发生的具体位置。

若以上步骤仍无法解决问题,建议提供更详细的错误信息或代码片段,以便进一步分析。

[本文内容由国芯人工智能辅助生成,仅供参考]

lozhen001 发表于 2025-8-15 10:33:03

刚才C程序发了,帮忙看看有没有问题

lozhen001 发表于 2025-8-15 10:36:09

主板功能非常简单,就是P15收到高电平就打开P32或者P12为1,再次收到P15低电平P32或者P12为0

lozhen001 发表于 2025-8-15 10:37:43

主板没有晶振,用的是系统内部频率 11M

ercircle 发表于 2025-8-15 10:52:17

不要重复创建新帖,集中在一个地方讨论

紧急救助 - 综合讨论 国芯人工智能技术交流网站 - AI32位8051交流社区

芯映芯 发表于 2025-8-15 10:57:21


不要重复建帖,我把您上个贴发的代码和回帖移过来,那个贴我帮您删掉啦~


STC15W408AS的P32,12脚无法输出,不知道是不是程序设置问题还是芯片问题



                //Keil开发环境下选择Intel的8058芯片型号进行编译
//工作频率为11MHz
#include <stdio.h>
#include <intrins.h>
#include <STC15.H>

unsigned char OK=1;
unsigned int v=0,w=0;
unsigned char i2,i3,cc,vv;
typedef unsigned long         u32;

#define MAIN_Fosc       11000000L

//--------------------------------------------------------------------------------------------------



void DelayXms(u32 xms)      //延迟1MS   11.0592MH
{
u32 i,j;
for(i=xms;i>0;i--)
    for(j=124;j>0;j--);
}


void exint2() interrupt 10   //INT0只能下降沿中断   
{

//P32=1脚,P10=2脚,P11=4脚,P33=8脚,P10=0;5秒配对
      INT_CLKO &= (0<<4);         //禁止中断2中断
   P34=0;//系统灯亮
      P10=0;
   DelayXms(6000);          //5000MS,5秒
      
    P10=1;
      INT_CLKO |= 0x10;      //(EX2 = 1)      使能中断2中断
      P34=1;//系统灯灭
}

void dz7881_2_B()               //0触发
{
P54=0;//B2
DelayXms(3257);      //2.7S
      P54=1;//B2
      P33=0;//B1
      DelayXms(5429);//4.58S5.6145457
      P33=1;//B1
      
}

void dz7881_2_F()               //0触发
{

      P37=0; //F1
      DelayXms(5429);//4.58S
      P37=1; //F1
      P55=0;//F2
      DelayXms(3257);      //2.7S2.753260
P55=1;//F2

}

void sysled()               
{
int i;
            
      for(i=0;i<10;i++)
      {      
         P34=0;
   DelayXms(300);
    P34=1;
    DelayXms(300);

      }
}


void main()
{
          P0M0 = 0xff;      //推挽输出(强上拉输出),
    P0M1 = 0x00;
   
          P1M0 = 0x0f;      //推挽输出(强上拉输出) 0000 1111P12,P15 灯输出,P11、P10是编码器输入
   P1M1 = 0xf0; //                     1111 0000
   
    P2M1 = 0x00;   //                     0000 0000
          P2M0 = 0x4c;      //推挽输出(强上拉输出)0100 1100P26,P23,P22


         
          P3M0 = 0xff;      //0000 0000P3M0   0高阻输入; 1   推挽输出(强上拉输出) 0双向1开漏
      P3M1 = 0x00;//0000 0000P3M1   1             0                        0      1

    P4M0 = 0x00;      //双向
    P4M1 = 0x00;
      
    P5M0 = 0xff;         //推挽输出(强上拉输出)P54控制继电器
    P5M1 = 0x00;
      
         //输出
    P10=1;//配对键,平时为1
      
    P55=1;//788-2,
         P54=1;//788-2
    P37=1;//788-1
    P33=1;//788-1
          P34=0;//系统灯
   
   P32=0;//电源开关
               
               P12=0;//KEY3输出信号
   P11=0;//KEY2输出信号
   P10=0;//KEY1输出信号
   P13=0;//KEY4输出信号

   //输入         

   P17=0;//C4输入信号
   P16=0;//C3输入信号
   P14=0;//C1输入信号,通道1,高电平有效
   P15=0;//C2输入信号,通道1,高电平有效


   sysled();


v=0;
      w=0;

INT_CLKO |= 0x10;      //(EX2 = 1)      使能中断2中断
               
      P36 = 1;    //平时为1,如果有磁棒则产生一个尖峰脉冲
               
         IT0= 0;   //设置INT0的中断类型(1:仅下降沿,0:上升沿和下降沿)
         
    EA = 1;         //打开总中断
   
      
         while (OK)
    {
   //************
//通道2执行期间不允许执行通道1         
      if(( P14==1)&&( v==0))//
                        {
                              //P14=1;
                              dz7881_2_B();
                              v=1;
                                                      
                  }
                     
                if(( P14==0)&&(v==1))
                              {
                                        v=0;//P14=0;
                                 dz7881_2_F();
                              }
                              
                if((15==1)&&( w==0))//控制MOS管导通,1导通9.458秒
                        {
                              P32=1;//P12   都没有输出
                              w=1;
                     
                  }
                     
                if((P15==0)&&( w==1))//控制MOS管导通,1导通9.458秒
                              {
                                        P32=0;//P12   都没有输出
                                        w=0;
                                 }      
                     
                     
                                       
               
                }

      
}


DebugLab 发表于 2025-8-16 12:05:49

P32、P12作为输出,需要设置为推挽模式:

P3M0|=0x04;
P3M1&=~0x04;

P1M0|=0x04;
P1M1&=~0x04;

先写一个最简单的程序测试一下硬件是否正常:

while(1)
{
    P32=0;
    Delay1000ms();
    P12=0;
    Delay1000ms();
    P32=1;
    Delay1000ms();
    P32=1;
    Delay1000ms();
}

可在IO口接LED观察
页: [1]
查看完整版本: 紧急救助