Ai8051U第六集 小伙伴继续来扩展知识了
本文带图链接
今天冲总讲的挺好,把编写按钮触发的问题都讲了下,但是总感觉冲总在做最后一次实验的时候,貌似程序没下进去(也可能是视频的声音有延迟,导致按下声音不同步,导致看上去灯变化延迟)。
对于初学者,即使物理学的挺好,也会对高低电平的知识有误区,因为大家都认为高低电平的组合可能是方形波,但是实际上高低电平是有一定范围的。下图我从视频截图了,说明了高低电平的范围。
以VCC3.3伏为例,打开了施密特触发器,高电平应该是1.18V<=X<=3.3;低电平应该是0<=x<=0.99;

1.问题:什么是施密特触发器呢?
1.回答:
施密特触发器是由美国科学家奥托·赫伯特·施密特(Otto Herbert Schmitt)于1934年发明,当时他只是一个研究生,施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。施密特触发器(英语:Schmitt trigger)是包含正反馈的比较器电路,这里大家要记住trigger这个单词上位机经常用到,你会发现做触发经常提到“触发器”,例如数据库、布局响应都会提到。
对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位时所对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟滞现象,表明施密特触发器有记忆性。从本质上来说,施密特触发器是一种双稳态多谐振荡器。施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器
2.问题:打开施密特触发器有什么作用?
2.回答:单片机上关于打开和关闭施密特触发器的主要区别体现在以下几个方面:
一、功能实现上的区别打开施密特触发器:
- 当单片机需要读取I/O引脚的电平状态时,施密特触发器能够将电压信号转换为0或1,并存储在输入数据寄存器中。
- 施密特触发器具有两个临界电压(正向阈值电压和负向阈值电压),形成一个滞后区域,有效防止在滞后范围内的噪声干扰电路的正常工作。
- 施密特触发器可以作为波形整形电路,将模拟信号波形转换为数字电路能够处理的方波波形。
关闭施密特触发器:
- 关闭施密特触发器后,单片机将直接读取I/O引脚的原始电压信号,而不再经过施密特触发器的整形和滤波。
- 此时,单片机对输入信号的噪声抑制能力降低,可能导致输入信号波动较大时,单片机的输出电平频繁跳变。
二、系统性能上的区别打开施密特触发器:
- 由于施密特触发器具有滞回特性,能够抗干扰,因此可以提高系统的稳定性和可靠性。
- 在一些需要精确控制输入电平的应用中,施密特触发器能够提供更加稳定的输入信号。
关闭施密特触发器:
- 关闭施密特触发器后,系统的抗干扰能力降低,可能导致系统在某些噪声较大的环境下无法正常工作。
- 同时,由于输入信号没有经过整形和滤波,可能会导致单片机的处理速度降低,因为需要处理更多的噪声信号。
三、功耗上的区别打开施密特触发器:
- 施密特触发器在工作时会消耗一定的功耗,但相对于整个系统的功耗来说,这部分功耗通常是可以接受的。
关闭施密特触发器:
- 关闭施密特触发器后,虽然可以减少施密特触发器本身的功耗,但可能会因为输入信号的波动而增加单片机的处理功耗,因为单片机需要更频繁地处理输入信号的变化。
四、应用场景上的区别打开施密特触发器:
- 施密特触发器适用于需要抗干扰、波形整形或精确控制输入电平的应用场景,如遥控接收线路、传感器输入电路等。
关闭施密特触发器:
- 关闭施密特触发器可能适用于一些对功耗要求较高、对输入信号波动不敏感或需要高速处理输入信号的应用场景。但需要注意的是,在这种情况下,需要采取其他措施来抑制输入信号的噪声和波动。
综上所述,单片机上打开和关闭施密特触发器在功能实现、系统性能、功耗和应用场景等方面都存在明显的区别。在实际应用中,需要根据具体需求和系统要求来做出合理的选择。
3.问题:什么是C语言的标准,比如视频提到的C99? 3.回答:到目前位置C语言为了寻求规范,例如书写规范,已经发布了多个规范,如:C89 C90 C99 C11 C17,其中C89和C90可以认为是一个,因为C89是C语言最早发布的标准,后来国际上引用C89重新以国际的名义发布了C90,可以认为C89是1989年发布,然后国际1990抄来重新发布,仅仅发布的机构不同,后来经过认为的使用发现了一些问题,所以发布了C99,也是目前被众多编译器支持的标准,但是也有人说C11是被广泛支持的标准,这个看具体情况,用就完了。那到最近发布的就是C17,由于大家都很忙,C17支持的并不好。
4.问题:上图的_nop_() 是啥意思? 4.回答:_nop_ 是延迟函数,即空操作函数,汇编语言里也有nop的指令,意思说一个机器周期的啥也不干就是一个_nop_(),例如: 假设单片机 12M 晶振,晶振周期1/12微秒,一个机器周期包含12个晶振周期,所以12M晶振时机器周期 = 12x(1/12)us = 1us,所以12M 晶振中一个 nop 表示延时1us;6M 晶振中延时2us,24M 晶振中延时 0.5 us 那么上面的delay20ms函数,为何使用两个nop加上while的组合呢,我个人认为,单靠while来消耗时间不能精确到20ms,所以需要和nop配合才能到20ms,我不知道说的对不对,还请懂得大神聊聊啊。 对于下面的注释作用,其实就是确保nop和while的执行在预期的时间范围内,如果不打开,那nop和while的时间就不敢保证20ms了。


最后说一下关于while的使用,按钮中使用while让程序停止,实在是实属无奈,由于使用这种会导致cpu被卡住,所以导致程序不连贯,所以我们一般使用中断的方式来解决这个问题,下一集冲总就会讲解其中,我们敬请期待。
bye bye
|