單片機(jī)專用系統(tǒng)的系統(tǒng)程序構(gòu)成
專用系統(tǒng)是指利用微處理器構(gòu)成的具有特定功能的系統(tǒng),它是針對某個特定的功能專門設(shè)計的。近年來隨著計算機(jī)技術(shù)的發(fā)展,使家用電器到形形色色的工控系統(tǒng)、通信系統(tǒng)的智能化成為可能。這些系統(tǒng)采用微處理器或微控制器構(gòu)成智能系統(tǒng),即在一個電子系統(tǒng)中內(nèi)含微處理器或微控制器進(jìn)行系統(tǒng)的信息處理和控制。由于在系統(tǒng)中,微處理器僅作為一個部件,因而將其稱為嵌入式處理器。專用系統(tǒng)的設(shè)計包括了系統(tǒng)的硬件設(shè)計和軟件設(shè)計。
專用系統(tǒng)的硬件設(shè)計是根據(jù)專用系統(tǒng)的功能要求選擇硬件設(shè)備,設(shè)計硬件設(shè)備的接口電路,并分配其地址。除此之外,還需根據(jù)系統(tǒng)對存儲器的需要選擇程序存儲器和數(shù)據(jù)存儲器的容量并分配地址。
專用系統(tǒng)的軟件即系統(tǒng)程序包含了程序區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū)等部分,程序區(qū)主要根據(jù)系統(tǒng)對硬件的要求設(shè)計一系列的程序,以調(diào)用這些硬件設(shè)備;數(shù)據(jù)區(qū)為程序中所用的數(shù)據(jù)工作單元;堆棧區(qū)則為使用子程序、中斷程序時,存放程序指針或被保護(hù)的參數(shù)。因此在設(shè)計系統(tǒng)程序時,應(yīng)根據(jù)系統(tǒng)硬件所擴(kuò)展的程序存儲器和數(shù)據(jù)存儲器來分配程序區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū)。
專用系統(tǒng)的系統(tǒng)程序和單一的程序不同,根據(jù)程序功能的要求,系統(tǒng)程序可采用分支程序、循環(huán)程序、子程序、查表程序等不同的程序結(jié)構(gòu),但這些程序僅僅是為完成某一個功能需要而采用的設(shè)計方法。作為專用系統(tǒng)的系統(tǒng)程序必須具備一個完整的結(jié)構(gòu),它必須保證在系統(tǒng)上電的時候能自動啟動,并根據(jù)系統(tǒng)硬件的要求執(zhí)行一定的功能。為此必須解決程序啟動、系統(tǒng)初始化、堆棧使用和如何調(diào)用中斷程序等問題。一個完整的系統(tǒng)程序采用如下結(jié)構(gòu):
程序啟動地址定義 |
堆棧區(qū)設(shè)定 |
系統(tǒng)硬件初始化 |
數(shù)據(jù)區(qū)初始化 |
中斷程序入口地址設(shè)定 |
主程序、子程序 |
中斷服務(wù)程序 |
數(shù)據(jù) |
1. 程序啟動地址
在設(shè)計單一的程序時,通常根據(jù)使用的工作平臺(如八位微處理器采用學(xué)習(xí)機(jī)、十六位微處理器采用PC機(jī)、微控制器采用仿真器)程序存儲器的地址安排來選用程序的起始地址。在設(shè)計系統(tǒng)程序時,為保證在系統(tǒng)上電時自動進(jìn)入系統(tǒng)程序,必須按照所用微處理器或微控制器復(fù)位后的程序指針來決定程序的起始地址。為此在設(shè)計系統(tǒng)的硬件時必須將程序存儲器的地址與系統(tǒng)復(fù)位后的程序指針保持一致,同時在設(shè)計軟件時,也必須將程序的起始地址與系統(tǒng)復(fù)位后的程序指針保持一致。
不同的微處理器或微控制器復(fù)位后程序指針的值各不相同,如八位微處理器Z80復(fù)位后的程序指針為0000H,十六位微處理器INTEL 8086/8088復(fù)位后的程序指針為FFFF0H,微控制器MCS-51單片機(jī)復(fù)位后的程序指針為0000H。因此在設(shè)計這些微處理器或微控制器的系統(tǒng)程序時,必須將程序的起始地址按上述要求設(shè)置。
2. 系統(tǒng)初始化
系統(tǒng)初始化對系統(tǒng)所用的硬件和數(shù)據(jù)區(qū)進(jìn)行初始化設(shè)定。根據(jù)系統(tǒng)對硬件的要求,尤其是可編程接口電路的使用都要求系統(tǒng)在使用這些硬件之前對硬件的工作方式進(jìn)行設(shè)定。數(shù)據(jù)區(qū)初始化是將數(shù)據(jù)區(qū)的內(nèi)容按程序的要求進(jìn)行設(shè)定。
3. 堆棧設(shè)置
在設(shè)計子程序、中斷程序時,通常要用堆棧來存放程序指針或被保護(hù)的參數(shù)。在設(shè)計單一的程序時,通常不考慮堆棧的設(shè)置,這是因為所用的工作平臺已對堆棧進(jìn)行了設(shè)置,而在設(shè)計系統(tǒng)程序時應(yīng)根據(jù)微處理器或微控制器對堆棧的要求設(shè)置堆棧。堆棧是采用先進(jìn)后出方式存放的隨機(jī)存儲器,在八位微處理器Z80和十六位微處理器INTEL 8086/8088中,它可位于隨機(jī)存儲器的任何地址,在數(shù)據(jù)壓入堆棧的時候,堆棧指針減小,而數(shù)據(jù)彈出堆棧的時候,堆棧指針加大。在微控制器MCS-51單片機(jī)中,規(guī)定堆棧必須在內(nèi)部RAM的00H~7FH的范圍中,在數(shù)據(jù)壓入堆棧的時候,堆棧指針加大,而數(shù)據(jù)彈出堆棧的時候,堆棧指針減小。
堆棧設(shè)置是在存儲器中劃出一定的存儲區(qū)域作為堆棧使用,具體做法是設(shè)定堆棧指針,在使用堆棧時堆棧指針將改變,應(yīng)保證在程序運行的過程中,堆棧指針始終在設(shè)定的范圍內(nèi)。因此,在設(shè)計程序時應(yīng)事先預(yù)計堆棧的大小,避免堆棧指針指向數(shù)據(jù)區(qū)或程序區(qū),或超出存儲器的范圍。
在數(shù)據(jù)壓入堆棧其指針減小的操作方式中,在使用堆棧時,堆棧指針先減1,然后將需壓入堆棧的內(nèi)容傳送到指針指向的存儲器。在數(shù)據(jù)壓入堆棧其指針加大的操作方式中,在使用堆棧時,堆棧指針先加1,然后將需壓入堆棧的內(nèi)容傳送到指針指向的存儲器。因此在設(shè)定初始堆棧指針時,總將其指向堆棧區(qū)之外的第一個單元,即比實際所用的堆棧地址大(或。1,以便在使用堆棧時從堆棧的第一個單元開始使用。
4. 中斷程序
在系統(tǒng)程序中,為了調(diào)用各種硬件設(shè)備,或調(diào)用特定的軟件,可采用程序中斷的方法。不同的微處理器或微控制器具有不同的進(jìn)入中斷程序的方法。微處理器或微控制器的中斷處理功能越強(qiáng),則該微處理器或微控制器構(gòu)成系統(tǒng)的對外部設(shè)備調(diào)用的功能也越強(qiáng)。
中斷程序的設(shè)計包含了中斷入口地址的設(shè)置和中斷服務(wù)程序設(shè)計兩部分,前者規(guī)定了中斷服務(wù)程序的入口地址,當(dāng)系統(tǒng)要求進(jìn)入中斷程序時,從該入口地址進(jìn)入中斷服務(wù)程序。根據(jù)微處理器或微控制器的結(jié)構(gòu),中斷服務(wù)程序的入口地址的設(shè)置各不相同。中斷服務(wù)程序則是以入口地址為起始地址的一段服務(wù)程序。與子程序不同的是,中斷服務(wù)程序以中斷返回指令結(jié)束,而子程序以一般的返回指令結(jié)束。類似于子程序,在中斷服務(wù)程序中為了保護(hù)參數(shù),通常采用將數(shù)據(jù)或標(biāo)志壓入堆棧的方法,此時應(yīng)注意壓入和彈出指令的配對。
編輯:admin 最后修改時間:2018-05-08