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