专用系统的设计包括了系统的硬件设计和软件设计。
专用系统的硬件设计是根据专用系统的功能要求选择硬件设备,设计硬件设备的接口电路,并分配其地址。除此之外,还需根据系统对存储器的需要选择程序存储器和数据存储器的容量并分配地址。
专用系统的软件即系统程序包含了程序区、数据区和堆栈区等部分,程序区主要根据系统对硬件的要求设计一系列的程序,以调用这些硬件设备;数据区为程序中所用的数据工作单元;堆栈区则为使用子程序、中断程序时,存放程序指针或被保护的参数。因此在设计系统程序时,应根据系统硬件所扩展的程序存储器和数据存储器来分配程序区、数据区和堆栈区。
专用系统的系统程序和单一的程序不同,根据程序功能的要求,系统程序可采用分支程序、循环程序、子程序、查表程序等不同的程序结构,但这些程序仅仅是为完成某一个功能需要而采用的设计方法。作为专用系统的系统程序必须具备一个完整的结构,它必须保证在系统上电的时候能自动启动,并根据系统硬件的要求执行一定的功能。为此必须解决程序启动、系统初始化、堆栈使用和如何调用中断程序等问题。一个完整的系统程序采用如下结构:
程序启动地址定义 |
堆栈区设定 |
系统硬件初始化 |
数据区初始化 |
中断程序入口地址设定 |
主程序、子程序 |
中断服务程序 |
数据 |
1. 程序启动地址
在设计单一的程序时,通常根据使用的工作平台(如八位微处理器采用学习机、十六位微处理器采用PC机、微控制器采用仿真器)程序存储器的地址安排来选用程序的起始地址。在设计系统程序时,为保证在系统上电时自动进入系统程序,必须按照所用微处理器或微控制器复位后的程序指针来决定程序的起始地址。为此在设计系统的硬件时必须将程序存储器的地址与系统复位后的程序指针保持一致,同时在设计软件时,也必须将程序的起始地址与系统复位后的程序指针保持一致。
不同的微处理器或微控制器复位后程序指针的值各不相同,如八位微处理器Z80复位后的程序指针为0000H,十六位微处理器INTEL 8086/8088复位后的程序指针为FFFF0H,微控制器MCS-51单片机复位后的程序指针为0000H。因此在设计这些微处理器或微控制器的系统程序时,必须将程序的起始地址按上述要求设置。
2. 系统初始化
系统初始化对系统所用的硬件和数据区进行初始化设定。根据系统对硬件的要求,尤其是可编程接口电路的使用都要求系统在使用这些硬件之前对硬件的工作方式进行设定。数据区初始化是将数据区的内容按程序的要求进行设定。
3. 堆栈设置
在设计子程序、中断程序时,通常要用堆栈来存放程序指针或被保护的参数。在设计单一的程序时,通常不考虑堆栈的设置,这是因为所用的工作平台已对堆栈进行了设置,而在设计系统程序时应根据微处理器或微控制器对堆栈的要求设置堆栈。堆栈是采用先进后出方式存放的随机存储器,在八位微处理器Z80和十六位微处理器INTEL 8086/8088中,它可位于随机存储器的任何地址,在数据压入堆栈的时候,堆栈指针减小,而数据弹出堆栈的时候,堆栈指针加大。在微控制器MCS-51单片机中,规定堆栈必须在内部RAM的00H~7FH的范围中,在数据压入堆栈的时候,堆栈指针加大,而数据弹出堆栈的时候,堆栈指针减小。
堆栈设置是在存储器中划出一定的存储区域作为堆栈使用,具体做法是设定堆栈指针,在使用堆栈时堆栈指针将改变,应保证在程序运行的过程中,堆栈指针始终在设定的范围内。因此,在设计程序时应事先预计堆栈的大小,避免堆栈指针指向数据区或程序区,或超出存储器的范围。
在数据压入堆栈其指针减小的操作方式中,在使用堆栈时,堆栈指针先减1,然后将需压入堆栈的内容传送到指针指向的存储器。在数据压入堆栈其指针加大的操作方式中,在使用堆栈时,堆栈指针先加1,然后将需压入堆栈的内容传送到指针指向的存储器。因此在设定初始堆栈指针时,总将其指向堆栈区之外的第一个单元,即比实际所用的堆栈地址大(或小)1,以便在使用堆栈时从堆栈的第一个单元开始使用。
4. 中断程序
在系统程序中,为了调用各种硬件设备,或调用特定的软件,可采用程序中断的方法。不同的微处理器或微控制器具有不同的进入中断程序的方法。微处理器或微控制器的中断处理功能越强,则该微处理器或微控制器构成系统的对外部设备调用的功能也越强。
中断程序的设计包含了中断入口地址的设置和中断服务程序设计两部分,前者规定了中断服务程序的入口地址,当系统要求进入中断程序时,从该入口地址进入中断服务程序。根据微处理器或微控制器的结构,中断服务程序的入口地址的设置各不相同。中断服务程序则是以入口地址为起始地址的一段服务程序。与子程序不同的是,中断服务程序以中断返回指令结束,而子程序以一般的返回指令结束。类似于子程序,在中断服务程序中为了保护参数,通常采用将数据或标志压入堆栈的方法,此时应注意压入和弹出指令的配对。