跳转到主要内容

单片机

【视频】单片机原理及应用12

kelly /

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机C语言易错知识点,记住它们会让你事半功倍!

kelly /

在进行单片机开发时,经常都会出现一些很不起眼的问题,这些问题其实都是很基础的C语言知识点,是一些小细节。

但是正是因为很基础,又都是小细节,所以我们往往容易忽视它们。结果有时候我们会花很长的时间纠结一个问题,迟迟找不到问题的所在。

当发现原因竟然是这么的简单和不起眼时,大家都会感到痛不欲生。这些问题要记录下来,时刻提醒自己!!

<strong>1、! 和 ~ 不一样</strong>

! 是逻辑非符号,~ 是位取反符号。

对IO口某个引脚赋值时不要错用 ! 如

<center><img src="http://mm32.eetrend.com/files/2016-11/wen_zhang_/100002557-8204-1.png&q…; alt=""></center>

一款优秀的单片机必须考虑这7条!

kelly /

单片机的选型是一件重要而费心的事,如果选型得当,则做出来的产品就会性价比较高,且工作稳定;反之,则可能会造成产品成本过高或影响产品正常运行,甚至可能根本就达不到预先设计要求。一般来说,总的选型原则是:(1)“芯片含有(功能或数量)略大于设计需求”,“设计需求尽可能(用)芯片完成(少用外围器件)”;(2)“选大(大厂)不选小,选多(供应量多)不选少,选名(名牌)不选渺(飘渺,不知详情的厂子),选廉(廉价)但要好(质量保证)”。具体要从单片机应用的技术性、实用性和开可发性等方面来考虑:

<strong>1、内存</strong>

单片机FLASH的容量根据程序的大小确定,FLASH容量必须大于代码量。举例来说,如果你的代码量大约50 KB,那么建议你选择FLASH容量为64 KB或128 KB的单片机。

<strong>2、速度</strong>

教你如何八步练成单片机大侠

kelly /

学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。

<strong>第一步:数字I/O的使用</strong>

使用按钮输入信号,发光二极管显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮,这就是数字电路中组合逻辑的功能,虽然很简单,但是可以学习一般的单片机编程思想,例如,必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出输出功能。每使用单片机的一个功能,就要对控制该功能的寄存器进行设置,这就是单片机编程的特点,千万不要怕麻烦,所有的单片机都是这样。要注意的是两个功能使用同一组I/O口,比如LCD和LED例程众都是使用PB这一组的,如果两者结合,会有冲突,达不到预期的效果,建议不同的模块使用不同的IO口。

<strong>第二步:定时器的使用</strong>

【视频】单片机原理及应用11

kelly /

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机外围功能电路控制的基础知识

kelly /

单片机中有象箱子功能一样的地方,我们称为寄存器,用来暂存数据。寄存器的种类有程序计数器、通用寄存器、以及SFR(特殊功能寄存器)等。

SFR主要用来设定外围功能电路(计数器或串行端口、通用I/O等)的工作方式,确认其工作状况,并对其进行控制的。也就是说SFR并非仅仅只是用来保存数据的“箱子”。通过改变保存在“箱子”里的数据,不仅可以改变外围功能电路的动作方式,而且“箱子”里的数据也将随着外围功能电路的工作状況而改变。

控制外围功能电路的基础知识

下面以通用I/O为例来说明单片机对外围功能电路的控制。通用I/O具有以下功能:

输出功能:可以输出高电平电压或低电平电压

输入功能:可以读出输入到引脚的电压电平

首先来看输出功能的控制。图1中的引脚A是一个通用I/O。

如果向引脚A的寄存器(SFR)

写入0,则引脚A的输出电压将为低电平(0V)。

写入1,则引脚A的输出电压将为高电平(5V)。

单片机的编程语言和开发环境

kelly /

<strong> CPU懂的机器语言</strong>

单片机的CPU从存储器读取程序,但是一次只能读取一条指令,然后解释每条指令,并执行。存储器中保存的内容,不管是程序还是数据,都是二进制代码“0”和“1”组成的字符串。指令二进制代码告诉CPU要做什么,而数据二进制代码则是CPU操作或处理指令时要使用的值。CPU的操作包含加、减运算等指令。这些像密码一样排列的“0”和“1”字符串就是机器语言。比如图1左边显示的就是一个机器语言指令,意思是“将2放入寄存器A(寄存器是CPU内部的储存区域)。

CPU总是按存储器地址的顺序读取指令代码,除非遇到跳跃指令。例如,如果复位后的地址是0000,则从0000开始按0001、0002、0003的顺序读取并执行指令。也可以说,一个程序就是按处理要求排列一系列的机器语言。

CPU只能理解如上所述的机器语言。因此,为了使CPU运行,就必须使用机器语言的程序。但是,机器语言不易为人们识别和读写。因此,人们用了更简单易懂的字符串来代替机器语言,这就是汇编语言。例如,在“给寄存器A赋值2”这样的处理时,如果用汇编语言来表示,就很简单,请看图1的右边部分。汇编语言中,用MOV字符串表示赋值,所以“给寄存器A赋值2”的处理就可用“MOV A,#02”表示。

精妙的单片机非阻塞延时程序设计

kelly /

对于每个单片机爱好者及工程开发设计人员,在刚接触单片机的那最初的青葱岁月里,都有过点亮跑马灯的经历。从看到那一排排小灯按着我们的想法在跳动时激动心情。到随着经验越多,越来又会感觉到这个小灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。

但对于绝大多数人,我们在最最初让灯闪烁起来时大约都会用到阻塞延时实现,会像如下代码的样子:

while(1)
{
LED =OFF;
Delay_ms(500);
LED = ON;
Delay_ms(500);
}

然后,在我们接触到定时器,我们会发现,原来用定时中断来处理会更好。比如我们可以500ms中断一次,让灯亮或灭,其余的时间系统还可以做非常之多的事情,效率一下提升了很多。

这时我们就会慢慢意识到,第一种(阻塞延时)方法效率很低,让芯片在那儿空运行几百毫米,什么也不做,真是莫大的浪费,尤其在芯片频率较高,任务又很多时,这样做就像在平坦宽阔的高速公路上挖了一大坑,出现事故可想而知。

【视频】单片机原理及应用10

kelly /

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机软件定时器的使用方法

kelly /

作者:zhangren_ham

初学者在编写单片机程序时经常会用到延时函数,但是当系统逐步复杂以后(没有复杂到使用操作系统)延时会因为延时降低MCU的利用率,更严重的会影响系统中的“并行”操作例如一个既有按键又有蜂鸣器的系统中,如果要求按下按键发出不同的声音,每次发声时间在1秒-2秒之间, 如果用延时来做代码很简单:

//蜂鸣器发出“哔-哔-哔”声音时间约1s
void BeepFuction(void)
{
unsigned char i;
for(i=0;i<3;i=++)
{
BeepEn(); //开启蜂鸣器
Delayms(220);//延时220ms
BeepDis();//关闭蜂鸣器
Delayms(110);//延时110ms
}
}

当这段代码执行时MCU不可能同时处理按键检查程序因为它大部分时间在执行Delayms()函数中的nop指令,这样就不可能去执行检查按键了(不使用中断时),如果把程序改成流程形式的写法则结果会大为不同,下面先介绍一下基本原理。