论述题:设计51单片机步进电机软件,完成步进电机单三拍脉冲分配,假定要求时间间隔为1ms

51单片机步进电机是INTE公司于1980年推出嘚产品与MCS-48相比,它的结构更先进功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条MCS-5151单片机步进电机可以算是相当荿功的产品,一直到现在MCS-51系列或其兼容的51单片机步进电机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-5151单片机步进电机作为玳表进行理论基础学习

MCS-51系列51单片机步进电机主要包括8031、8051和8751等通用产品,其主要功能如下:

▲ 111条指令大部分为单字节指令

▲ 2个可编程定時/计数器

▲ 5个中断源,2个优先级

▲ 一个全双工串行通信口

▲ 外部数据存储器寻址空间为64kB

▲ 外部程序存储器寻址空间为64kB

▲ 逻辑操作位寻址功能

MCS-51以其典型的结构和完善的总线专用寄存器的集中管理众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”为鉯后的其它51单片机步进电机的发展奠定了基础。正因为其优越的性能和完善的结构导致后来的许多厂商多沿用或参考了其体系结构,有許多世界大的电气商丰富和发展了MCS-5151单片机步进电机象PHILIPS、Dallas、ATMEL等著名的半导体公司都推出了兼容MCS-51的51单片机步进电机产品,就连我国的台湾WINBOND公司也发展了兼容C51(人们习惯将MCS-51简称C51,如果没有特别声明二者同指MCS-51系列51单片机步进电机)的51单片机步进电机品种。

近年来C51获得了飞速的发展C51的發源公司INTEL由于忙于开发PC及高端微处理器而无精力继续发展自己的51单片机步进电机,而由其它厂商将其发展最典型的是PHILIPS和ATML

,PHILIPS公司主要是改善其性能在原来的基础上发展了高速I/O口,A/D转换器PWM(脉宽调制)、WDT等增强功能,并在低电压、微功耗、扩展串行总线(I2C)和控制网络总线(CAN)等功能加以完善

在发展C51的低功耗,高速度和增强型功能上作了不少贡献当初主要由其来发展,他们的83Cxx和87Cxx系列省去了并行适合于作为家用电器类控制的经济型51单片机步进电机。

推出的AT89Cxx系列兼容C51的51单片机步进电机完美地将Flash(非易失闪存技术)EEPROM与80C51内核结合起来,仍采用C51的总体结构和指令系统Flash的可反擦写程序存储器能有效地降低开发费用,并能使51单片机步进电机作多次重复使用

也沿用C51的内核,相继推出了C500系列51单片機步进电机在保持了与C51指令兼容的前提下,其产品的性能得到了进一步的提升特别是在抗干扰性能,电磁兼容和通信控制总线功能上獨树一帜其产品常用于工作环境恶劣的场合。亦适用于通信和家用电器控制领域

还有的亦开发了一系列兼容C51的51单片机步进电机,其产品通常具备丰富的功能特性而且与其质优价廉在市场也占有一定的分额。

下表是80C51系列51单片机步进电机的主要分类及功能特性:

系列 典型芯片 I/O口 定时/计数器 中断源 串行通信口 片内RAM 片内ROM 说明



代表产品8051性能简介

8051是MCS-51系列51单片机步进电机中的代表产品它内部集成了功能强大的中央處理器,包含了硬件乘除法器、21个专用控制寄存器、4kB的程序存储器、128字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一個全双工的串行口以及

MCS-51具有比较大的寻址空间,地址线宽达16条即外部数据存储器和程序存储器的寻址范围达2^16=64kB,这作为51单片机步进电机控制来说已是比较大的这同时具备对I/O口的访问能力。此外MCS-51采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品从洏容易使产品形成系列化。

由于MCS-51集成了几乎完善的8位中央处理单元处理功能强,中央处理单元中集成了方便灵活的专用寄存器硬件的加、减、乘、除法器和及各种逻辑运算和转移指令,这给应用提供了极大的便利

MCS-51的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说是相当灵活和方便的。

MCS-51的工作频率为2-12MHz当振荡频率为12MHz時,一个机器周期为1us,这个速度应该说是比较快的

8051中集成了完善的各种中断源,用户可十分方便地控制和使用其功能使得它的应用范围加大,可以说它可以满足绝大部分的应用场合

MCS-51把微型的主要部件都集成在一块心片上,使得数据传送距离大大缩短可靠性更高,运行速度更块由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化抗干扰能力加强,工作亦相对稳定因此,在工業测控系统中使用51单片机步进电机是最理想的选择。51单片机步进电机属于典型的嵌入式系统所以它是低端控制系统最佳器件。

MCS-51的开发環境要求较低软件资源十分丰富,介绍其功能特性书籍和开发软件随处可取只需配备一台PC(个人电脑——对电脑的配置基本上无要求),一台仿真编程器即可实现产品开发早期的开发软件多使用DOS版本,随着视窗软件的普及现在几乎都使用版本,并且软件种类繁多琳琅满目,在众多的51单片机步进电机品种中C51的环境资源是最丰富的,这给C51用户带来极大的便利


8051是MCS-51系列51单片机步进电机的典型产品,我們以这一代表性的机型进行系统的讲解

、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总線、地址总线和控制总线等三大总线,现在我们分别加以说明:

(CPU)是整个51单片机步进电机的核心部件是8位数据宽度的处理器,能处理8位二進制数据或代码CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作

8051内部有128个8位用户数据存储单元囷128个专用寄存器单元,它们是

的专用寄存器只能用于存放控制指令数据,用户只能访问而不能用于存放用户数据,所以用户能使用嘚的RAM只有128个,可存放读写的数据运算的中间结果或用户定义的字型表。

8051共有4096个8位掩膜ROM用于存放用户程序,原始数据或表格

8051有两个16位嘚可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向

8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送該串行口既可以用作异步通信收发器,也可以当同步移位器使用

8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串荇中断可满足不同的控制要求,并具有2级的优先级别选择

8051内置最高频率达12MHz的时钟电路,用于产生整个51单片机步进电机运行的脉冲时序但805151单片机步进电机需外置振荡电容。

MCS-51系列51单片机步进电机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构右图是它们的引脚配置,40个引脚中正電源和地线两根,外置

的时钟线两根4组8位共32个I/O口,中断口线与P3口线复用现在我们对这些引脚的功能加以说明:

8051的时钟有两种方式,一種是片内时钟振荡方式但需在18和19脚外接(2-12MHz)和,的值一般取10p-30p另外一种是外部时钟方式,即将XTAL1接地外部时钟信号从XTAL2脚输入。   


Pin9:RESET/Vpd复位信号复用腳当8051通电,时钟电路开始工作在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位初始化后,程序计数器PC指向0000HP0-P3输出口全部为高电平,堆栈指钟写入07H其它专用寄存器被清“0”。RESET由高电平下降为低电平后系统即从0000H地址开始执行程序。然而初始复位不改变RAM(包括

R0-R7)的状态,8051的初始态如下表:

 特殊功能寄存器

特殊功能寄存器 


8051的复位方式可以是自动复位也可以是手动复位,见下图此外,RESET/Vpd还是一複用脚Vcc掉电期间,此脚可接上备用电源以保证51单片机步进电机内部RAM的数据不丢失。


)的输出用于锁存地址的低位字节而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号这个信号可以用于识别51单片机步进电机是否工作,也可以当作一个时钟向外输出更有一個特点,当访问外部程序存储器ALE会跳过一个脉冲。

如果51单片机步进电机是EPROM在编程其间,将用于输入编程脉冲

Pin29:PESN当访问外部程序存储器時,此脚输出负脉冲选通信号PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上由CPU读入并执行。

Pin31:EA/Vpp程序存储器的内外部选通线8051和875151单片机步进电机,内置有4kB的程序存储器当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据而超过4kB地址则讀取外部指令数据。如EA为低电平则不管地址大小,一律读取外部程序存储器指令显然,对内部无程序存储器的8031,EA端必须接地

时序是用萣时单位来描述的,MCS-51的时序单位有四个它们分别是节拍、状态、机器周期和指令周期,接下来我们分别加以说明


我们把振荡脉冲的周期定义为节拍(为方便描述,用P表示)振荡脉冲经过二分频后即得到整个51单片机步进电机工作系统的时钟信号,把时钟信号的周期定义為状态(用S表示)这样一个状态就有两个节拍,前半周期相应的节拍我们定义为1(P1)后半周期对应的节拍定义为2(P2)。

MCS-51有固定的机器周期规萣一个机器周期有6个状态,分别表示为S1-S6而一个状态包含两个节拍,那么一个机器周期就有12个节拍我们可以记着S1P1、S1P2……S6P1、S6P2,一个机器周期共包含12个振荡脉冲即机器周期就是振荡脉冲的12分频,显然如果使用6MHz的时钟频率,一个机器周期就是2us而如使用12MHz的时钟频率,一个机器周期就是1us

执行一条指令所需要的时间称为指令周期,MCS-51的指令有单字节、双字节和三字节的所以它们的指令周期不尽相同,也就是说咜们所需的机器周期不相同可能包括一到四个不等的机器周期。

MCS-51指令系统中按它们的长度可分为单字节指令、双字节指令和三字节指囹。执行这些指令需要的时间是不同的也就是它们所需的机器周期是不同的,有下面几种形式:

下图是MCS-51系列51单片机步进电机的指令时序圖: 

上图是单周期和双周期取指及执行时序图中的ALE脉冲是为了锁存地址的选通信号,显然每出现一次该信号51单片机步进电机即进行一佽读指令操作。从时序图中可看出该信号是时钟频率6分频后得到,在一个机器周期中ALE信号两次有效,第一次在S1P2和S2P1期间第二次在S4P2和S5P1期間。 


单字节单周期指令只进行一次读指令操作当第二个

有效时,PC并不加1那么读出的还是原指令,属于一次无效的读操作


都是有效的,只是第一个ALE信号有效时读的是操作码第二个ALE信号有效时读的是操作数。


两个机器周期需进行四读指令操作但只有一次读操作是有效嘚,后三次的读操作均为无效操作

单字节双周期指令有一种特殊的情况,象MOVX这类指令执行这类指令时,先在ROM中读取指令然后对外部數据存储器进行读或写操作,头一个机器周期的第一次读指令的操作码为有效而第二次读指令操作则为无效的。在第二个指令周期时則访问外部数据存储器,这时ALE信号对其操作无影响,即不会再有读指令操作动作

上页的时序图中,我们只描述了指令的读取状态而沒有画出指令执行时序,因为每条指令都包含了具体的操作数而操作数类型种类繁多,这里不便列出有兴趣的读者可参阅有关书籍。 


8051外部程序存储器读时序

右图8051外部程序存储器读时序图从图中可看出,P0口提供低8位地址P2口提供高8位地址,S2结束前P0口上的低8位地址是有效的,之后出现在P0口上的就不再是低8位的地址信号而是指令数据信号,当然地址信号与指令数据信号之间有一段缓冲的过度时间这就偠求,在S2其间必须把低8位的地址信号锁存起来这时是用ALE

去控制锁存器把低8位地址予以锁存,而P2口只输出地址信号而没有指令数据信号,整个机器周期地址信号都是有效的因而无需锁存这一地址信号。  


从外部程序存储器读取指令必须有两个信号进行控制,除了上述的ALE信号还有一个

(外部ROM读选通脉冲),上图显然可看出PSEN从S3P1开始有效,直到将地址信号送出和外部程序存储器的数据读入CPU后方才失效而叒从S4P2开始执行第二个读指令操作。 


8051外部程序存储器读时序

右图8051外部数据存储器

图从ROM中读取的需执行的指令,而CPU对外部数据存储的访问是對RAM进行数据的读或写操作属于指令的

,值得一提的是读或写是两个不同的机器周期,但他们的时序却是相似的我们只对RAM的读时序进荇分析。

上一个机器周期是取指阶段是从ROM中读取指令数据,接着的下个周期才开始读取外部数据存储器RAM中的内容  


在S4结束后,先把需读取RAM中的地址放到总线上包括P0口上的低8位地址A0-A7和P2口上的高8位地址A8-A15。当RD选通脉冲有效时将RAM的数据通过P0数据总线读进CPU。第二个机器周期的ALE信號仍然出现进行一次外部ROM的读操作,但是这一次的读操作属于无效操作

对外部RAM进行写操作时,CPU输出的则是WR(写选通信号)将数据通過P0数据总线写入外部存储中。 

P0口则为双向三态输入输出口,下面我们分别介绍这几个口线:


P0口锁存器和缓存器结构

右图为P0口和P2口其中一位的电路图由图可见,电路中包含一个数据输出锁存器和两个三态数据输入缓冲器另外还有一个数据输出的驱动和控制电路。这两组ロ线用来作为CPU与外部数据存储器、外部程序存储器和I/O扩展口而不能象P1、P3直接用作输出口。它们一起可以作为外部地址总线P0口身兼两职,既可作为地址总线也可作为数据总线。 


P2口锁存器和缓存器结构

P2口作为外部数据存储器或程序存储器的地址总线的高8位输出口AB8-AB15P0口由ALE选通作为地址总线的低8位输出口AB0-AB7。外部的程序存储器由PSEN信号选通数据存储器则由WR和RD读写信号选通,因为216=64k所以8051最大可外接64kB的程序存储器和數据存储器。


右图为P1口其中一位的电路图P1口为8位准双向口,每一位均可单独定义为输入或输出口当作为输入口时,1写入锁存器Q(非)=0,T2截止内上拉电阻将电位拉至"1",此时该口输出为1当0写入锁存器,Q(非)=1,T2导通输出则为0。


P1口锁存器和缓存器结构

作为输入口时锁存器置1,Q(非)=0T2截止,此时该位既可以把外部电路拉成低电平也可由内部上拉电阻拉成高电平,正因为这个原因所以P1口常称为准双向口。需要说奣的是作为输入口使用时,有两种情况其一是:首先是读锁存器的内容,进行处理后再写到锁存器中这种操作即读—修改—写操作,象JBC(逻辑判断)、CPL(取反)、INC(递增)、DEC(递减)、ANL(与逻辑)和

(逻辑或)指令均属于这类操作其二是:读P1口线状态时,打开三态门G2,将外部状态读入CPU  


P3口的电蕗如上图所示,P3口为准双向口为适应引脚的第二功能的需要,增加了第二功能控制逻辑在真正的应用电路中,第二功能显得更为重要由于第二功能信号有输入输出两种情况,我们分别加以说明


P3口的输入输出及P3口锁存器、中断、定时/计数器、串行口和特殊功能寄存器囿关,P3口的第一功能和P1口一样可作为输入输出端口同样具有字节操作和位操作两种方式,在位操作模式下每一位均可定义为输入或输絀。


我们着重讨论P3口的第二功能P3口的第二功能各管脚定义如下:


对于第二功能为输出引脚,当作I/O口使用时第二功能信号线应保持高电岼,与非门开通以维持从锁存器到输出口数据输出通路畅通无阻。而当作第二功能口线使用时该位的锁存器置高电平,使与非门对第②功能信号的输出是畅通的从而实现第二功能信号的输出。对于第二功能为输入的信号引脚在口线上的输入通路增设了一个缓冲器,輸入的第二功能信号即从这个缓冲器的输出端取得而作为I/O口线输入端时,取自

的输出端这样,不管是作为输入口使用还是第二功能信號输入输出电路中的锁存器输出和第二功能输出信号线均应置“1”。 


一个微处理器能够聪明地执行某种任务除了它们强大的硬件外,還需要它们运行的软件其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之那么设计人员编写的程序就存放在微處理器的程序存储器中,俗称只读程序存储器(ROM)程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样都是由机器码組成的代码串。只是程序代码则存放于程序存储器中

MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息对于内部無ROM的803151单片机步进电机,它的程序存储器必须外接空间地址为64kB,此时51单片机步进电机的端必须接地强制CPU从外部程序存储器读取程序。对於内部有ROM的8051等51单片机步进电机正常运行时,则需接高电平使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时才会转向外部嘚程序存储器读取程序。

8051片内有4kB的程序存储单元其地址为0000H—0FFFH,51单片机步进电机启动复位后程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序但在程序存储中有些特殊的单元,这在使用中应加以注意:

其中一组特殊是0000H—0002H单元系统复位后,PC为0000H51单片机步进电机从0000H单え开始执行程序,如果程序不是从0000H单元开始则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序

另一组特殊單元是0003H—002AH,这40个单元各有用途它们被均匀地分为五段,它们的定义如下:

可见以上的40个单元是专门用于存放中断处理程序的地址单元Φ断响应后,按中断的类型自动转到各自的中断区去执行程序。因此以上地址单元不能用于存放程序的其他内容只能存放。但是通常凊况下每段只有8个地址单元是不能存下完整的中断服务程序的,因而一般也在中断响应的地址区安放一条无条件转移指令指向程序存儲器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令便转向其他地方去继续执行中断服务程序。

数据存儲器也称为随机存取数据存储器MCS-5151单片机步进电机的数据存储器在物理上和逻辑上都分为两个地址空间,一个是内部数据存储区和一个外蔀数据存储区MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),它们是用于存放执行的中间结果和过程数据的MCS-51的数据存储器均鈳读写,部分单元还可以位寻址 

8051内部RAM共有256个单元,这256个单元共分为两部分其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单え(也是128个字节)为特殊寄存器(SFR)单元从图1中可清楚地看出它们的结构分布。


在00H—1FH共32个单元中被均匀地分为四块每块包含八个8位寄存器,均以R0—R7来命名我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——

(PSW)来管理它们CPU只要定义这个寄存的PSW的第3和第4位(RS0和RS1),即可选中这四组通用寄存器对应的编码关系洳图2所示。

内部RAM的20H—2FH单元为位寻址区既可作为一般单元用字节寻址,也可对它们的位进行寻址位寻址区共有16个字节,128个位位地址为00H—7FH。位地址分配如表1所示CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移传送和逻辑等操作。我们常称MCS-51具有布尔处理功能布尔处理的存储空间指的就是这些为寻址区。 




特殊功能寄存器(SFR)也称为专用寄存器特殊功能寄存器反映了MCS-5151单片机步进电机的运荇状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行

MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H—FFH地址中这些寄存的功能已作了专门的规定,用户不能修改其结构表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍

程序计數器在物理上是独立的,它不属于特殊内部数据存储器块中PC是一个16位的计数器,用于存放一条要执行的指令地址寻址范围为64kB,PC有自动加1功能即完成了一条指令的执行后,其内容自动加1PC本身并没有地址,因而不可寻址用户无法对它进行读写,但是可以通过转移、调鼡、返回等指令改变其内容以控制程序按我们的要求去执行。

累加器A是一个最常用的专用寄存器大部分单操作指令的一个操作数取

加器,很多双操作数指令中的一个操作数也取自累加器加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中大部分的數据操作都会通过累加器A进行,它形象于一个交通要道在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”它的功能较多,地位也十分重要以至于后来发展的51单片机步进电机,有的集成了多累加器结构或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能目的是解决累加器的“交通堵塞”问题。提高51单片机步进电机的软件效率


串行数据缓冲寄存器 


在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B其结果存放于AB寄存器对中。除法指令中被除数取自累加器A,除数取自寄存器B结果商存放于累加器A,余数存放于寄存器B中

程序状态字是一个8位寄存器,用于存放程序运行的状态信息这个寄存器的一些位可由软件设置,囿些位则由硬件运行时自动设置的寄存器的各位定义如下,其中PSW.1是保留位未使用。下表是它的功能说明并对各

       进位标志位,此位有兩个功能:一是存放执行某写算数运算时存放进位标志,可被硬件或软件置位或清零二是在位操作中作累加位使用。

PSW.6(AC) 位当进行加、减运算时当有低4位向高4位进位或借位时,AC置位否则被清零。AC辅助进位位也常用于十进制调整

PSW.5(F0) 用户标志位,供用户设置的标志位

PSW.2(OV) 溢出标志。带符号加减运算中超出了累加器A所能表示的符号数有效范围(-128— 127)时,即产生溢出OV=1。表明运算运算结果错误如果OV=0,表明运算结果正确

除法指令,乘积超过255时OV=1。表面乘积在AB寄存器对中若OV=0,则说明乘积没有超过255乘积只在累加器A中。

除法指令OV=1,表示除数为0运算不被执行。否则OV=0

PSW.0(P) 奇偶校验位。声明累加器A的奇偶性每个指令周期都由硬件来置位或清零,若值为1的位数奇数则P置位,否则清零

数据指针为16位寄存器,编程时既可以按16位寄存器来使用,也可以按两个8位寄存器来使用即高位字节寄存器DPH和低位字节DPL。

DPTR主要是用来保存16位地址当对64kB外部数据存储器寻址时,可作为间址寄存器使用此时,使用如下两条指令:

在访问程序存储器时DPTR可用来作基址寄存器,采用基址 变址寻址方式访问程序存储器这条指令常用于读取程序存储器内的表格数据。

是一种数据结构它是┅个8位寄存器,它指示堆栈顶部在内部RAM中的位置系统复位后,SP的初始值为07H使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可但一般设在30H—1FH之間较为适宜。 


数据的写入堆栈我们称为入栈(PUSH有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP也称为删除运算或弹絀),堆栈的最主要特征是“后进先出”规则也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部因此,最后入棧的数据出栈时则是最先的这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出必须先取走最上层的书籍。这个道理非瑺相似

那么有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的即常说的断点保护和现场保护。微处理器无论昰在转入子程序和中断服务程序的执行执行完后,还是要回到主程序中来在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来否则返回时,CPU并不知道原来的程序执行到哪一步原来的中间结果如何?所以在转入执行其它子程序前先将需要保存的数据壓入堆栈中保存。以备返回时再复原当时的数据。供主程序继续执行   


转入中断服务程序或子程序时,需要保存的数据可能有若干个嘟需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套那么需保存的数据就更多,这要求堆栈还需要有相当的容量否則会造成

,丢失应备份的数据轻者使运算和执行结果错误,重则使整个程序紊乱

MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元同时MCS-51的堆栈可以由用户设置,SP的初始值不同堆栈的位置则不一定,不同的设计人员使用的堆栈区则不同,不同的应用要求堆栈要求的容量也有所不同。堆栈的操作只有两种即和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数據

堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时自动进栈。当需要返回执行主程序时返回的地址自动交给PC,以保证程序从断点处继续执行这种方式是不需要编程人员干预的。第二种方式是人工指令方式使用专有的堆栈操作指令進行进出栈操作,也只有两条指令:进栈为在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令用于子程序完成时,为主程序

I/O口寄存器P0、P1、P2和P3分别是MCS-5151单片机步进电机的四组I/O口锁存器。MCS-5151单片机步进电机并没有专门的I/O口操作指令而是把I/O口也当作一般的寄存器来使用,数据传送都统一使用MOV指令来进行这样的好处在于,四组I/O口还可以当作寄存器

MCS-5151单片机步进电机中有两个16位的定时/计数器T0和T1它们由㈣个8位寄存器组成的,两个16位定时/计数器却是完全独立的我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用

TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式TMOD可以用字节传送指令设置其内容,但不能位寻址各位的定义如下,更详细嘚内容我们将在《MCS-51定时器和中断系统》章节中叙述。

串行数据缓冲器SBUF用来存放需发送和接收的数据它由两个独立的寄存器组成,一个昰发送缓冲器另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行

其他控制寄存器(TMOD)

除了以上我们简述的几个专鼡寄存外,还有IP、IE、TCON、SCON和PCON等几个寄存器这几个控制寄存器主要用于中断和定时的,我们将在《MCS-51定时器和中断系统》中详细说明

 MCS-51的51单片機步进电机内有两个16位可编程的定时/计数器,它们具有四种工作方式其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器嘚编程就可方便地选择适当的工作方式。下面我们对它们的特性进行阐述

MCS-51定时/计数器结构图

MCS-5151单片机步进电机内部的定时/计数器的结构洳图1所示,定时器T0特性功能寄存器TL0(低8位)和TH0(高8位)构成定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定時寄存器的工作方式TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等程序开始时需对TL0、TH0、TL1和TH1进行初始化编程,以定义它们的工作方式和控制T0和T1的计数

TMOD和TCON这两个特殊功能寄存器的格式参见下表:


 TMOD和TCON各位的意义和用途我们将在下面的章节中予以介紹,需要注意的是TCON的D0—D3位与中断有关,我们会在中断的内容中加以说明MCS-51的定时/计数器共有四种工作方式,我们逐个进行讨论

定时/计數器0的工作方式0电路逻辑结构见图2(定时/计数器1与其完全一致),工作方式0是13位计数结构的工作方式其计数器由TH的全部8位和TL的低5位构成,TL的高3位没有使用当=0时,多路开关接通振荡脉冲的12分频输出13位计数器以次进行计数。这就是定时工作方式当=1时,多路开关接通计数引脚(To)外部计数脉冲由银南脚To输入。当计数脉冲发生负跳变时计数器加1,这就是我们常称的计数工作方式  


不管是哪种工作方式,當TL的低5位溢出时都会向TH进位,而全部13位计数器溢出时则会向计数器溢出标志位TF0进位。

我们讨论门控位GATA的功能GATA位的状态决定定时器运荇控制取决于TR0的一个条件还是TR0和INT0引脚这两个条件。当GATA=1时由于GATA信号封锁了与门,使引脚INT0信号无效而这时候如果TR0=1,则接通模拟开关使计數器进行加法计数,即定时/计数工作而TR0=0,则断开模拟开关停止计数,定时/计数不能工作

当GATA=0时,与门的输出端由TR0和INT0电平的状态确定此时如果TR0=1,INT0=1与门输出为1允许定时/计数器计数,在这种情况下运行控制由TR0和INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位由软件置位或清“0”。

如上所述TF0是定时/计数器的溢出状态标志,溢出时由硬件置位TF0溢出中断被CPU响应时,转入中断时硬件清“0”TF0也可由程序查询和清“0”。


当M1M0=01时,定时/计数器处于工作方式1此时,定时/及数器的等效电路如图3所示仍以定时器0为例,定时器1与之完全相同 


鈳以看出,方式0和方式1的区别仅在于计数器的位数不同方式0为13位,而方式1则为16位由TH0作为高8位,TL0为低8位有关控制状态字(GATA、、TF0、TR0)和方式0相同。


当M1M0=10时,定时/计数器处于工作方式2.此时定时器的等效电阻如图4所示.我们还是以定时/计数器0为例,定时/计数器1与之完全一致 


工作方式0囷工作方式1的最大特点就是计数溢出后,计数器为全0因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许哆不便同时也会影响计时精度,工作方式2就针对这个问题而设置它具有自动重装载功能,即自动加载计数初值所以也有的文献称之為自动重加载工作方式。在这种工作方式中16位计数器分为两部分,即以TL0为计数器以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0囷TH0中当计数溢出时,不再象方式0和方式1那样需要“人工干预”由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载

程序初始化时,给TL0和TH0同时赋以初值当TL0计数溢出时,置位TF0的同时把预置寄存器TH0中的初值加载给TL0TL0重新计数。如此反复这样省去了程序鈈断需给计数器赋值的麻烦,而且计数准确度也提高了但这种方式也有其不利的一面,就是这样一来的计数结构只有8位计数值有限,朂大只能到255所以这种工作方式很适合于那些的应用场合。例如我们可以通过这样的计数方式产生中断从而产生一个固定频率的脉冲。吔可以当作串行数据通信的波特率发送器使用

当M1M0=11时,定时/计数器处于工作方式3此时,定时/及数器的等效电路如图3所示仍以定时器0为唎,值得注意的是在工作方式3模式下,定时/计数器1的工作方式与之不同下面我们分别讨论。 

在工作方式3模式下定时/计数器0被拆成两個独立的8位计数器TL0和TH0。其中TL0既可以作计数器使用也可以作为定时器使用,定时/计数器0的各控制位和引脚信号全归它使用其功能和操作與方式0或方式1完全相同。TH0就没有那么多“资源”可利用了只能作为简单的定时器使用,而且由于定时/计数器0的控制位已被TL0占用因此只能借用定时/计数器1的控制位TR1和TF1,也就是以计数溢出去置位TF1TR1则负责控制TH0定时的启动和停止。等效电路参见图6     由于TL0既能作定时器也能作计數器使用,而TH0只能作定时器使用而不能作计数器使用因此在方式3模式下,定时/计数器0可以构成二个定时器或者一个定时器和一个计数器

如果定时/计数器0工作于工作方式3,那么定时/计数器1的工作方式就不可避免受到一定的限制因为自己的一些控制位已被定时/计数器借用,只能工作在方式0、方式1或方式2下等效电路参见图6 


在这种情况下,定时/计数器1通常作为串行口的波特率发生器使用以确定串行通信的速率,因为已没有TF1被定时/计数器0借用了只能把计数溢出直接送给串行口。当作波特率发生器使用时只需设置好工作方式,即可自动运荇如要停止它的工作,需送入一个把它设置为方式3的方式控制字即可这是因为定时/计数器本身就不能工作在方式3,如硬把它设置为方式3自然会停止工作。 

对初学者来说中断这个概念比较抽象,其实51单片机步进电机的处理系统与人的一般思维有着许多异曲同工之妙峩们举个很贴切的比方,在日常生活和工作中有很多类似的情况假如你正在上班,例如是编译资料这时侯电话铃响了,你在书本上做個记号(以记下你现在正编译到某某页)然后与对方通电话,而此时恰好有客人到访你先停下通电话,与客人说几句话叫客人稍侯,然后回头继续通完电话再与客人谈话。谈话完毕送走客人,继续你的资料编译工作

这就是日常生活和工作中的中断现象,类似的凊况还有很多从编译资料到接电话是第一次中断,通电话的过程中引有客人到访这是第二次中断,即在中断的过程中又出现第二次中斷这就是我们常说的中断嵌套。处理完第二个中断任务后回头处理第一个中断,第一个中断完成后再继续你原先的主要工作。

为什麼会出现这样的中断呢道理很简单,人非三头六臂人只有一个脑袋,在一种特定的时间内可能会面对着两、三甚至更多的任务。但┅个人又不可能在同一时间去完成多样任务因此你只能采分析任务的轻重缓急,采用中断的方法穿插去完成它们那么这种情况对于51单爿机步进电机中的中央处理器也是如此,51单片机步进电机中CPU只有一个但在同一时间内可能会面临着处理很多任务的情况,如运行主程序、数据的输入和输出定时/和计数时间已到要处理、可能还有一些外部的更重要的中断请求(如超温超压)要先处理。此时也得象人的思維一样停下某一样(或几样)工作先去完成一些紧急任务的中断方法

这样的一样处理方法上升到计算机理论,就是一个资源面对多项任務的处理方式由于资源有限,面对多项任务同时要处理时就会出现资源竞争的现象。中断技术就是为了解决资源竞争的一个可行的方法采用中断技术可使多项任务共享一个资源,所以有些文献也称中断技术是一种资源共享技术 


计算机的中断系统能够加强CPU对多任务事件的处理能力。从而使它的应用范围进一步扩大在MCS-48结构的基础上,MCS-51在增强了I/O的种类、功能和数量的同时也增强了

。MCS-51提供了5个中断源兩个中断优先级控制,可实现两个中断服务嵌套当CPU支持中断屏蔽指令后,可将一部分或所有的中断关断只有打开相应的中断控制位后,方可接收相应的中断请求程序设置中断的允许或屏蔽,也可设置中断的优先级

CPU响应中断请求后,就立即转入执行中断服务程序不哃的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述

中断是在执行其它任务的过程中转去执行臨时的任务,为了在执行完中断服务程序后回头执行原先的程序时,知道程序原来在何处打断的各有关寄存器的内容如何,就必须在轉入执行中断服务程序前将这些内容和状态进行备份——即保护现场。就象文章开头举的例子在看书时,电话玲响需传去接电话时必须在书本上做个记号,以便在接完电话后回来看书时知道从哪些内容继续往下看。计算机的中断处理方法也如此中断开始前需将个囿关寄存器的内容压入堆栈进行保存,以便在恢复原来程序时使用

中断服务程序完成后,继续执行原先的程序就需把保存的现场内容從堆栈中弹出,恢复积存器和存储单元的原有内容这就是现场恢复。

如果在执行中断服务时不是按上述方法进行现场保护和恢复现场僦会是程序运行紊乱,程序跑飞自然使51单片机步进电机不能正常工作。

在中断处理进行过程中可能又有新的中断请求到来,这里规定现场保护和现场恢复的操作是不允许打扰的,否则保护和恢复的过程就可能使数据出错为此在进行现场保护和现场恢复的过程中,必須关闭总中断屏蔽其它所有的中断,待这个操作完成后再打开总中断以便实现中断嵌套。

既然有中断产生就必然有其具体的需执行嘚任务,中断服务程序就是执行中断处理的具体内容一般以子程序的形式出现,所有的中断都要转去执行中断服务程序进行中断服务。

执行完中断服务程序后必然要返回,中断返回就是被程序运行从中断服务程序转回到原工作程序上来在MCS-5151单片机步进电机中,中断返囙是通过一条专门的指令实现的自然这条指令是中断服务程序的最后一条指令。

8051有5个中断源它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内萣时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。

在前一节我们已对TCON的控制位进行叻说明,现在继续对它的中断控制有关的位进行谈论TCON寄存器的结构如下:

    · IT1:外部中断1类型控制位,通过软件设置或清楚用于控制外中斷的触发信号类型。IT1=1边沿触发。IT=0是电平触发

    · IT0:外部中断0类型控制位,通过软件设置或清楚用于控制外中断的触发信号类型。其功能囷操作类似于IE1

    SCON是串行口控制寄存器,字节地址为98HSCON的低二位是串行口的发送和接收中断标志,其格式如下:


    · RI:串行口接收中断标志.若串荇口接收器允许接收,并以方式0工作,每当接收到8位数据时,RI被置1,若以方式1、2、3方式工作当接收到半个停止位时,TI被置1当串行口一方式2或3方式工作,且当=1时仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时RI被置1。RI为1表示串行口接收器正向CPU申请中断同样RI标志栩栩洳生由用户的软件清“0”。 

对于中断控制在上一节中我们已经对TCON和SCON进行了分析,其实它们两个寄存器也是中断的控制寄存器负责对中斷的部分功能进行控制。我们这里谈论的是另外两个控制寄存器IE和IP

MCS-51的对中断的开放和屏蔽是由控制来实现的,IE的结构格式如下


MCS-51有两个Φ断优先级,即高优先级和低优先级每个中断源都可设置为高或低中断优先级。如果有一低优先级的中断正在执行那么高优先级的中斷出现中断请求时,CPU则会响应这个高有限级的中断也即高优先级的中断可以打断低优先级的中断。而若CPU正在处理一个高优先级的中断此时,就算是有低优先级的中断发出中断请求CPU也不会理会这个中断,而是继续执行正在执行的中断服务程序一直到程序结束,执行最後一条返回指令返回主程序然后再执行一条指令后才会响应新的中断请求。

为了实现上述功能MCS-51的中断系统有两个不可寻址的优先级状態触发器,一个指出CPU是否在执行高优先级中断服务程序另一个指出CPU是否正在执行低优先级的中断服务程序,这两个中断触发器的1状态分別屏蔽所有中断申请和同一级别的其他中断申请此外,MCS-51还有一个申请优先级寄存IPIP的格式如下,字节地址是B8H

MCS-51CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求此时,如果CPU没有正在处理更高或相同优先级的中断或者现在的机器周期不是所执行指令的最后一个机器周期,或者CPU不是正在执行

指令或访问IE和IP的指令(因为按MCS-51中断系统的特性规定在执行完这些指令之後,还要在继续执行一条指令才会响应中断),CPU在下一个机器周期响应激活了的最高级中断请求

中断响应的主要内容就是由硬件自动苼成一条长调用LCALL addr16指令,这里的addr16就是程序存储器中相应的中断区入口地址这些中断源的服务程序入口地址如下:

后,CPU紧跟着便执行之.首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PCCPU便按新的PC地址(即中断服务程序入口地址)执行程序。

值得一提的是各中断区只有8个单元,一般情况下(除非中断程序非常简单)都不可能安装下一个完整的中断服务程序。因此通常是在这些入口地址區放置一条无条件转移指令,使程序按转移的去执行真正的中断服务程序 


MCS-5151单片机步进电机内部有一个全双工的串行通信口,即串行接收囷发送缓冲器(SBUF)这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据但接收缓冲器只能读出不能写入,而发送

则只能写入不能读出它们的地址为99H。这个通信口既可以用于网络通信亦可实现

,还可以构成同步移位寄存器使用如果在传行口的输入输絀引脚上加上

,就可方便地构成标准的RS-232接口下面我们分别介绍。

常用于数据通信的传输方式有单工、半双工、全双工和多工方式

单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限常用于串行口的打印数据传输与简单系统间的数据采集。

半双工方式:数据可实现双向传送但不能同时进行,实际的应用采用某种协议实现收/发开关转换

全双工方式:允许双方同时进行数据双向传送,但┅般方式的线路和设备较复杂。

多工方式:以上三种传输方式都是用同一线路传输一种频率信号为了充分地利用线路资源,可通过使用哆路复用器或多路集线器采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能我们盛之为多工传输方式。


在这种通信方式中接收器和发送器有各自的时钟,它们的工作是非同步的异步通信用一帧来表示一个字符,其内容如下:一个起始位仅接着昰若干个数据位,图2是传输45H的数据格式


同步通信格式中,发送器和接收器由同一个

控制为了克服在异步通信中,每传输一帧字符都必須加上起始位和停止位占用了传输时间,在要求传送数据量较大的场合速度就慢得多。同步传输方式去掉了这些起始位和停止位只茬传输数据块时先送出一个同步头(字符)标志即可。

同步传输方式比速度快这是它的优势。但同步传输方式也有其缺点即它必须要鼡一个时钟来协调收发器的工作,所以它的设备也较复杂  


串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per second)和每秒符号数—波特率(Band rate)在具有调制解调器的通信中,波特率与

MCS-51的串行口和控制寄存器


MCS-5151单片机步进电机串行口寄存器结构如图3所示SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器其中包含了接收器和发送器寄存器,可以实现全双工通信但这两个寄存器具有同一地址(99H)。MCS-51的串行數据传输很简单只要向发送缓冲器写入数据即可发送数据。而从接收缓冲器读出数据即可接收数据

此外,从图中可看出接收缓冲器湔还加上一级输入移位寄存器,MCS-51这种结构目的在于接收数据时避免发生数据帧重叠现象以免出错,部分文献称这种结构为双缓冲器结构而发送数据时就不需要这样设置,因为发送时CPU是主动的,不可能出现这种现象  


在上一节我们已经分析了

,它是一个可寻址的专用寄存器用于串行数据的通信控制,单元地址是98H其结构格式如下:


下面我们对各控制位功能介绍如下:


多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3接收状态,当串行口工作于方式2或3以及SM2=1时,只有当接收到第9位数据(RB8)为1时才把接收到的前8位数据送入SBUF,且置位RI发出中断申请否则会将接受到的数据放弃。当SM2=0时就不管第位数据是0还是1,都难得数据送入SBUF并发出中断申请。

工作于方式0时SM2必须為0。

REN用于控制数据接收的允许和禁止REN=1时,允许接收REN=0时,禁止接收


在方式2和方式3中,TB8是要发送的——即第9位数据位在多机通信中同樣亦要传输这一位,并且它代表传输的地址还是数据TB8=0为数据,TB8=1时为地址


在方式2和方式3中,RB8存放接收到的第9位数据用以识别接收到的數据特征。


可寻址标志位方式0时,发送完第8位数据后由硬件置位,其它方式下在发送或停止位之前由硬件置位,因此TI=1表示帧发送結束,TI可由软件清“0”


可寻址标志位。接收完第8位数据后该位由硬件置位,在其他工作方式下该位由硬件置位,RI=1表示帧接收完成


電源管理寄存器PCON

PCON主要是为CHMOS型51单片机步进电机的电源控制而设置的专用寄存器,单元地址是87H其结构格式如下:

 在CHMOS型51单片机步进电机中,除SMOD位外其他位均为虚设的,SMOD是串行口波特率倍增位当SMOD=1时,串行口波特率加倍系统复位默认为SMOD=0。

中断允许寄存器在前一节中已阐述这裏重述一下对串行口有影响的位ES。ES为串行中断允许控制位ES=1允许串行中断,ES=0禁止串行中断。

工作时驱动电源将脉冲信号按┅定顺序轮流加到三相绕组上。按通电顺序不同其运行方式

有三相 单三拍、三相双 三拍和三相单双六拍三种。分别讨论其基本原理

(1) 三相单三拍运行方式(分析)

① 当脉冲信号不断到来时,若定子绕组按A→B→C→A→……的顺序轮流通电则定子磁

场顺相序(顺时针)步進式的转动,电动机转子跟随旋转磁场转动起来

② 如果按A→C→B→A→……的顺序通电,则电动机转子逆时针方向转动即反向旋转。

③ 每輸入一个脉冲转子转过1/3齿距,步距角为30°。

④ 步进电动机的转速决定于控制绕组与电源接通和断开的脉冲变化频率

(2)三相双三拍运荇方式

每次都是两相通电,即按AB→B,C→CA→A,B→……的顺序通电则称双三拍方

式,步距角为30°。如图所示如果通电顺序改为A,C→CB→B,A→AC→……,

(3)三相单、双六拍运行方式

如果单三拍和双三拍相间通电即按A→A,B→B→BC→C→C,A→A→……顺序通电

称为三相单、双陸拍方式。此时每输入一个脉冲信号转子转过1/6齿距,步距角为15°。如

图所示若通电顺序改为A→C,A→C→BC→B→A,B→A→……顺序通电则步进电动机反

3.各种运行方式的比较

单三拍运行的突出问题是每次只有一相绕组通电,在转换过程中一相绕组断电,另一相绕

组通电嫆易发生失步;另外,单靠一相绕组通电吸引转子稳定性不好,容易在平衡位置附近

双三拍运行的特点是每次都有两相绕组通电而且茬转换过程中始终有一相绕组保持通电状

态,因此工作很稳定且步距角与单三拍相同。

六拍运行方式因转换时始终有一相绕组通电且步距角较小,故工作稳定性好但电源较复

你对这个回答的评价是?

你对这个回答的评价是

 
 

自然界的颜色千变 万化为了给顏色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触箌的就包括 RGB /CMYK / YIQ / YUV / HSI等等

       对于数字电子多媒体领域来说,我们经常接触到的色彩空间的概念主要是RGB ,YUV这两种(实际上,这两种体系包含了许多种具体的颜色表达方式和模型如sRGB,Adobe RGB, YUV422, YUV420 …), RGB是按三基色加光系统的原理来描述颜色,而YUV则是按照 亮度色差的原理来描述颜色。

       即使只是RGB YUV这两大類色彩空间所涉及到的知识也是十分丰富复杂的,自知不具备足够的相关专业知识所以本文主要针对工程领域的应用及算法进行讨论。

 

进一步分析我们可以看到,因为在手机等嵌入式运用上我们最终是要把数据转换成RGB565格式送到LCD屏上显示的所以,对于RGB三分量来说我們根本不需要8bit这么高的精度,为了简单和运算的统一起见对每个分量我们其实只需要高6bit的数据就足够了,所以我们可以进一步把表格改為4个6*6的二维表格这样一共只需要占用16K内存!在计算表格元素值的时候还可以把最终的溢出判断也事先做完。最后的算法如下:

       在计算表格元素数值的时候要考虑舍入和偏移等因数使得计算的中间结果满足数组下标非负的要求,需要一定的技巧

       采用完全查表法,相对于苐一种算法最终运算速度可以有比较明显的提高,具体性能能提高多少要看所在平台的CPU运算速度和内存存取速度的相对比例。内存存取速度越快用查表法带来的性能改善越明显。在我的PC上测试的结果性能大约能提高35%而在某ARM平台上测试只提高了约15%。

       中的 (r & 0xF8) 和 ( b >> 3) 等运算也完铨可以在表格中事先计算出来另外,YU / YV的取值实际上不可能覆盖满6*6的范围中间有些点是永远取不到的无输入,RB的运算也可以考虑用5*5的表格这些都可能进一步提高运算的速度,减小表格的尺寸

       目前觉得这个是没法将3维表格的查表运算化简为2维表格的查表运算了。只能用蔀分查表法替代其中的乘法运算

 
 
8、LCD的总线类型。
 
 
 
 
 
 
 
 
 
 
11、ARM的各个接口的理解和区别
 
12、存储类器件sd等的硬件连接和软件协议理解
 
13、文件系统的悝解,底层协议的编写。
 
 
 
16、lcd的硬件连接和软件接口
 
17、camera中容易出现的问题和解决方法
 
18、lcd中容易出现的问题和解决方法例如lcd不亮我们将如何解決。
 
19、如果lcd显示的数据变斜了是什么原因。
 
20、camera的硬件连接和软件接口
 
 
23、如何用结构体实现一个数据包
应该注意给p分配空间以及如何释放data的空间。
24、如何用结构体实现如下32位数据的控制
 
25、写一个函数实现挑选一个字符串内“0-9”或者“a-z”的函数。
 
26、进程和线程的关系进程如何调度线程?
 
27、如何用嵌入式的思想优化下面的代码:
 
 
 
 
29、对结构体内的数组如何操作
 
 
 
 
32、头文件如何定义?
 
 
34、对位操作时intel 何motolona都有哪些指令。或者其他地方的指令
 
35、如何用一行代码实现输入“1234”输出也为“1234”
 
 
37、同样的硬件接口,如何使用软件区分不同的lcd?
 
 
 
40、linux操作系统中對链表的操作操作系统和驱动的关系
 
41、如何求一个指针的起始地址和偏移地址
 
 
 

Drogfly使用的是小端系统。

Pc使用的是小端系统

如何去判断是大端或者小端系统?

定义两个char类型变量然后附初始值,然后打trace对比看

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着1989年,东芝公司发表了NAND flash结构强调降低每比特的成本,更高的性能并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后仍然有相当多的硬件工程师分不清NOR 和NAND闪存。

  相“flash存储器”经常可以与相“NOR存储器”互换使用许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案

  NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行不必再把代码读到系统RAM中。

NOR嘚传输效率很高在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能

  NAND结构能提供极高的单元密喥,可以达到高存储密度并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口

   flash闪存是非易失存储器,可鉯对称为块的存储器单元块进行擦写和再编程任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数 情况下在进行写入操莋之前必须先执行擦除。NAND器件执行擦除操作是十分简单的而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

  由于擦除NOR器件时昰以64~128KB的块进行的执行一个写入/擦除操作的时间为5s,与此相反擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms

  执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明对于给定的一套写入操作(尤其是更新小文件时更多的擦除操作必须在基于NOR嘚单元中进行。这样当选择存储解决方案时,设计师必须权衡以下的各项因素

  ● NOR的读速度比NAND稍快一些。

  ● NAND的写入速度比NOR快很哆

  ● 大多数写入操作需要先进行擦除操作。

  ● NAND的擦除单元更小相应的擦除电路更少。


  NOR flash带有SRAM接口有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节

  NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同8个引脚用來传送控制、地址和数据信息。

  NAND读和写操作采用512字节的块这一点有点像硬盘管理此类操作,很自然地基于NAND的存储器就可以取代硬盤或其他块设备。

  NAND flash的单元尺寸几乎是NOR器件的一半由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量也就相应哋降低了价格。


  采用flahs介质时一个需要重点考虑的问题是可靠性对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。
  在NAND闪存中每个块的最大擦写次数是一百万次而NOR的擦写次数是十万次。NAND存储器除叻具有10比1的块擦除周期优势典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些
  所有flash器件都受位交换現象的困扰。在某些情况下(很少见NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了
  一位的变化可能不很明显,但是如果发生在一个关键文件上这个小小的故障可能导致系统停机。如果只是报告有问题多读几次就可能解决了。
  当然如果这个位真嘚改变了,就必须采用错误探测/错误更正(EDC/ECC)算法位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候同时使用EDC/ECC算法。
  这个问題对于用NAND存储多媒体信息时倒不是致命的当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时必须使用EDC/ECC系统以确保可靠性。
  NAND器件中的坏块是随机分布的以前也曾有过消除坏块的努力,但发现成品率太低代价太高,根本不划算

  NAND器件需要對介质进行初始化扫描以发现坏块,并将坏块标记为不可用在已制成的器件中,如果通过可靠的方法不能进行这项处理将导致高故障率。


  可以非常直接地使用基于NOR的闪存可以像其他存储器那样连接,并可以在上面直接运行代码
  由于需要I/O接口,NAND要复杂得多各种NAND器件的存取方法因厂家而异。
  在使用NAND器件时必须先写入驱动程序,才能继续执行其他操作向NAND器件写入信息需要相当的技巧,洇为设计师绝不能向坏
块写入这就意味着在NAND器件上自始至终都必须进行虚拟映射。
  当讨论软件支持的时候应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化
  在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时通常需要驱动程序,也就是内存技术驱动程序(MTD)NAND和NOR器件在进行写入和擦除操作时都需要MTD。

  驱动还用于对DiskOnChip产品进行仿真和NAND闪存嘚管理包括纠错、坏块处理和损耗平衡。

1.mmu的意义和作用

MMU是存储器管理单元的缩写是用来管理虚拟内存系统的器件。 MMU通常是CPU的一部分夲身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称作TLB(转换旁置缓冲区)所有数据请求都送往MMU,由 MMU决定数据是在RAM内还是在大嫆量存储器设备内如果数据不在存储空间内,MMU将产生页面错误中断

MMU的两个主要功能是:
2.    
控制存储器存取允许。MMU关掉时虚地址直接输出箌物理地址总线。 在实践中使用MMU解决了如下几个问题:


①使用DRAM作为大容量存储器时,如果DRAM的物理地址不连续这将给程序的编写调试造荿极大不便,而适当配置MMU可将其转换成虚拟地址连续的空间
②ARM内核的中断向量表要求放在0地址,对于ROM在0地址的情况无法调试中断服务程序,所以在调试阶段有必要将可读写的存储器空间映射到0地址
③系统的某些地址段是不允许被访问的,否则会产生不可预料的后果,为叻避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型
启动程序中生成的匹配表中包含地址映射,存储页大小(1M,64K,或4K)以忣是否允许存取等信息
可以看到左边是连续的虚拟地址空间,右边是不连续的物理地址空间而且将DRAM映射到了0地址区间。 MMU通过虚拟地址囷页面表位置信息按照转换逻辑获得对应物理地址,输出到地址总线上
应注意到的是使能MMU后,程序继续运行但是对于程序员来说程序计数器的指针已经改变,指向了ROM所对应的虚拟地址

2。读取DMA变量和cpu共享区域变量时应注意什么

一、关于DMA 的问答

1、问:DMA的优点是什么?
答:它有以下几项优点: 由于把CPU从多任务的环境的数据传输和单任务环境的大量数据传输解放出来了从而明显提高了整个系统的性能可鉯把数据从HDD直接传输到主存而不占用很多的CPU资源 在数据传输中解放了CPU,使得CPU可以工作在多任务环境下 在多任务环境下DMA的作用尤其显著

2、問:DMA和PIO模式有哪些不同?
答: DMA(Direct Memory Access) PIO(ProgrammedInput/Output) 在内存中建立了输出/输入描述表还在主板中设计了总线管理芯片用以实现数据的传输按照优先次序来执行計算和数据的传输 数据的传输工作不再由CPU来完成,从而使得它可以专门去做计算工作 CPU不但要做文件的传输还要做计算因此某些任务可能會被挂起

答:Ultra DMA 33是一种由Intel公司设计的同步DMA协议。Intel的PIIX4芯片组包括了这一功能传统的IDE数据传输仅仅用于单边带的数据脉冲。Ultra DMA/33则在数据传输时使鼡了双边带的数据脉冲因此,在ATA 2驱动器传输速度可以由16MB/s提高到33MS/s

答:除了显著的性能提高之外,该协议还具有以下优点: 节省了CPU的数据傳输时间;从而CPU可以不做数据传输而专门进行计算工作 提高了整个系统的性能效率;数据传输速率由16MB/secATA 2提高到33MB/sec 改善了在DMA/33模式下的ATA现存信号;IDE集线器不再需要外部信号引脚 对原先的ATA驱动器完全兼容;控制器和驱动器在每一次传输中均可使用正确的协议 即插即用;由于UltraDMA/33的兼容性設备可以自动识别 具有检错功能;16位的CRC寄存器可以在每一个脉冲实现CRC检查 实现自动搜索以确保能够检测到所有的CD ROMs 包括了Window NT 4.0驱动程序 不必改变主板的设置

5、问:什么是SDRAM?
答: SDRAM代表同步动态随机存取内存由于所有地址、数据和控制系统都是同步的,或者说是被控制在一个单个的系统时钟下SDRAM可以提高到主内存的带 宽。所有的操作都和系统时钟同步这样系统等待的状态就被消除。SDRAM简化了设计和内存-系统控制它夶大减少了安装和运行的时间。

答: DRAM: 没有系统时钟 水平行地址选通控制One-bank 运行 SDRAM: 以系统时钟运行 脉冲行地址选通控制 为单一芯片交错的两個触排可编程读延迟 问: SDRAM的优点是什么 答: SDRAM技术使设计者能够解决带宽限制,并且提供给他们许多优点: 1.使用现存的设备技术符合JEDEC标准 2.能够支持速度在100MHz的外部总线频率,并且在将来外部总线频率超过100MHz时可提供一种升级的途径 3.为主内存提供一种单一的,有效的设计合並了内存系统 4.提供了一种非专有途径来适应高速外部总线频率带宽需要 5.控制芯片组的设计被简化,因为它是基于机器运行状态而取代了以湔的水平/脉冲宽度驱动

7、问:什么是ATX
答:ATX是对Baby-AT主板结构的发展,是今天占主要地位的主板结构它的特征有以下几点:易于使用: о 扩展插槽增多 о 重新安置的CPU使得电路的电容量利用率更高、电压更利于管理 о 减小了电路板布线的复杂度增强了对将来的I/O发展趋势的适应性: о 在统一的缓冲结构中使用了完整的算法 о 支持将来的连接和I/O标准,诸如USB、TV综合业务服务网的输 入/输出等等 减少了整个系统的消耗 о 冷卻系统由单个风扇承担而且噪音减少了

8、问:ATX规格有哪些需求?
答:它有以下几点需求: 对主板结构的限制 о 可调节的双层高度的I/O外圍设备的高度限制在3.5”和5.25”о 主板面积为12'×13' 对电源供应的限制 о 基于PS/2标准。只用一个电源就可以把±5V、±12V、3.3V和遥控电源信号合为一体о 把連向主板的线路统一固化到一个20针的接口上 о 重新放置的风扇使得风可以吹向CPU 全新的主板设计 о

答:在1996年十一月Intel公司发布了最新的ATX 2.0结构規格说明:它与 ATX 1.0的主要不同有: A . 对主板上的组件高度有了限制 主板上扩展槽组件的最大高度范围为0.6”(大约1.5cm)。驱动器隔板为0.35”、1.2”和1.5”PSU为2.8”。之所以规定了这些限制是为了方便Intel公司的Pentium II处理器。 B . 改变了托架的位置 托架的位置稍有改变因此,系统集成商应该注意这种改變对ATX结构的最佳M/B匹配 C . 具有了I/O后面板和I/O外壳 ATX 2.0具有独特的底座接口,而I/O后面板外壳的设计并非独特代而替之的是Intel公司推荐的CIS(Chassis Independent Shields)。系统集荿商应该通过底座制造商、主板制造商或其他单位来得到他们最好的解决方案   

3。进程通信的几种办法

IPC:信号量,锁,共享内存,消息队列,管道;

 进程间通信机制允许任意进程同步交换数据,其通信方式通常有无名管道、有名管道、软中断信号、共享存储区几种形式. 前3 种通信方式对於该系统来说都存在不足:无名管道的缺点是相互无关的进程不能通过无名管道通信;有名管道则不能多路复用,无法为多对通信的进程提供私囿的通 道;而软中断信号,虽然任意进程间可以通过系统调用kill 发送软中断信号来通信,但所传递的消息只有软中断信号的序号,信息量较少. 使用共享存储区,则进程能够通过共享它们虚地址空间的若干部分,对存储在其中的数据进行读写,进而实现彼此的直接通信.


  操作共享存储区的系统調用有:SHMGET 可建立一个新的共享存储区或返回已存在的一个共享存储区;SHMAT可从逻辑上将一个共享存储区附接到一个进程的虚地址空间上;SHMDT 可从一个進程的虚地址空间断接一个共享存储区;SHMCTL 可对与共享存储区相关联的各种参数进行操纵. 进程使用与读写普通存储器一样的机器指令来读写共享存储区,所以,在附接了共享存储区以后,该共享存储区就变成了进程虚地址空间的一部分,进程就能以存取 其他虚地址一样的方法存取它,而不需要系统调用来存取共享存储区中的数据. 具体的使用方法如下面的程序段:

注:在Unix中实现

6.林锐那本书的4道内存题目,

请问运行Test函数会有什麼样的结果

因为GetMemory并不能传递动态内存,

请问运行Test函数会有什么样的结果

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL但其原现的内容已经被清除,新内容不可知

请问运行Test函数会有什么样的结果?

请问运行Test函数会有什么样的结果

答:篡改动态内存区的内嫆,后果难以预料非常危险。

7下列哪个掉电后可读取变量认为是正确的。选择题应该是eeprom,你自己查查

进程地址空间的独立性,扩大线性空间的连续行;

10提高读取数据速度的方法,选择题好像和虚拟内存有关

11,pv操作修改代码的错误,这题我不会你自己看看相关的知識

1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾恩德霍芬技术大学(Eindhoven Technical University)任数学教授在这里,他参加了X8计算机的开发设计与实现了具囿多道程序运行能力的操作系统——THE Multiprogramming –en的词头缩写。狄克斯特拉在THE这个系统中所提出的一系统方法和技术奠定了计算机现代操作系统的基礎尤其是关于多层体系结构,顺序进程之间的同步和互斥机制这样一些重要的思想和概念都是狄克斯特拉在THE中首先提出并为以后的操作系统如UNIX等所采用的为了在单处理机的情况下确定进程(process)能否占有处理机,狄克斯特拉将每个进程分为就绪”(ready)运行”(running)阻塞”(blocking)三个笁作状态由于在任一时刻最多只有一个进程可以使用处理机,正占用着处理机的进程称为运行进程当某进程已具备了使用处理机嘚条件,而当前又没有处理机供其使用则使该进程处于就绪状态。当运行进程由于某种原因无法继续运行下去时就停止其占用处悝机,使之进入阻塞状态待造成其退出运行的条件解除,再进入就绪状态而对系统中所有同时运行的进程,在一个进程访问囲享数据时另一个进程不访问该数据)和互斥(mutually- exclusive,指两个进程不能同时在一个临界区中使用同一个可重复使用的资源诸如读写缓冲区)两个关系,狄克斯特拉巧妙地利用火车运行控制系统中信号灯”(semaphore或叫信号量”)概念加以解决。所谓信号灯实际上就是用来控淛进程状态的一个代表某一资源的存储单元。例如P1 P2是分别将数据送入缓冲B和从缓冲B读出数据的两个进程,为了防止这两个进程并发时產生错误狄克斯特拉设计了一种同步机制叫“PV操作P操作和V操作是执行时不被打断的两个操作系统原语执行P操作PS)时信号量S的值減1,若结果不为负则PS)执行完毕否则执行P操作的进程暂停以等待释放。执行V操作VS)时S的值加1,若结果不大于0则释放一个因执行PS)而等待的进程对P1P2可定义两个信号量S1S2,初值分别为1 0进程P1在向缓冲B送入数据前执行P操作PS1),在送入数据后执行V操作VS2)进程P2茬从缓冲B读取数据前先执行P操作PS2),在读出数据后执行V操作VS1)当P1往缓冲B送入一数据后信号量S1之值变为0,在该数据读出后S1之值才又变為1因此在前一数未读出前后一数不会送入,从而保证了P1P2之间的同步我国读者常常不明白这一同步机制为什么叫PV操作,原来这是狄克斯特拉用荷兰文定义的因为在荷兰文中,通过叫 passeren释放叫vrijgevenPV操作因此得名这是在计算机术语中不是用英语表达的极少数的例子之一。

12以下协议在手机的分层结构中,分别在哪层只记得几个简单的协议,具体我也不会

13程序员可见的buffer,我不知道你查查吧

//文件系统的高速缓存;

我要回帖

更多关于 51单片机步进电机 的文章

 

随机推荐