跳转到主要内容

单片机

大神带你玩转单片机:外部中断详解

cathy 提交于

今天开始我们正式进入中级阶段的学习:中断系统。

<strong>什么是中断</strong>

首先来讲一下什么是中断:当程序执行到某个地方时,发生了特殊的事件或请求,CPU暂停执行当前程序,转而去处理上述事件或请求,处理完毕后在返回断点继续执行当前程序。

用我们生活中的事情来举个例子。假如你正在吃饭(当前程序),突然接到了快递员的电话让你现在下去拿快递(中断请求),你回答:“好的”(中断响应),然后暂停吃饭下去拿快递(中断处理),拿完快递上来继续吃饭(执行完中断返回执行当前程序)。

<center><img src="http://mouser.eetrend.com/files/2020-02/博客/100047762-90842-1.png&quot; alt=“图1" width="600"></center><center><i>图1</i></center>

大神带你玩转单片机之机械按键详解

cathy 提交于

今天,我们来讲解一下板子上的一个模块——机械按键。

机械按键分为两种使用模式:独立按键和矩阵按键。这两个模式是通过板子上的一个硬件部分来切换的,使用方法不相同,但原理都差不多,在大家使用小红板学习的时候这方面都应该也有接触过。没错,它与小红板上的使用方式几乎是相同的。

相信很多人在学习的时候,都觉得按键很简单对吧?但是大家要注意的是,想要写出一个完全没bug(按键能够特别灵敏地判断状态)的按键其实并不简单。而且它总是结合数码管、LED灯等各种模块来配合使用的,按键各种按下状态中实现各种功能,各种逻辑写起来也是有一定难度的。

好的,话不多说了,接下来我会为大家分别讲解一下独立键盘和矩阵键盘基础知识。

<strong>机械按键原理图</strong>

我们先来看一下按键部分的原理图:

OBG在单片机中的解释

cathy /

OBG在单片机中的解释STM32单片机的内核(Cortex-M3)含有硬件调试模块,支持多种复杂的调试操作,硬件调试模块允许内核在取地址或者访问数据时停止-这就是我们在单片机开发和过程中可以在线仿真的保障。内核在停止时,其内部的状态与外部状态都是可以进行查询的,- 在单片机仿真调试中受到中断,通常为人为设置的断点,此时单片机中所有的变量,以及程序指针,CP,等地址指针都可以查询到状态。在调试过程中,设置了断点,当程序停止运行时,我们可以接着进行单步执行,跳出函数,进入函数等操作。还可以进行复位,使寄存器都回归到初始复位状态。

OBG调试接口

<ul>
<li>串行接口</li>
<li>JTAG调试接口</li>
</ul>

你不可不知的STC单片机中特殊用法的IO

cathy 提交于

在<a href="http://mouser.eetrend.com/blog/2020/100047410.html">上一篇</a>推文中,我们将了STC单片机中IO的四种工作模式。忘记的老伙伴可以再去看看啊。那今天说的IO的特殊用法又是什么鬼。简单说就是因为STC单片机的IO有好多都带有复用功能,在单片机上电复位后,这些复用功能引脚的默认状态有一些特殊的规定或处理办法,若你不知晓,很有可能出现灾难性的问题,下面我们就来具体说说这些特殊的IO的用法。

在正常情况下,51单片机在上电复位后,所有IO口默认都为高电平,都工作在准双向IO模式,但是STC15系列以后的单片机出现了IO的4种工作模式,一个带有复用功能的IO在上电复位后就会出现不是准双向IO模式的情况,这些引脚在使用时就需要我们多多关照啦。

<strong>1、PWM相关的引脚</strong>

一文解决STC51单片机的IO配置问题

cathy 提交于

我们人类可以通过连接手脚上神经网络,肌腱,控制着我们的肌肉做出各种动作,完成各种造型。那单片机里的肌腱和神经就是今天我们要讲的主角----单片机的IO口。

我们学习单片机,到底学什么呢?最终落脚点,就是落在单片机的IO口上,其实最终就是操作单片机的IO口,什么串口通讯,IIC通信协议,中断,定时器,最终在单片机上体现出来的还是我们对单片机IO口的操作。既然那么重要,今天我们就来好好的说一说单片机的IO口。

说起单片机的IO口,大家肯定会笑话小编,这么简单的东西,还要你说。对,它是简单,看遍你是个人写的单片机教程,最开始讲编程就是从操作单片机IO口开始,都是从点亮一个LED灯开始,是的,点亮一个LED灯,就是对单片机IO的最简单的操作,要么给高电平,要么给低电平,这也是操作IO的唯一的两个方法。怎么说?举个例子:要在某个IO上输出PWM信号,其实就是有规律的在这个IO上交替的给高低电平,给的速度快慢决定了PWM信号的频率,给的高电平的时间所占一个高低电平周期的多少,决定了这个PWM信号的占空比。这么一说,高大上的PWM信号是不是就简单多了。

说了这么多,下面我们具体来说STC51单的IO的配置和各个模式的区别。

I/O口是单片机与外界联系的通道

cathy 提交于

I/O口是单片机与外界联系的通道。它可对各类外部信号(开关量、模拟量、频率信一号)进行检测、判断、处理,并可控制各类外部设备。单片机通过I/O口感知外界的存在,而外界也通过I/O口感知单片机的存在。

<center><img src="http://mouser.eetrend.com/files/2020-01/博客/100047115-88724-1.jpg&quot; alt=“” ></center>

现在的单片机I/O口已经集成了更多的特性和功能。因此,在学习某一款单片机时,需要先了解其I/O口具有哪些特性和特殊的应用功能(不同的单片机是有所差别的),并因地制宜设计外围电路、编写控制软件,充分发挥该I/O口的优势。

单片机应用中11项易于疏忽的小常识

cathy /

1、MCU有串口外设的话,要加上电平转换芯片(如MAX232、SP3485就是RS232和RS485接口)。

2、RS485采用差分信号负逻辑,+2V~+6V表示0,-6V~-2V表示1。有两线制和四线制两种接线,四线制是全双工通讯方式,两线制是半双工通讯方式。RS485一般采用主从通讯方式,即一个主机带多个从机。

3、Modbus是一种协议标准,可以支持多种电气接口(如RS232、RS485),也可以在各种介质上传输(如双绞线、光纤、无线)。

4、很多MCU的串口都开始自带FIFO。收发FIFO主要是为了解决串口收发中断过于频繁而导致CPU的效率不高的问题。如果没有FIFO,则每收发一个数据都要中断处理一次;有了FIFO,就可以在连续收发若干个数据(根据FIFO的深度而定)后才产生一次中断去处理数据,大大提高效率。

5、有些工程师在调试自己的系统时,一出现系统跑飞,就马上引入看门狗来解决问题,而不去思考程序为什么会跑飞。程序跑飞可能是程序本身的bug,也可能是硬件电路的问题(本身就是易受干扰或自己就是干扰源)。通常建议在调试自己的系统时,先不加看门狗,等完全调试稳定了再补上(危及产品安全、人身安全的除外)。

6、如何区分有源蜂鸣器和无源蜂鸣器?

对单片机地址空间和堆栈的理解

cathy /

data—可寻址片内ram 0x00-0x7f
bdata—可位寻址片内ram
idata—可寻址片内ram,允许访问全部内部ram 0x00-0xff
padata—分页寻址访问片外ram
xdata—可寻址片外ram 0x0000- 0xffff

程序存储区单片机存储器有ROM跟RAM之分,RAM存放中间结果,数据和经常变换的代码,ROM存放code。51单片机采用的是哈弗结构,即数据跟代码拥有单独的地址空间。存储器可以分为程序存储器(EEPROM、FLASH之类)、内部数据存储器(ram)、SFR、位地址空间和外部数据存储器。

<center><img src="http://mouser.eetrend.com/files/2019-12/wen_zhang_/100046474-86336-0.jp…; alt=“” width="600"></center>

单片机实现温度检测电路的设计

cathy /

本文提供了一种利用单片机多余I/O口实现温度检测电路的低成本方法。该电路非常简单,易于实现,并且适用于几乎所有类型的单片机,其电路如下图所示:

<center><img src="http://mouser.eetrend.com/files/2019-12/wen_zhang_/100046390-85932-2.pn…; alt=“” ></center>

<strong>图中:</strong>

P1.0、P1.1和P1.2是单片机的3个I/O脚;
R<sub>K</sub>为100k的精密电阻;
R<sub>T</sub>为100k±1%的热敏电阻;
R<sub>1</sub>为100Ω的普通电阻;
C1为0.1μ的瓷介电容。

<strong>工作原理:</strong>

单片机C语言如何产生随机数?

cathy /

随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值,这种做法也是可行的;或者预先写好一个随机数表,然后从表中取数据也是可以的。

KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。

C语言中有三个通用的随机数发生器,分别为rand函数、random函数、randomize函数,但是rand函数产生的并不是真正意正义上的随机数,而是一个伪随机数,是根据一个称之为种子的数为基准以某个递推公式推算出来的一系数。当这系列数很大的时候,就符合正态分布,从而相当于产生了随机数。

但这不是真正的随机数。当计算机正常开机后,这个种子的值就定下来了,除非系统遭到破坏。为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。在调用rand函数产生随机数前,必须先利用srand()设好随机数种子;如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。

<strong>单片机产生随机数的两种方法</strong>