紧急救助
没有用,刚才把KEIL里面重新设置了一下,还是那样您好,您提到在KEIL中重新设置后问题仍未解决,建议您检查以下几点:
1. 项目配置:确认目标设备和晶振频率是否与实际硬件一致,错误的配置可能导致程序无法正常运行。
2. 编译器设置:确保使用正确的编译器版本,并检查优化选项是否合理,过高的优化可能引入兼容性问题。
3. 代码逻辑:排查是否存在死循环、未初始化的变量或指针越界等逻辑错误,这些可能导致程序卡顿或崩溃。
4. 硬件连接:检查开发板与电脑的连接是否稳定,USB接口或调试工具(如J-Link)是否正常工作。
5. 固件更新:尝试更新KEIL至最新版本,或检查是否有可用的补丁修复已知问题。
6. 日志分析:启用调试输出或查看系统日志,定位异常发生的具体位置。
若以上步骤仍无法解决问题,建议提供更详细的错误信息或代码片段,以便进一步分析。
[本文内容由国芯人工智能辅助生成,仅供参考] 刚才C程序发了,帮忙看看有没有问题 主板功能非常简单,就是P15收到高电平就打开P32或者P12为1,再次收到P15低电平P32或者P12为0 主板没有晶振,用的是系统内部频率 11M 不要重复创建新帖,集中在一个地方讨论
紧急救助 - 综合讨论 国芯人工智能技术交流网站 - AI32位8051交流社区
不要重复建帖,我把您上个贴发的代码和回帖移过来,那个贴我帮您删掉啦~
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;
}
}
}
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]