单片机学习编程
问:什么是单片机?
答:可编程电子设计的产物,也就是一个小芯片。能够用来编程,实现不一样的功能。
把具备数据处理能力的中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上。
单片机的种类繁多,通常按单片机数据总线的位数进行分类,主要分为4位、8位、16位、32位;
那什么是数据总线?:总线的概念提出是由于在计算机电路连线中,各微型处理器和各器件间单独连线的话数量太多,因此引入总线概念。各个器件共同享用连线,全部器件的8根数据线所有连接到8根公用的线上,即至关于各个器件并联起来。可是,这样会存在问题:若是两个器件同时发送数据,一个为1,一个为0.那接收方收到的是什么呢?因此,控制线就是为了这种状况出现的。它使器件分时工做,任什么时候候只能有一个器件发送数据。故:器件的数据线也就被称为数据总线,器件全部的控制线被称为控制总线。顺便一记:单片机的内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址是以电信号的形式给出,因为存储单元比较多,因此,用于地址分配的线比较多,这些线称为地址总线。
1)4位单片机 适合用于控制单一的小型电子类产品,如:PC机的输入装置(鼠标、游戏杆)电池充电器
2)8位单片机 目前品种最多,应用最广。主要分为51系及非51系。
3)16位单片机 操做速度及数据吞吐能力比8位有所提升;
4)32位单片机 通常均指ARM单片机
简言之:可编程、可处理数据、可实现不一样功能的一块芯片;而且种类繁多,8位(51系)跟32位(ARM)单片机占主市场
问:单片机最小系统基本拥有什么?
答: 简言之:单片机(核心)、电源(提供能量)、晶振(提供节奏)、复位电路;
51单片机最小系统:由一系列模块组成;
复位系统:当引脚9出现2个机器周期以上高电平时,单片机复位,程序从头开始运行;
时钟系统:由振荡器电路产生频率等于晶振频率,这时用的是外界晶振。也能够由外部单独输入,此时XTAL2脚接地,时钟信号由XTAL1输入;
电源系统:VCC和GND引脚,供电电压4—5.5V。缓存
问:RAM与ROM的区别?
答:单片机一个做用就是数据信息的处理,而在处理数据的过程当中,须要一些“存储器”来存放这些数据。
存储器物理实质就是一组或者多组具有数据输入/输出和数据存储功能的集成电路,用于进行设备缓存或保存同定的程序及数据。存储器按存储信息的功能不一样,分为了只读存储器(ROM)和随机存储器(RAM);
ROM:它的信息一次写入后只能被读出,而不能被操做者修改或者删除。通常用于存放固定的程序或数据表格。可是,”只读“这个概念有时候能够被一些新特性的器件颠覆。
ROM分类:通常分为三类
1) 固定内容ROM;采用掩模工艺制做,其内容在出产前就按要求固定,用户没法修改。经常使用来存储固定的程序和数据。如:在计算机中用来存放监控、管理等专用程序。
2) PROM:可一次编程ROM。这种存储器在出厂时未存入数据信息。单元可视为全0或者全1,用户可按要求将所需存入的数码一次性的写入,一旦写入就不能在改变了。PROM在每个存储单元中都有快速熔断丝,在用户写入数据前,各存储单元至关于存入1,写入数据时,将应该存0的单元,通以足够大的电流脉冲将熔断丝烧掉便可。
3) EPROM:是为了克服PROM只能一次写入的缺点,出现了可屡次擦除和编程的存储器。这种存储器在擦除方式上有两种:
① EPROM(电写入紫外线擦除的存储器)
它与ROM不一样点在于,它能够用特殊的装置擦除或重写其中的内容。
什么是特殊装置?所谓特殊的装置就是必须把芯片从电路板上拔下,将存储器上面的一块石英玻璃窗口对准紫外灯光照射数分钟,使存储的数据消失。擦除时间大约为10min-30min,视型号不一样而异。为方便擦除操做,在器件外壳上装有透明的石英盖板,便于紫外线经过。在写好数据之后应使用不透明的纸将石英盖板遮蔽,以防止数据丢失。数据的写入可用软件编程,生成电脉冲来实现。
② 闪存FLASH(电写入电擦除的存储器)
闪速存储器,又称E2PROM。它是彻底非易失的,能够在线写入,而且能够按页连续字节写入,读出速度快。擦除时不须要紫外线,只要加入10ms、20V左右的电脉冲便可完成擦除操做。擦除操做其实是对E2PROM进行写1操做,所有存储单元的均写为1状态,编程时只要对相应部分写为0便可。
RAM:它就是咱们平时说的内存,主要用来存放各类现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或者做堆栈(特色:先进后出,后进先出)用。它的存储单元根据具体须要能够读出或者改写。
二者区别:RAM只能用于暂时存放程序与数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或者断电后仍然会保留下来。
简而言之:相同点它们都是用来存储数据的
不一样点存储数据的方式与数据能不能在二次加工不一样
问:为何RAM一旦电源关闭或发生断电,数据就会丢失?而ROM不会?
答:RAM使用寄生电容充放电来表示0和1,断电后电容放电,数据就消失了。而ROM用MOS管中间的一个绝缘体来储备电子,能够长期保存数据。
问:单片机I/O口的功能和做用?
答:I/O是input/output的缩写,即输入输出端口。是单片机对外部实现控制和信息交换的必经之路,是一个过渡的大规模集成电路,用于信息传递过程当中的速度匹配和加强单片机的负载能力。I/O端口能够实现和不一样外设的速度匹配,以提升CPU的工做效率,能够改变数据的传送方式。如:内部并行总线与外部设备串行数据传送的转换。
一、I/O端口分为串行口与并行口:
1) 串行I/O端口一次只能传送一位二进制信息
2) 并行I/O端口一次可传送一个字节的数据。(1字节等于8位)
访问并行I/O端口的方法:字节地址访问、按位寻址;
二、MSC-51单片机有四个并行端口:P0/P1/P2/P3;每一个端口都有八条端口线,用于传送数据或地址信息。因为每一个端口的结构各不相同,所以它们的功能和用途上差异颇大。
三、每一个端口都由一个八位数据锁存器和一个八位数据缓冲器组成。其中八位数据锁存器的端口与P0、P一、P二、P3同名,属于21个特殊功能寄存器中的4个,对应内部RAM地址分别为80H、90H、A0H、B0H。进行数据输出时,8个数据锁存器对端口引脚上输入数据进行锁存。输入数据时,8个数据缓冲器用于对端口引脚上输入数据进行缓冲。
端口 访问地址 位地址范围 是否双向I/O 负载能力
P0(P0.7-P0.0) 80H 80H-87H 是 8个TTL
P1 90H 90H-97H 准双向 4个LSTTL
P2 A0H A0H-A7H 准双向 4个LSTTL
P3 B0H B0H-B7H 准双向 4个LSTTL
P0的功能:
组成:一个输出锁存器(D型触发器)、两个三态门缓冲22(控制读引脚或读锁存器)与门和多路开关MUX组成的输出控制电路。
用于传递I/O(输入/输出)数据
P0口的多路开关的输入有两个:地址/数据输出和锁存器输出/Q,多路开关的切换由内部控制信号控制。
P1的功能:
仅用于传递I/O(输入/输出)数据。
P2功能:
一、做为通用I/O使用
二、地址总线用于输出片外存储器的高8位地址
P3功能:
一、 做为通用I/O使用
二、 做控制用
a) P3.0-RXD 串行数据接收口
b) P3.1-TXD串行数据发送口
c) P3.2INTO外中断0输入
d) P3.3-INT1外中断1输入
e) P3.4-T0 计数器0计数输入
f) P3.5-T1 计数器1计数输入
g) P3.6-WR 外部RAM写选通讯号
h) P3.7-RD 外部RAM读选通讯号数据结构
简言之:能够看出I/O口最主要的功能用来与外部器件实现数据信息的交互、速度匹配、数据传送方式和加强单片机的负载能力。它在二者之间扮演桥梁的做用,单片机拥有着串行与并行接口。每一个种类的单片机的不一样并行口也有着各自不一样的功能。
问:常见的时钟电路有哪些?
答:先了解一下什么是时钟电路?
时钟电路就是产生像时钟同样准确运动的振荡电路,任何工做都按时间顺序。用于产生这个时间的电路就是时钟电路。
组成:晶体振荡器、晶震控制芯片和电容组成。
如今流行的串行时钟电路有:DS130二、DS130七、PCF8485等
它们的特色:接口简单、价格低廉、使用方便。
DS1302:具备涓细电流充电能力的电路,主要特色:采用串行数据传输,可为掉电保护电源提供可编程的充电功能,而且能够关闭充电功能。采用普通32.768KHz晶振。
问:为何要使用PLL?
答:PLL(Phase Locked Loop):锁相环电路。用来统一整合时脉讯号,使高频器件正常工做。如:内存的存取资料等。PLL用于振荡器中的反馈技术。许多电子设备要正常工做,一般须要外部的输入信号与内部的振荡信号同步。通常的晶振因为工艺与成本缘由,作不到很高的频率,而在须要高频应用时,有相应的器件VCO,实现转成高频,但不稳定,故利用锁相环路就能够实现稳定且高频的时脉冲讯号。
什么是时脉:指同步电路中时钟的基础频率,它以(若千次周期每秒)来度量,单位是(Hz)
总之:PLL能够同步频率,相位正交。倍频、变频。
问:怎样去选择合适的晶振频率?
答:一、根据使用须要肯定。好比:若是要产生标准的串口波特率,应使用11.0592MHz。若是要让51单片机产生整数的时钟频率可以使用12MHz或者24MHz单片机。
二、还有就是根据单片机自己的参数,不要选择太高的频率,不然会工做不稳定。好比:At mega8L-8PU,这个单片机后面一个8的意思就是建议最大工做频率不要超过8MHz,若是超过8MHz不大于16MHz,能够选用Atmega8L-16PU。固然,非要让At mega8L-8PU使用大于8MHz的频率,也能够,属于超频使用,至关于咱们电脑的CPU超频,会工做不稳定。oop
问:有源晶振和无源晶振哪一个更好?
答:无源晶振就是一个晶体,必需要结合外围电路构成一个振荡器才能输出特定频率的信号,而这个振荡器是须要提供电源的。像MCU能够用无源晶振是由于其内部集成有构成振荡器的电路,晶体很差集成就只好外加了。
有源晶振才是真正意义上的一个振荡器,它里面包含了晶体和外围电路,只要外部提供一个电压源,就能够直接输出信号。
因此,有源晶体明显比无源晶体更好。学习
问:什么是时钟周期?机器周期?指令周期?它们之间的关系?
答:一、时钟周期又叫作振荡周期;单片机内部时钟电路产生(或外部时钟电路送入)的信号周期,单片机的时序信号是以时钟周期信号为基础而造成的,在它的基础上造成了机器周期、指令周期和各类时序信号。定义为时钟脉冲的倒数(能够这样理解:时钟周期就是单片机外接晶振的倒数,例如:12M的晶振,它的时钟周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动做。
二、计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每个阶段完成一项工做。例如:取指令、存储器读、存储器写等,这每一项工做称为一个基本操做。完成一项基本操做所须要的时间成为机器周期。通常状况,一个机器周期由若干个S周期(状态周期)组成。机器周期是单片机的基本操做周期,每一个机器周期包含S一、S二、……S6这6个状态,每一个状态包含两拍P1和P2,每一个拍为一个时钟周期(振荡周期)。所以,一个机器周期包含12个时钟周期。依次可表示为S1P一、S1P二、S2P一、S2P2……、S6P一、S6P2。
三、指令周期:计算机从取一条指令开始,到执行完该指令所须要的时间称为指令周期。不一样的指令,指令长度不一样,指令周期也不同。但指令周期以机器周期为单位,指令不一样,所需的机器指令也不一样。
51单片机指令根据指令长度与执行周期分为:
1) 单字节单周期指令
2) 单字节双周期指令
3) 双字节单周期指令
4) 双字节双周期指令
5) 三字节双周期指令
6) 一字节四周期指令
总结:时钟周期是最小单位,机器周期须要1个或者多个时钟周期,指令周期须要1个或者多个机器周期;机器周期是指完成一个基本操做的时间。指令周期是CPU的关键指标,指取出并执行一条指令的时间。通常以机器周期为单位,分单指令执行周期、双指令执行周期等。机器周期是完成一个基本操做的时间单元。时钟周期是CPU的晶振的工做频率的倒数。操作系统
看门狗相关问题设计
问:看门狗是什么东西?有什么做用?
答:看门狗(WDT)watchdog timer是一个定时器电路(通常有一个输入和一个输出),开启看门狗定时器以后(好比定时200ms),在单片机程序中每隔必定时间(小于200ms)要“喂狗(输入)”一次,即:将看门狗定时器清零。这样作的用处是,一旦单片机程序跑飞(发生死循环),没有在定时的时间以内去“喂狗”,那么定时达到200ms时,看门狗自动将单片机复位(输出)。
目的:对一些程序潜在错误和恶劣环境干扰等因素致使系统死机而在无人干扰状况下自动恢复系统正常工做状态。
问:什么是复位?复位的方式有哪些?
答:复位是使中央处理器(CPU)和内部其余部件处于一个肯定的初始状态,从这个状态开始工做。
方式:上电复位和按钮复位
问:看门狗的原理?
答:工做原理:在系统运行之后就启动看门狗计数器,此时看门狗就开始自动计时,若是达到必定的时间还不去给它进行清零,看门狗计数器就会溢出从而引发看门狗中断,形成系统的复位。
为何会溢出呢?
由于看门狗是一个计数器,而计数器位数有限。可以装的数值也就有限(好比8位的最多装256个数,16位的最多装65536个数),从开启看门狗那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加1,加到计数器盛不下了(这就是溢出)就产生一个复位信号,重启系统。
指针
问:什么是硬件看门狗?什么是软件看门狗?
答:硬件看门狗是利用一个定时器电路,其定时输出链接到电路的复位端,程序在必定时间范围内对定时器清零,所以程序正常工做时,定时器总不能溢出,也就不能产生复位信号。若是程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。
软件看门狗原理上同样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样能够简化硬件电路设计,可是在可靠性方面不如硬件定时器。
问:在什么状况下软件看门狗失效?
答:一、系统内部定时器自身发生故障看门狗就会失效(固然能够经过双定时器相互监视,成本高);
二、中断系统故障致使定时器中断失效。
三、整个程序死机。主程序出现异常。
四、陷入死循环。
问:什么是中断?
答:计算机中,因为计算机内外部的缘由或软硬件的缘由,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该缘由而编写的服务程序。执行完服务程序后,再返回被暂停的位置,继续执行原来的程序,这个程序称为中断。
问:何时使用硬件看门狗?
答:对系统稳定性有较高要求的关键场合。接口
问:为何要使用硬件看门狗?
答:硬件看门狗是一个简单的程序,不会出现异常。当程序异常,软件看门狗没法唤醒时,硬件看门狗就会断电重启,将整个设备的程序复位。确保了系统在严重错误时的恢复能力。游戏
问:怎么喂狗?喂狗的注意事项?
答:估算程序运行时间(采用定时器),而后根据看门狗设置的超时时间喂狗。不能频繁喂狗,最好在设置的1/2时间内喂狗;
问:看门狗通常应用到程序的那些位置?
答:主程序中,容易发生死循环的地方。例:For、while这种循环语句的开始。多任务系统中只要一个任务出现故障系统就重启。
复位相关问题
问:复位时单片机有什么动做?
答:主要作的就是初始化每一个寄存器,包括最重要的PC指针,不包括RAM,而后单片机从复位地址开始执行程序。
必须使RST引脚(9)加上持续两个机器周期(即24个振荡周期)的高电平。单片机就执行复位操做。若是RST持续为高电平,单片机就处于循环复位状态。
问:复位的两种启动方式?
答:一、上电复位:要求接通电源后,自动实现复位操做。
二、按钮复位:要求接通电源后,单片机自动复位,而且在单片机运行期间,使用开关也能够实现复位。
问:复位存在哪些问题?
答:
采用上电复位:复位信号上电过程当中有掉电现象,可能会形成逻辑方面的错误致使相关芯片复位时间不够、二次复位等、从而不可以正常工做起来。缘由:产生的复位信号给了几个芯片用,致使这个复位信号的负载压力比较大,驱动能力不够从而往下调电,此现象经常出如今RC复位上。
复位信号上电前有毛刺与复位信号上电时有毛刺,可能会形成逻辑方面的错误致使相关芯片复位时间不够。方案:加大上拉电阻的阻值。
问:复位电路有哪些?那种比较好?
答:微分学复位电路、积分学复位电路、比较型复位电路、看门狗型复位电路。四种方法都各有利弊,要根据自身需求来进行选择。
中断相关问题
问: 中断的响应过程?
答:1)根据响应的中断源的中断优先级,使相应的优先级状态触发器置1;
2) 执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源。
3) 清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);
4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC,从而转入相应的中断服务程序。
5) 中断返回,程序返回断点处进行执行。
问:中断优先级?
答:1)CPU同时接收到几个中断,先响应优先级别最高的中断请求;
2) 正在进行的中断,不能被新的同级或低级中断请求所打断;
3) 正在进行的低优先级中断服务,能被高级中断请求所中断。
问:优先级由什么决定?
答:中断的优先级有两个:查询优先级与执行优先级
查询优先级:查询优先级是不能够更改和设置的
一、 系统默认的优先级(逻辑上):
外部中断0 > 定时器中断0 > 外部中断1 > 定时器中断1 > 串行中断
二、 由IP寄存器来决定优先级。当IP对应位置为1时,该中断级别提升。同为1是按默认级别
问:中断嵌套的好处与坏处?
答:中断嵌套:CPU在处理级别较低的中断过程当中,出现了级别较高的中断请求。CPU中止执行低级别中断,执行高级别的中断处理程序后,再接着执行低级别的未被处理完的中断程序。
使用中断嵌套可使高优先级别的中断获得及时的响应和处理。
1) CPU与外部设备并行工做
2) 可以处理例外事件
3) 实现实时处理
4) 实现人机联系
5) 实现用户程序与操做系统的联系
6) 实现多道程序并行执行
7) 在多处理机系统中,实现处理机之间的联系
坏处:高级别的中断一直持续的话会影响低级别中断的处理。
问:中断在单片机中起到什么做用?
答:中断能实现快速的CPU与慢速的外设同步工做,实现数据传送、故障检测与处理、人机联系、多机系统、多道程序分时操做、实时信息处理等。
堆栈相关问题
问:堆栈的原理?
答:单片机RAM中,经常会指定一个专门的区域来存放某些特别的数据,它遵循先进后出、后进先出的原则。这个RAM区就是堆栈。堆栈是一种数据结构(数据项按序排列:堆,顺序随意。栈,后进先出)。使用一个称做堆栈指针的专用寄存器指示前的操做位置,堆栈指针老是指向栈顶。
问:过程怎么操做?
答:
1) 堆栈的创建(初始化)
2) 参数入栈(push)
3) 参数出栈(pop)(后进先出)
问:堆栈在单片机中有什么做用?答:1)子程序调用和中断服务时CPU自动将当前PC值压入栈中保存,返回时自动将PC值弹栈。2) 保护现场/恢复现场3) 数据传输问:堆栈应用在什么地方?答:子程序调用及中断处理。问:存在什么问题?怎么解决?答:当须要大量地调用子程序或者保护数据,或者频繁地调用中断服务程序,这些都要占用单片机内存。一旦堆栈空间超出了原先分配给它的内存空间,那就可能致使程序运行混乱以至崩溃。通常单片机上电时默认的堆栈区只有24个字节,假如用的堆栈大于24字节,就会出现两种状况:1) 堆栈数据破坏了用户数据2) 不只可能致使运算结果出错,更严重的是,它会致使程序跑飞甚至死机。解决方案:堆栈指令访问内存的方式是间接寻址访问,所以咱们能够将单片机的堆栈区设定到单片机内存的后128字节(堆栈深度远大于24字节)的内存空间内,这样就能够知足咱们的需求了。