单⽚机⾯试问题集
单⽚机
1. 单⽚机的最⼩系统?内部的主要结构?
答:最⼩系统:电源、晶振(为系统提供基本的时钟信号)、复位电路;内部结构:ROM/RAM、计时器、中断、I/O串并⾏⼝、总线扩展控制。
2. RAM和ROM的区别?
答:ROM(只读存储器):它的信息⼀次写⼊后只能被读出,⽽不能被操作者修改或者删除。⼀般⽤于存放固定的程序或数据表格。
但是,“只读”这个概念有时候可以被⼀些新特性的器件颠覆。
RAM(随机存储器):它就是我们平时说的内存,主要⽤来存放各种现场的输⼊/输出数据、中间计算结果,以及与外部存储器交换信息,或者作堆栈(特点:先进后出,后进先出)⽤。它的存储单元根据具体需要可以读出或者改写。
两者区别:RAM只能⽤于暂时存放程序与数据。⼀旦电源关闭或发⽣断电,RAM中的数据就会丢失。⽽ROM中的数据在电源关闭或者断电后仍然会保留下来。
简⽽⾔之:相同点它们都是⽤来存储数据的
不同点存储数据的⽅式与数据能不能在⼆次加⼯不同
3. 单⽚机I/O⼝有什么作⽤?I/0⼝的驱动能⼒?上拉电阻与下拉电阻的作⽤?
答:I/O⼝最主要的功能⽤来与外部器件实现数据信息的交互、速度匹配、数据传送⽅式和增强单⽚机的负载能⼒。它在两者之间扮演桥梁的作⽤,单⽚机拥有着串⾏与并⾏接⼝。每个种类的单⽚机的不同并⾏⼝也有着各⾃不同的功能。
单⽚机输出低电平时,将允许外部器件,向单⽚机引脚内灌⼊电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”。
单⽚机输出⾼电平时,则允许外部器件,从单⽚机的引脚拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”。
单⽚机输出驱动能⼒的问题:每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌⼊的最
⼤电流为10 mA;每个 8 位的接⼝(P1、P2 以及 P3),允许向引脚灌⼊的总电流最⼤为15 mA,⽽ P0 的能⼒强⼀些,允许向引脚灌⼊的最⼤总电流为26 mA;全部的四个接⼝所允许的灌电流之和,最⼤为 71 mA。⽽当这些引脚“输出⾼电平”的时候,单⽚机的“拉电流”能⼒呢?可以说是太差了,竟然不到1 mA。
结论就是:单⽚机输出低电平的时候,驱动能⼒尚可,⽽输出⾼电平的时候,就没有输出电流的能⼒。
综上所述:灌电流负载,是合理的;⽽“拉电流负载”和“上拉电阻”会产⽣很⼤的⽆效电流,并且功耗⼤。
设计单⽚机的负载电路,应该采⽤“灌电流负载”的电路形式,以避免⽆谓的电流消耗。
在数字电路中,只有⼆种状态,要么是⾼电平,要么是低电平,在通电初期,这些输出状态是不确定的,为了使电路确定状态,必需使⽤上拉电阻或下拉电阻,使⼀个原来不确定电平变⾼的叫上拉电阻,否则就是下拉电阻,上拉电阻就是从电源上接⼀只电阻到这个状态⼝上就可以了,(就是把⾼的电压加到这个点上去,这个点的电位就⾼了)下拉电阻的接法,从这个状态⼝接⼀只电阻到负极(或数字接地),因电路形式与类别不同,当输⼊端有信号,这种变化会反应到输出⼝,从输出⼝得到了⼀个状态,本来应该完成任务了,但这会⼉输⼊⼝已没信号了,可输出端还是这个状态(这个⼈习惯
不好,开门后总是不关门,加⼀只弹簧,(电阻)让它⾃⼰关门,)这时候也要⽤到上下拉电阻,这⾥有复位的作⽤。
4. 常见的时钟电路有哪些?为什么要使⽤PLL?
答:先了解⼀下什么是时钟电路?
时钟电路就是产⽣像时钟⼀样准确运动的振荡电路,任何⼯作都按时间顺序。⽤于产⽣这个时间的电路就是时钟电路。
组成:晶体振荡器、晶震控制芯⽚和电容组成。
现在流⾏的串⾏时钟电路有:DS1302、DS1307、PCF8485等
它们的特点:接⼝简单、价格低廉、使⽤⽅便。
DS1302:具有涓细电流充电能⼒的电路,主要特点:采⽤串⾏数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采⽤普通32.768KHz晶振。
PLL(PhaseLocked Loop):锁相环电路。⽤来统⼀整合时脉讯号,使⾼频器件正常⼯作。如:内存
的存取资料等。PLL⽤于振荡器中的反馈技术。许多电⼦设备要正常⼯作,通常需要外部的输⼊信号与内部的振荡信号同步。⼀般的晶振由于⼯艺与成本原因,做不到很⾼的频率,⽽在需要⾼频应⽤时,有相应的器件VCO,实现转成⾼频,但不稳定,故利⽤锁相环路就可以实现稳定且⾼频的时脉冲讯号。
什么是时脉:指同步电路中时钟的基础频率,它以(若千次周期每秒)来度量,单位是(Hz)
总之:PLL可以同步频率,相位正交。倍频、变频。
1. 单⽚机的寻址⽅式有哪些?
答:80C51有七种寻址⽅式:
1、⽴即寻址,寻址空间为ROM;
2、直接寻址,寻址空间为⽚内RAM的低128B和特殊功能寄存器;
3、寄存器寻址,寻址空间为A、B、DPTR、CY、通⽤⼯作寄存器等;
4、寄存器间接寻址,⽚内RAM低128B、⽚外RAM;
5、相对寻址,寻址空间为ROM;
6、变址寻址,寻址空间为ROM;
7、位寻址,寻址空间为⽚内RAM低128B的位寻址区的128个位,其字节地址为20H~2FH;以及部分可以位寻址的特殊功能寄存器。
参考:AT89C51单⽚机能直接认识和执⾏的机器指令有255条,有7种寻址⽅式,即⽴即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。
1. 直接寻址:
指令中直接给出参与操作的数据的地址,该地址⼀般⽤direct表⽰。
汇编指令:MOV A,direct
该指令的功能是将⽚内RAM地址direct单元中的内容(参与操作的数据)传送到累加器A中,双字节指令。
2. ⽴即寻址:
指令中直接给出参与操作的数据,称⽴即数,⽤data表⽰。在汇编语⾔中,为标明⽴即数,为data加前缀”#”。⽴即数可以是8位
和16位⼆进制数,分别⽤#data和#data16表⽰。
汇编语⾔指令:MOV A,#data
该指令将⽴即数data传送到累加器A中,双字节指令。
3. 寄存器寻址:
参与操作的数据存放在寄存器中,汇编指令中直接以寄存器名来表⽰参与操作的数据地址,寄存器包括⼯作寄存器R0~R7、累加器A、AB、数据指针DPTR和位运算寄存器C。
汇编语⾔指令:MOV A,Rn ;n=0~7
该指令将Rn中的内容传送到累加器A中,单字节指令。
4. 寄存器间接寻址:
寄存器间接寻址为⼆次寻址,第⼀次寻址得到寄存器的内容为(Ri)或(DPTR),第⼆次寻址是将第⼀次
寻址得到的寄存器内容作为地址,并在其中存、取参与操作的数据。汇编语⾔中,寄存器前缀@是寄存器间接寻址的标志,有@Ri、@DPTR等。
汇编语⾔指令:MOV A,@Ri ;i=0、1
该指令是将Ri中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。
5. 变址寻址:
间接寻址由两个寄存器提供。若由A、PC提供,在汇编语⾔指令中寻址地址表⽰为@A+PC;若由A和DPTR提供,在汇编语⾔指令中寻址地址为@A+DPTR。其中,PC或DPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位⽆符号加法。若变址寄存器A中内容加基址寄存器DPTR(或PC)中内容时,低8位有进位,则该进位直接加到⾼位,不影响进位标志。因变址寻址指令多⽤于查表,故常称为查表指令。
汇编语⾔指令:MOVC A,@A+DPTR
该指令将DPTR中的内容加上A中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。
6. 相对寻址:
相对寻址是以相对寻址指令的下⼀条指令的程序计数器PC的内容为基值,加上指令机器代码中的“相对地址”,形成新的PC值(要转移的指令地址)的寻址⽅式。指令机器代码中“相对地址”指的是⽤⼀个带符号的8位⼆进制补码表⽰的偏移字节数,其取值范围为-128~+127,负数表⽰向后转移,正数表⽰向前转移。
若(PC)表⽰该指令在ROM中的⾸地址,该指令字节数为2,执⾏时分两步操作:(PC)←(PC)+2,(PC)←(PC)+相对地址。第⼀步完成后,PC中的值为该指令的下⼀条指令的⾸地址;第⼆步完成后,PC中的内容(PC)为转移的⽬标地址。所以,转移的⽬标地址范围是该相对寻址指令的下⼀条指令⾸址加上-128~—+127字节的地址。
汇编语⾔指令:SJMP rel
汇编语⾔相对寻址指令中的”rel”往往是⼀个标号地址,表⽰ROM中某转移⽬标地址。汇编软件对该汇编语⾔指令进⾏汇编时,⾃动算出“相对地址”并填⼊机器代码中,应将”rel”理解为“带有相对意义的转移⽬标地址”。
Rel=(PC)+相对寻址指令字节数+相对地址
其中,(PC)为该指令所在ROM中的⾸地址。
7. 位寻址:
参与操作的数据为“位”,⽽不是字节,是对⽚内数据存储器RAM和SFR中可位寻址单元的位进⾏操作的寻址⽅式。
汇编语⾔指令:ANL C,bit
该指令将bit(位地址)中的内容(0或1)与C中的内容进⾏与操作,再将结果传送到PSW中的进位标志C中。
1. 什么是时钟周期?机器周期?指令周期?它们之间的关系?
答:1、时钟周期⼜叫做振荡周期;单⽚机内部时钟电路产⽣(或外部时钟电路送⼊)的信号周期,单⽚机的时序信号是以时钟周期信号为基础⽽形成的,在它的基础上形成了机器周期、指令周期和各种时序信号。定义为时钟脉冲的倒数(可以这样理解:时钟周期就是单⽚机外接晶振的倒数,例如:12M的晶振,它的时钟周期就是1/12us),是计算机中最基本的、最⼩的时间单位。在⼀个时钟周期内,CPU仅完成⼀个最基本的动作。
2、计算机中,为了便于管理,常把⼀条指令的执⾏过程划分为若⼲个阶段,每⼀个阶段完成⼀项⼯作。例如:取指令、存储器读、存
储器写等,这每⼀项⼯作称为⼀个基本操作。完成⼀项基本操作所需要的时间成为机器周期。⼀般情况,⼀个机器周期由若⼲个S周期(状态周期)组成。机器周期是单⽚机的基本操作周期,每个机器周期包含S1、S2、……S6这6个状态,每个状态包含两
拍P1和P2,每个拍为⼀个时钟周期(振荡周期)。因此,⼀个机器周期包含12个时钟周期。依次可表⽰
为S1P1、S1P2、S2P1、S2P2……、S6P1、S6P2。
3、指令周期:计算机从取⼀条指令开始,到执⾏完该指令所需要的时间称为指令周期。不同的指令,指令长度不同,指令周期也不⼀
样。但指令周期以机器周期为单位,指令不同,所需的机器指令也不同。
51单⽚机指令根据指令长度与执⾏周期分为:
1)单字节单周期指令
2)单字节双周期指令
3)双字节单周期指令
4)双字节双周期指令
5)三字节双周期指令
6)⼀字节四周期指令
总结:时钟周期是最⼩单位,机器周期需要1个或者多个时钟周期,指令周期需要1个或者多个机器周期;机器周期是指完成⼀个基本操作的时间。指令周期是CPU的关键指标,指取出并执⾏⼀条指令的时间。⼀般以机器周期为单位,分单指令执⾏周期、双指令执⾏周期等。机器周期是完成⼀个基本操作的时间单元。时钟周期是CPU的晶振的⼯作频率的倒数。
2. 单⽚机有哪些接⼝,各模块有哪些特性及应⽤环境?
答:接⼝电路——⽤于衔接外设与总线,实现存储空间扩展、I/O⼝线扩展、类型转换(电平转换、串并转换、A/D转换)、功能模块、通信扩展、总线扩展等。
外围设备——⼯作设备,连接在接⼝电路上,主要有输出设备和输⼊设备。
看门狗相关问题:
1. 看门狗的原理?
答:⼯作原理:在系统运⾏以后就启动看门狗计数器,此时看门狗就开始⾃动计时,如果达到⼀定的时间还不去给它进⾏清零,看门狗计数器就会溢出从⽽引起看门狗中断,造成系统的复位。
为什么会溢出呢?
因为看门狗是⼀个计数器,⽽计数器位数有限。能够装的数值也就有限(⽐如8位的最多装256个数,16位的最多装65536个数),从开启看门狗那刻起,它就开始不停的数机器周期,数⼀个机器周期就计数器加1,加到计数器盛不下了(这就是溢出)就产⽣⼀个复位信号,重启系统。
2. 看门狗分为软件看门狗和硬件看门狗,在什么情况下软件看门狗失效?
答:硬件看门狗是利⽤⼀个定时器电路,其定时输出连接到电路的复位端,程序在⼀定时间范围内对定时器清零,因此程序正常⼯作时,定时器总不能溢出,也就不能产⽣复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产⽣复位信号并重启系统。
软件看门狗原理上⼀样,只是将硬件电路上的定时器⽤处理器的内部定时器代替,这样可以简化硬件电路设计,但是在可靠性⽅⾯不如硬件定时器。
1、系统内部定时器⾃⾝发⽣故障看门狗就会失效(当然可以通过双定时器相互监视,成本⾼);
2、中断系统故障导致定时器中断失效。汇编指令有多少个
3、整个程序死机。主程序出现异常。
3. 什么时候喂狗?怎么喂狗?喂狗的注意事项?
答:在实际的单⽚机应⽤系统中,到底选⽤哪种型号的看门狗,采⽤何种喂狗⽅式和看门狗连接⽅式以及在编程中喂狗命令应该放在程序中什么位置,这要根据现场⼲扰源的特点、已采⽤的⼲扰措施、单⽚机硬件资源和软件结构特点以及对单⽚机系统的可靠性等具体情况⽽定。
4. 看门狗⼀般应⽤到程序的那些位置?
答:⼀些重要的程序,必须让它⼀直跑着;⽽且还要时时关⼼它的状态——不能让它出现死锁现象。(当然,如果⼀个主程序会出现死锁,肯定是设计或者编程上的失误。⾸要做的事是Debug。)但如果时间紧迫可以⽤软件看门狗,暂时应急。
喂狗命令放置位置:
1. 定时中断服务⼦程序中;
2. 主程序中.
复位相关问题:
1. 复位时单⽚机有什么动作?
答:主要做的就是初始化每个寄存器,包括最重要的PC指针,不包括RAM,然后单⽚机从复位地址开始执⾏程序。
必须使RST引脚(9)加上持续两个机器周期(即24个振荡周期)的⾼电平。单⽚机就执⾏复位操作。如果RST持续为⾼电平,单⽚机就处于循环复位状态。
2. 单⽚机有哪些复位源,什么情况下会导致各个复位源
答:
6个复位源
TM4C123GH6PM微控制器有6个复位源:
(1)上电复位(POR);
(2)外部复位输⼊引脚有效(RST);
(3)掉电检测可以⽤于由以下任⼀事件引起:①低于BOR0,触发值是BOR0的最⾼电压值;②低于B
OR1,触发值是BOR1的最⾼电压值。
(4)软件启动复位(利⽤软件复位寄存器);
(5)违反看门狗复位条件;
(6)MOSC故障。
STM8S共有9个复位源:
NRST引脚产⽣的外部复位
上电复位(POR)
掉电复位(BOR)
独⽴看门狗复位
窗⼝看门狗复位
软件复位
SWIM复位
⾮法操作码复位
EMS复位:当⼀些关键的寄存器被破坏或错误加载时产⽣的复位
所有的复位源最终都作⽤于NRST管脚,并在复位过程中保持低电平。复位⼊⼝向量在内存映射中位于固定的地址6000h。
3. 复位的两种启动⽅式?
答:1、上电复位:要求接通电源后,⾃动实现复位操作。
2、按钮复位:要求接通电源后,单⽚机⾃动复位,并且在单⽚机运⾏期间,使⽤开关也可以实现复位。
4. 复位存在哪些问题?
答:采⽤上电复位:复位信号上电过程中有掉电现象,可能会造成逻辑⽅⾯的错误导致相关芯⽚复位时间不够、⼆次复位等、从⽽不能够正常⼯作起来。原因:产⽣的复位信号给了⼏个芯⽚⽤,导致这个复位信号的负载压⼒⽐较⼤,驱动能⼒不够从⽽往下调电,此现象常常出现在RC复位上。
复位信号上电前有⽑刺与复位信号上电时有⽑刺,可能会造成逻辑⽅⾯的错误导致相关芯⽚复位时间不够。⽅案:加⼤上拉电阻的阻值。
5. 复位电路有哪些?那种⽐较好?
答:单⽚机复位电路主要有四种类型:
(1)微分型复位电路:
(2)积分型复位电路:
(3)⽐较器型复位电路:
⽐较器型复位电路的基本原理。上电复位时,由于组成了⼀个RC低通⽹络,所以⽐较器的正相输⼊端的电压⽐负相端输⼊电压延迟⼀定时间.⽽⽐较器的负相端⽹络的时间常数远远⼩于正相端RC⽹络的时间常数,因此在正端电压还没有超过负端电压时,⽐较器输出低电平,经反相器后产⽣⾼电平.复位脉冲的宽度主要取决于正常电压上升的速度.由于负端电压放电回路时间常数较⼤,因此对电源电压的波动不敏感.但是容易产⽣以下⼆种不利现象:
1)电源⼆次开关间隔太短时,复位不可靠:
2)当电源电压中有浪涌现象时,可能在浪涌消失后不能产⽣复位脉冲。
为此,将改进⽐较器重定电路,可以利⽤数字逻辑的⽅法和⽐较器配合,设计的⽐较器重定电路。此电路稍加改进即可作为上电复位和看门狗复位电路共同复位的电路,⼤⼤提⾼了复位的可靠性。
(4)看门狗型复位电路.
看门狗型复位电路主要利⽤CPU正常⼯作时,定时复位计数器,使得计数器的值不超过某⼀设定的值;当CPU不能正常⼯作时,由于计数器不能被复位,因此其计数会超过某⼀值,从⽽产⽣复位脉冲,使得CPU恢复正常⼯作状态。此复位电路的可靠性主要取决于软件设计,即将定时向复位电路发出脉冲的程序放在何处是最优的设计。⼀般设计,将此段程序放在定时器中断服务⼦程序中。然⽽,有时这种设计仍然会引起程序⾛飞或⼯作不正常。原因主要是:当程序"⾛飞"发⽣时,定时器初始化以及开中断之后的话,这种"⾛飞"情况就有可能不能由Watchdog复位电路校正回来.因为定时器中断⼀真在产⽣,即使程序不正常,Watchdog也能被正常复位.为此提出定时器加预设的设计⽅法.即在初始化时压⼊堆栈⼀个地址,在此地址内执⾏的是⼀条关中断和⼀条死循环语句.在所有不被程序代码占⽤的地址尽可能地⽤⼦程序返回指令RET代替.这样,当程序⾛飞后,其进⼊陷阱的可能性将⼤⼤增加.⽽⼀旦进⼊陷阱,定时器停⽌⼯作并且关闭中断,从⽽使Watchdog复位电路会产⽣⼀个复位脉冲将CPU复位.当然这种技术⽤于实时性较强的控制或处理软件中有⼀定的困难。
由此可见,四种复位电路中,看门狗型复位电路较其他三中复位电路更加适合。
堆栈相关问题:
1. 堆栈的原理?过程怎么操作?
答:单⽚机RAM中,常常会指定⼀个专门的区域来存放某些特别的数据,它遵循先进后出、后进先出的原则。这个RAM区就是堆栈。
堆栈是⼀种数据结构(数据项按序排列:堆,顺序随意。栈,后进先出)。使⽤⼀个称作堆栈指针的专⽤寄存器指⽰前的操作位置,堆栈指针总是指向栈顶。
操作过程:
1)堆栈的建⽴(初始化)
2)参数⼊栈(push)
3)参数出栈(pop)(后进先出)
2. 堆栈应⽤在什么地⽅?存在什么问题?怎么解决?
答:在80C51单⽚机中,堆栈在⼦程序调⽤和中断时会把断点地址⾃动进栈和出栈。进栈和出栈的指令(PUSH、POP)操作可⽤于保护现场和恢复现场。由于⼦程序调⽤和中断都允许嵌套,并可以多级嵌套,⽽现场的保护也往往使⽤堆栈,所以⼀定要注意给堆栈以⼀定的深度,以免造成堆栈内容的破坏⽽引起程序执⾏的“跑飞”。
堆栈指针SP在80C51中存放当前的堆栈栈顶所指存储单元地址的⼀个8位寄存器。80C51单⽚机的堆栈是向上⽣成的,即进栈时SP的内容是增加的;出栈时SP的内容是减少的。
系统复位后。80C51的SP内容为07H。若不重新定义,则以07H为栈底,压栈的内容从08H单元开始存放。但⼯作寄存
器R0~R7有4组,占有内部RAM地址为00H~1FH,位寻址区占有内部RAM地址为20H~2FH。若程序中使⽤了⼯作寄存器1~3组或位寻址区,则必须通过软件对SP的内容重新定义,使堆栈区设定在⽚内数据RAM区中的某⼀区域内(如30H),堆栈深度不能超过⽚内RAM空间。
3. 学习堆栈的作⽤?
答:在⽚内RAM中,常常要指定⼀个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。
1.⼦程序调⽤和中断服务时CPU⾃动将当前PC值压栈保存,返回时⾃动将PC值弹栈。
2.保护现场/恢复现场
3.数据传输
也就是说,堆栈是进⼊中断的时候⽤到的,单⽚机⼀旦遇到中断请求,就会去处理中断,处理完后再回来处理主程序,这样就涉及到了⼀个问题,单⽚机要保存中断之前的信息,以便处理完后能够回到主程序中,单⽚机会在响应中断前,把单⽚机现在的指针地址(也就是处理完要返回的地址),以及⼀些必要的数据压⼊堆栈(没有这些数据,单⽚机处理完中断后就⽆法确定主程序的状态)。
中断相关问题:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论