我有个关于 STC90C514AD 的 P4 的问题,求助
我司这里用了一批 STC90C514AD 的单片机。在一个机箱里最多使用12块板,每个板上一个单片机。
用了4个引脚作为地址线,地址线由机箱的母版来提供,用来区分这12块。理论上足够,因为 2x2x2x2=16>12。
4个引脚对应 BDN3 BDN2 BDN1 BDN0,这12个位置分别对应地址 0000-1011,也就是10进制的00-11。
地址线从上电开始,就维持电压稳定,不会变化。
实际烧入程序后,发现大部分板是正常的,但有 1/10 的比例的板不正常,它们总是“自以为自己的地址的最高位BDN3是0”,
也就是把它放在9号位置,它自以为是1号位置;把它放在11号位置,它自以为是3号位置。
用电压表去量,那个pin看起来确实是5.0V左右,稳定的。
用单片机程序去测试,“如果BDN3为0,为低电平,则蜂鸣器响一会,再继续”,发现有问题的这几个板,都会响,也就是说程序跑起来,它自以为这里BDN3就是=0.
是我有什么地方设置不对吗?
附图是关于PCB,c程序和Keil的相关位置。
这里是一些关于程序代码的信息
///////////////////////// .c最前面的声明和include
#include "STC90C5xAD.h" //单片机型号的 .h
#include "OLED_0p66.h"//与 OLED 有关的 .h
#include "STC90C58AD_ADC.h"//与 ADC 有关的 .h
#include "string.h"//OLED 用到的某些东西需要这个 .h
#define LED_ON 0 //Led 亮
#define LED_OFF 1 //Led 灭
....
sbit BDN3 = P4^3; //Board Number 4bit 0-15
sbit BDN2 = P0^7;
sbit BDN1 = P0^6;
sbit BDN0 = P0^5;
/////////////////////////// main里关于BDN3的地方
//计算自己的板号 0-15
//boardNumber = (BDN3? 8 : 0) + (BDN2? 4 : 0) + (BDN1? 2 : 0) + (BDN0? 1 : 0);
boardNumber= (BDN3?(0x01<<3):0) |
(BDN2?(0x01<<2):0) |
(BDN1?(0x01<<1):0) |
(BDN0?(0x01<<0):0);
/*
if(!BDN3)
{
BEEP=1;
Delay_300ms(10);
BEEP=0;
}
*/
///////////////////////////STC90C5xAD.h里关于P4的段落
sfr P4 = 0xC0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
关于您提到的STC90C514AD单片机P4口地址线问题,初步分析可能是由于硬件或软件配置不当导致的。首先,建议检查PCB设计,确保地址线(BDN3-BDN0)的电气连接稳定,无虚焊或短路现象。其次,验证上电时地址线的电压稳定性,确保无瞬态波动或干扰。软件方面,检查程序中地址读取的逻辑,确保在初始化阶段正确读取并存储地址值。此外,考虑在程序中加入地址校验机制,以检测并纠正可能的地址读取错误。最后,建议对异常板进行单独测试,以排除个体硬件故障的可能性。通过上述步骤,应能有效定位并解决问题。
[本文内容由国芯人工智能辅助生成,仅供参考] 是否是上电瞬间读取的,如果是,就延时再读外部IO状态
如果单片机初始化速度比外部信号变化速度快,就会初始化错误
DebugLab 发表于 2025-3-3 17:42
是否是上电瞬间读取的,如果是,就延时再读外部IO状态
如果单片机初始化速度比外部信号变化速度快,就会初 ...
BDN3-0 这4个脚,是在上电后约3秒后读取的。
main开始后,有 Delay_300ms() 至少2处,一些别的初始化等,时间应该足够长了,然后再来取值的。
此时距离开始应该已经3秒+了。
void Delay_300ms(u16 Del_300ms)
{
//忘了抄自哪里了
u16 m=0;
for(;Del_300ms>0;Del_300ms--)
{
for(m=6245;m>0;m--)
{
;
}
}
}
P43位置,用示波器看也是稳定在5.1V左右,并无什么变化。
今天发现的情况是,把一个现象不正常的板上的单片机卸下来,换个现象正常的单片机,居然就好了。
总觉得不大可能是单片机坏了,上周加这周,已经有5个这个现象了。
>_< VincyChan 发表于 2025-3-4 11:53
BDN3-0 这4个脚,是在上电后约3秒后读取的。
main开始后,有 Delay_300ms() 至少2处,一些别的初始化等, ...
单片机VCC和GND接5.6V 5W稳压管,IO串330Ω电阻 先判断脚位是否正常,如果这个脚位出现损坏的话,需要排查产品使用过程中是否存在过流/过压冲击,用示波器测量VCC与P43脚位电平,看看是否会出现过压冲击脉冲。
页:
[1]