- 打卡等级:偶尔看看I
- 打卡总天数:19
- 最近打卡:2025-04-17 21:45:25
中级会员
- 积分
- 262
|
求助:擎天柱写入程序以后,插在电脑USB口运行正常,插在+5V电源上不能运行
一个手控板流水灯,按下P32按钮依次点亮灯,每次按下多一个灯点亮,代码如下:
C
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
#include "intrins.h" //d调用头文件
#define u8 unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535)
u8 buttonPressCount = 0; // 定义一个变量来记录按钮按下的次数
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
u8 i; // 提前声明循环变量
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P_SW2 |= 0x80;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
EA = 1; //IE |= 0X80;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) ; // 如果接收到了数据
{
USB_SendData(UsbOutBuffer,OutNumber); // 发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done(); // 标记接收完成
}
// 任务1:按下P32按钮依次点亮灯,每次按下多一个灯点亮
if( P32 == 0 ) // 判断P32按钮是否按下
{
buttonPressCount++; // 按钮按下次数加1
while(P32 == 0); // 等待按钮松开,防止抖动
}
// 当X=4时,回到待机状态
if(buttonPressCount == 4)
{
buttonPressCount = 0; // 重置按钮次数
P2= 0xFF; // 熄灭所有灯(假设P0口低电平点亮)
}
else
{
// 根据按钮按下的次数点亮对应的灯
for(i = 0; i < buttonPressCount; i++) // 使用提前声明的变量 i
{
P2 = ~(1 << i); // 点亮从P00到P0X的灯
}
}
}
}
在电脑USB口取电程序运行正常,但是在+5V供电的条件下,只亮POUER和VCC两个灯,按下P32没有任何反应,怀疑电源供电质量,分别用台式机电源,手机充电器,78M05、LM2596S-ADJ、AMS1117-5V稳压电路和教学电源(LM2596S-ADJ和教学电源调至5V)供电,还是不能运行程序,中间更换全新擎天柱板载源程序运行正常,更换我自己的程序以后就出现故障。也参考《擎天柱程序电源供电不能运行》擎天柱程序电源供电不能运行https://www.stcaimcu.com/thread-12845-1-1.html(出处: 国芯技术交流网站),注释掉了USB配置,虽然通过编译,但是在电脑USB电源也不能运行了,
|
-
|