51单片机注意事项

下面的51均指的是STC89C52RC芯片,别的51是否也是这样有待验证 io相关注意事项 51在读取io时需要设置io口为高电平,然后再读取 8051(包括 STC89C52RC)的 I/O 口是开漏(open-drain)输出而非推挽(push-pull)输出。 开漏输出只能主动驱动低电平(0),不能主动驱动高电平(1)。要实现高电平,开漏输出需要通过外部的拉升电阻(通常连接到电源 VCC)实现。这也就是为什么在使用开漏输出的 GPIO 引脚时,你需要首先将它设置为高电平,然后才可以正确读取输入的低电平。 相比之下,推挽输出可以主动驱动低电平和高电平。这就使得在使用推挽输出时,不需要首先设定为高电平来正确读取低电平。 这就是为什么你在使用 STC89C52RC 或者其他 8051 系列的微控制器时,必须首先将引脚设为高电平,只有这样,你才能正确地读取被设为低电平的输入。因此,理解开漏和推挽输出的区别对于理解这个问题是非常重要的。每种类型的输出方式都有其优缺点,需要根据具体应用来选择。 内置EEPROM 在写入前需要先擦除 原因是内部的EEPROM是用Flash来做的,由于Flash的物理性质,只能从1变0,不能从0变1,所以先要擦除为0xFF, 然后在写入相应的数据,注意擦除是按扇区来擦除的 Flash存储器使用了浮动栅层的原理来存储数据,在晶体管中存储了电荷量,代表了0或1的状态。当需要将存储单元从1改为0时,可以通过施加适当的电压,将电荷从浮动栅层中移除,使得晶体管的导通特性被改变为阻断状态,表示0。 然而,将存储单元从0改为1是不可行的,因为在Flash存储器中,写入操作是通过电子隧穿来实现的。当试图将存储单元从0改为1时,需要将电子引入浮动栅层。但是,由于浮动栅层与控制栅层之间的绝缘层,电子无法通过正常的电子隧穿过程引入到浮动栅层中,因此无法实现将0写成1的操作。 为了将存储单元从0改为1,需要执行擦除操作。擦除会将整个存储单元中的电荷移除,将其重置为初始状态,通常是全1。然后再通过编程操作将所需的位写入为1。 由于擦除操作会擦除整个存储单元的数据,而不是单个位或字节,因此对Flash存储器进行写入操作时,通常需要将整个存储块或页擦除,然后再编程所需的位。这种擦除和编程的特性使得Flash存储器在数据写入方面有一定的限制和特殊性。 LCD1602异常 是否是每个阶段的延迟不够 调高延迟试一下是否正常 多写一些字符 如果出现屏幕位置不同,可能是算法问题 乱码(比如全屏写'1’,但是显示的是其他内容) 可能是虚焊 判断方法: 写一个程序,使io口高低电平切换,如果使用示波器可以间隔短点间隔时间, 如果使用万用表让间隔长一点比如5s切换一次电平 使用示波器或者万用表分别测量每个io对应的LCD接口,看是否有电平切换, 可以判断接口是否异常 再看芯片对应异常的io引脚如果输出是正常,则说明虚焊,如果引脚输出异常,则可能是芯片坏了

<span title='2023-07-27 16:14:07 +0800 +0800'>七月 27, 2023</span>

三极管集电极电流产生原理

三极管作为一种重要的半导体器件,其集电结反向偏置时表现出的导电性违背了PN结的传统认知,这一现象的原因一直令人感到好奇。在本文中,笔者将通俗解释三极管反向偏置下集电结仍可导电的科学机理。 我们知道,PN结反向偏置时,少数载流子形成的漏电流非常微弱。但三极管的情况则完全不同,反向偏置的集电结也会产生明显的集电电流Ic。这主要归因于三极管独特的内部结构。 需要强调的是,这种反向偏置下的电流并非由反向击穿产生,而是有别于PN结的全新机理。三极管通过基极控制发射极附近的电子浓度。当基极电流注入电子时,发射极区域会聚集大量电子。这些电子可以跨越集电结的反向势垒,形成显著的反向漏电流。随着基极电流增大,发射极电子浓度提高,反向漏电流Ic也随之增加。 可以看出,三极管反向偏置下集电结的导电性,是由基极注入产生的大量电子引起的。这种机理完全不同于PN结中仅依赖少数载流子的反向漏电流。正是三极管的独特结构及工作原理导致了反向偏置下也存在明显Ic的现象。 值得注意的是,PN结在正向偏置时,电流主要由多数载流子形成;而反向偏置时,则由少数载流子形成微弱的电流。三极管反向偏置下Ic的产生,则利用了基极注入的大量电子,从电流形成机理上破除了PN结的限制。 通过解析三极管反向偏置导通的科学机理,我们加深了对其工作原理的理解。这也展示了半导体器件的奥秘比单纯PN结更为复杂。希望本文能够满足读者对这个有趣现象的好奇心,并成为理解半导体物理的一个窗口。 注意: 在严格意义上说PN并不能单向导电,我们所说的单向导电只是因为反向电流非常微弱 PN结在正向偏置时,电流主要由多数载流子形成;而反向偏置时,则由少数载流子形成微弱的电流

<span title='2023-07-19 16:43:28 +0800 +0800'>七月 19, 2023</span>

复位电路电容选择

${T = R C}$ 变换为 ${C = \frac T R }$ 其中T为时间 R为电阻 C为电容 以1ms复位时间来算, 如果电阻选10kΩ那么 $C = \frac {0.001s} {10000Ω} = 100nF$

<span title='2023-06-08 11:06:21 +0800 +0800'>六月 8, 2023</span>

外部中断和定时器

都说学习硬件是学习计算机组成原理的快速途径,我也入坑了,这里记录一些学习中初学者可能感觉难受的难点 一个MCU就好比一个很复杂的函数,他需要两种初始化,一种就是硬件初始化(也就是最小系统+外设电路), 一种是软件初始化(设置寄存器来使用某些功能) 中断 其实也没什么难的,难的是和GPIO那种简单方式的对比,都是固定套路 中断套路 编写好中断处理函数 设置触发方式(低电平触发或者下降沿触发) 开启某一中断 开启总中断 定时器 套路 设置定时器模式 设置定时器初值 开启定时器 (到目前定时器已经可以使用了) 定时器中断开启 (如果还想定时中断的话,需要剩下3,4两步) 总中断开启 中断优先级可以进行调整

<span title='2023-06-06 11:09:27 +0800 +0800'>六月 6, 2023</span>