紅綠燈控制系統(tǒng)的設(shè)計_第1頁
紅綠燈控制系統(tǒng)的設(shè)計_第2頁
紅綠燈控制系統(tǒng)的設(shè)計_第3頁
紅綠燈控制系統(tǒng)的設(shè)計_第4頁
紅綠燈控制系統(tǒng)的設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、紅綠燈控制系統(tǒng)的設(shè)計隨著城市人口的快速增長和機動車數(shù)量的大量增加,城市交通燈作為緩解交通壓力、提高道路通行效率的重要手段,其作用越來 越重要。因此,如何改進交通燈的設(shè)計,使其更好的適應(yīng)城市交通的發(fā)展也成為一個重要課題。紅綠燈控制系統(tǒng)是利用8253a定時/ 計數(shù)器芯片的定時功能,向8259a中斷控制器芯片發(fā)出定吋中斷請求,驅(qū)動8255a可編程并行接口芯片改變路口的led燈的亮滅。系 統(tǒng)采用dvcc8086-jhn微機原理與接口技術(shù)實驗箱作為測試與運行的平臺,8086匯編語言作為編程語言,并用masm5. 0作為匯編語言 開發(fā)環(huán)境。一、十字路口基本情況分析圖1-1是一個典型的十字路口示意圖。分別用

2、1、2、3、4表明東、南、西和北四個流向的主車道,每個主車道置有一個交通燈,用 丁指示對面車輛的左轉(zhuǎn)、右轉(zhuǎn)和直行。比如,1號路口的左轉(zhuǎn)燈亮?xí)r,即表示對面3號路口的車可以向左轉(zhuǎn)行駛。每個路口的情況都不 盡和同,要根據(jù)具體的情況來設(shè)置各個方向的放行時間。假設(shè),1、3方向是主干道,車流量比較大,可以將1、3路口的直行燈亮的時間 設(shè)得比較長;而2、4路口是一般道路,那么2、4路口直行燈亮的時間可以設(shè)得短一點。左轉(zhuǎn)燈和右轉(zhuǎn)燈放行的時間一般應(yīng)比直行燈放 行的時間要短。通常情況下,主干道直行時間應(yīng)在40-60秒左右;左轉(zhuǎn)和右轉(zhuǎn)通行時間應(yīng)在15-30秒z間。每個路口應(yīng)設(shè)置時間指示燈, 用來顯示剩余的通行時間,

3、并在時間快用盡時,交通燈閃爍一定的次數(shù),用來提醒行人。完成一個循壞應(yīng)在2分鐘以內(nèi),以免引起 車輛等待過長的時間。i0 0 0.圖1-1i字路口示意圖二、交通燈狀態(tài)轉(zhuǎn)換分析合理的設(shè)置每個路口、每個方向的交通燈的通行時間,對車輛能否及時疏散,有著決定性的作用。在本系統(tǒng)中,路口共設(shè)有四個狀態(tài),分別用來表示不同時間路口的通行狀況。狀態(tài)1的時候,2、4兩個路口的直行燈亮,東四方向行駛的車輛通行45秒。2、4方向步行的行人,也可以同時通過路口。當(dāng)通 行時間快結(jié)束的時候,led燈會閃爍,提醒車輛和行人通行時間快到了。狀態(tài)2的吋候,1、3兩個路口左轉(zhuǎn)燈亮,2、4兩個路口右轉(zhuǎn)燈亮15秒。在木狀態(tài)的吋候,四個路口

4、的車輛可以同吋進行疏散, 并且不發(fā)生沖突,大大地加快了車輛通行的速度。這樣的設(shè)置,在南京市新街口的十字路口有類似這樣的設(shè)置。通過在十字路口中間 設(shè)置相應(yīng)的行車線,行人也可以和車輛同時地經(jīng)過路口。當(dāng)通行時間快結(jié)束的時候,led燈會閃爍,提示通行時間即將結(jié)束。類似于狀態(tài)2,狀態(tài)3的時候,1、3兩個路口右轉(zhuǎn)燈亮,2、4兩個路口左轉(zhuǎn)燈亮15秒。通過在十字路口小間設(shè)置相應(yīng)的行車線, 行人也可以和車輛同時地經(jīng)過路口。當(dāng)通行時間快結(jié)束的時候,led燈會閃爍,提醒車輛和行人注意安全。類似于狀態(tài)1,狀態(tài)4的吋候,1、3兩個路口的直行燈亮,東西方向行駛的車輛通行45秒。1、3方向步行的行人,也可以同吋 通過路口。

5、完成四個狀態(tài)的一次循環(huán)需要120秒,完成了在適當(dāng)?shù)臅r間限度內(nèi),有效的疏散較大的通行量的目的。整個狀態(tài)轉(zhuǎn)換的過程見表l-lo每個路口燈的點亮情況通行時間路口 1路口 2路口 3路口 4左右人行狀態(tài)1 (zt1)1. 1直行直行40s20s40s1.2右轉(zhuǎn)右轉(zhuǎn)直行右轉(zhuǎn)右轉(zhuǎn)直行20s狀態(tài)2 (zt2)左轉(zhuǎn)右轉(zhuǎn)左轉(zhuǎn)右轉(zhuǎn)15s狀態(tài)3 (zt3)右轉(zhuǎn)左轉(zhuǎn)右轉(zhuǎn)左轉(zhuǎn)15s狀態(tài)4 (zt4)4. 1直行直行50s20s50s4. 2右轉(zhuǎn)直行右轉(zhuǎn)右轉(zhuǎn)直行右轉(zhuǎn)30s表1-1路口四個狀態(tài)和相互轉(zhuǎn)換過程三、硬件功能分析1. 8253a定時/計數(shù)器芯片8253a定時/計數(shù)器具有定時、計數(shù)雙功能。它具有三個相同且相互獨立的

6、16位減法計數(shù)器,分別稱為計數(shù)器0、計數(shù)器1和計數(shù) 器2。每個計數(shù)器計數(shù)頻率為0 2mhz。其內(nèi)部數(shù)據(jù)總線緩沖器為雙向三態(tài),故可直接連在系統(tǒng)數(shù)據(jù)總線上,通過cpu寫入計數(shù)初值,也可由cpu讀出計數(shù)當(dāng)前值。讀寫 控制邏輯,當(dāng)選中該芯片時,根據(jù)讀寫命令和送來的地址信息控制整個芯片工作。其工作方式通過控制字確定??刂谱旨拇嫫饔糜诮?收數(shù)據(jù)總線緩沖器的信息。當(dāng)寫入控制字時,控制計數(shù)器的工作方式;當(dāng)寫入數(shù)據(jù)時則裝入計數(shù)初值??刂萍拇嫫鳛?位,只能寫入 不能讀出。8253a內(nèi)部結(jié)構(gòu)見圖1-2。當(dāng)8253a執(zhí)行計數(shù)功能時,計數(shù)器裝入初值后,當(dāng)gate為高電平時,可用外部事件作為clk脈沖對計數(shù)值進行減1計數(shù)

7、。每來一 個脈沖減1,當(dāng)計數(shù)值減為0時,由out端輸岀一個標(biāo)志信號。當(dāng)8253a執(zhí)行定時功能時,計數(shù)器裝入初值后,當(dāng)gate為高電平時,由clk脈沖觸發(fā)開始自動計數(shù)。當(dāng)計數(shù)到零時,發(fā)計數(shù)結(jié)束 定時信號。8253a可以工作在方式0到方式5,常用的有方式2頻率發(fā)生器方式和方式3方波發(fā)生器方式。在方式2時,當(dāng)初值裝入后,out變?yōu)楦? 計數(shù)結(jié)束,out變?yōu)榈?。該方式下如果計?shù)未結(jié)朿,但gate為低時,立即停止計數(shù),將out變?yōu)楦?;?dāng)gate再變高時,便啟動一次新的 計數(shù)周期。在方式3時,當(dāng)裝入初值后,在gate±升沿啟動計數(shù),out輸出高電平;當(dāng)計數(shù)完成一半時,out輸出低電平。在本系統(tǒng)中

8、, 8253a工作于方式3方波發(fā)生器方式。圖1-2 8253a內(nèi)部結(jié)構(gòu)圖2. 8259a屮斷控制器芯片8259a是專為控制優(yōu)先級小斷而設(shè)計的芯片。它將屮斷源按優(yōu)先級排隊、辨認屮斷源和提供屮斷向量的電路集成于一體,只要用 軟件對它進行編程,就可以管理8級中斷。8259a的內(nèi)部結(jié)構(gòu)見圖1-3。它由中斷請求寄存器(irr)、優(yōu)先級分析器、中斷服務(wù)寄存器(isr)、中斷屏蔽寄存器(tmr)、數(shù)據(jù)總線 緩沖器、讀寫控制電路、級聯(lián)緩沖器和比較器組成。圖1-3 8259a的內(nèi)部結(jié)構(gòu)對8259a編程和初始化的時候,首先要寫初始化命令字icw1-icw4o寫icw1以確定中斷請求信號類型,清除中斷屏蔽寄存器,進

9、行中斷優(yōu)先級排隊和確定系統(tǒng)是用單片還是多片。 寫icw2用來定義中斷向量的高五位類型碼。1cw3可以定義主片8259a屮斷請求線上1r0-1r7有無級聯(lián)的8259a從片。寫icw4用來定義8259a工作時用8085模式述是8088模式,以及屮斷服務(wù)寄存器復(fù)位方式等。初始化命令字寫完以后,耍8259a的控制命令字,它包括0cwl-0cw3o寫0cw1可以設(shè)置或清除對中斷源的屏蔽。寫0cw2設(shè)置優(yōu)先級是否進行循環(huán)、循環(huán)的方式和中斷結(jié)束的方式。8259a復(fù)位時口動設(shè)置iro優(yōu)先權(quán)最高,1r7優(yōu)先權(quán)最低。寫0cw3用來設(shè)置查詢方式和特殊屏蔽方式,并可以讀取8259a屮斷寄存器的當(dāng)前狀態(tài)。在本系統(tǒng)中,使

10、用8259a的循壞等待中斷工作方式。3. 8255a可編程并行接口芯片8255a是一種可編程的芯片,它采用雙列直插封裝,用+ 5v電源供電。內(nèi)部有3個8位的i/o端口: au、b口和cu。這三個端口也可以分 為各有12位的兩組:a組和b組。a組包含a口8位和c口的高四位,b組包含b口8位和c口的低四位;a組控制和b組控制用于實現(xiàn)方式選擇 操作;讀寫控制邏輯用于控制芯片內(nèi)部寄存器的數(shù)據(jù)和控制字經(jīng)數(shù)據(jù)總線緩沖器送入各組接口寄存器屮。由于8255a數(shù)據(jù)總線緩沖器是 雙向三態(tài)8位驅(qū)動器,因此可以直接和8088系統(tǒng)數(shù)據(jù)總線相連。8255a的內(nèi)部邏輯結(jié)構(gòu)見圖1-4。圖1-4 8255a的內(nèi)部結(jié)構(gòu)8255a

11、有三種工作方式:方式0、方式1和方式2。它通過對控制寄存器寫入不同的方式選擇控制字來決定其三種不同的工作方式。方式0是基本輸入輸出方式。該方式下的a 口 8位和b 口 8位可以由輸入的控制字決定為輸入或輸;ii, c 口分成高4位(pc4-pc7) 和低4位(pco-pc3)兩組,也有控制字決定其輸入或輸出。需耍注意的是,該方式下,只能將c 口其中一組的四位全部置為輸入或輸方式1選通輸入輸出方式,又叫單向輸入輸出方式。它分為a、b兩組,a組市數(shù)據(jù)口 a和控制口 c的高4位組成,b組由數(shù)據(jù)口 b和控制口c的低4位組成。數(shù)據(jù)口的輸入輸出都是鎖存的,與方式0不同,由控制字來決定它是作為輸入還是輸出。

12、c口的和應(yīng)位用 于寄存數(shù)據(jù)傳送屮所需的狀態(tài)信號和控制信息。方式2為雙向輸入輸出方式。本方式只有a組可以使用。此時a 口為輸入輸出雙向口,c 口小的5位(pc3-pc7)作為a 口的控制 位。在本系統(tǒng)中,8255a的三個端口均工作丁方式0,全部為輸出口。四、系統(tǒng)設(shè)計(-)硬件設(shè)計1.電路分析本系統(tǒng)要實現(xiàn)的功能是模擬十字路口紅綠燈的工作狀況。按照預(yù)先設(shè)定并優(yōu)化的交通燈規(guī)則,控制led指示燈的亮滅,同時在實 驗箱的數(shù)碼管顯示屏上顯示剩余的時間。當(dāng)時間遞減到0的時候,改變led燈的狀態(tài),并刷新顯示屏顯示的時間。為了實現(xiàn)以上功能需求,木系統(tǒng)需要12個led指示燈,來分別代表四個路口的直行、左轉(zhuǎn)和右轉(zhuǎn)燈;

13、兩個雙位的數(shù)碼管顯示屏, 用來顯示1、3路口和2、4路口剩余的時間。為了實時地更新數(shù)碼管顯示屏上的數(shù)字,需要使用8255a可編程芯片來即時地改變顯示屏每個筆劃的電平高低,從而準(zhǔn)確地將需 要顯示的數(shù)字顯示在數(shù)碼管顯示屏上。由于交通燈需耍按秒進行計數(shù),所以需要一個均勻地吋鐘發(fā)生器。8253a芯片是個功能豐富、使用簡單的定吋/計數(shù)器。它可以根 據(jù)需要設(shè)置不同的顯示初值,從而產(chǎn)生所需頻率的時鐘脈沖,為系統(tǒng)提供計時和驅(qū)動其他事件的發(fā)生。8259a中斷控制器芯片可以在收到8253a發(fā)出的時鐘脈沖時,產(chǎn)生定時的中斷,在中斷服務(wù)程序中,更新顯示緩沖區(qū),并調(diào)用8255a芯片來執(zhí)行相關(guān)程序,從而更 新led燈和數(shù)

14、碼管顯示屏。本系統(tǒng)使用集成的電路和實驗環(huán)境,以方便進行電路的連接和測試,同時減少由于電路的復(fù)雜性而產(chǎn)生的錯誤。2.電路連接設(shè)計本系統(tǒng)所使用到的硬件包括8253a芯片、8259a芯片、8255a芯片、led指示燈和數(shù)碼管顯示屏。在電路連接的吋候,將8255a芯片的pb4-pb7連接至四個路口的直行燈,pc0-pc3連接至四個路口的右轉(zhuǎn)燈,pc4-pc7連接至四 個路口的左轉(zhuǎn)燈。通過改變8255a的pb 口和pc 口的值來實時地控制每個led燈的亮滅,從而改變十字路口的交通狀態(tài)。將8255a的 cs插孔cs-8255接譯碼輸出y7插孔。將8253a的t2clk插孔連接至1mhz的分頻輸出插孔。分頻

15、輸出插孔所輸出的頻率是將系統(tǒng)的主頻分解為一定的頻率,以供其他硬 件或者軟件使用。8253a從分頻插孔得到1mhz的固定頻率,再根據(jù)芯片內(nèi)部設(shè)定的計數(shù)初值,從而產(chǎn)生需要頻率的時鐘脈沖,由t20ut 口輸出,供其他芯片使用。將8253a的t20ut插孔連接至8259a的trq3插孔上。8259a的trq3中斷口每隔固定的時間便會收到8253a發(fā)送過來的時鐘脈沖, 作為中斷源來執(zhí)行中斷服務(wù)程序。在中斷服務(wù)程序中,完成更新數(shù)碼管顯示值和改變交通燈狀態(tài)的功能。偵件的連接見圖2-1和圖2-2。ub318253d1tclk1addoiow i or intrinta圖2-1系統(tǒng)電路圖8253a和8259a的

16、連接圖cs_8255dbor py7 vccpb1 wr pb2 ao pb3 a1 pb4 reset pb5 cs pb6pb78255al2(控制直行 燈)l5l8l3 (控制左轉(zhuǎn)燈)l6l9l12l1 (控制右轉(zhuǎn)燈)l4l7l10圖2-2系統(tǒng)電路圖8255a和led燈的連接圖(-)軟件設(shè)計1. 程序總體設(shè)計本系統(tǒng)采用“自上而下總體規(guī)劃、自下而上應(yīng)用開發(fā)”的策略進行總體設(shè)計和開發(fā)。先根據(jù)其功能需要,設(shè)定需要的功能模塊, 確定需耍編寫的子程序,從而使程序結(jié)構(gòu)清晰,便丁閱讀和調(diào)試,加快了系統(tǒng)完成的速度。結(jié)構(gòu)化的程序設(shè)計方法很適合用來開發(fā)匯 編語言程序,因為匯編語言的特性決定了其無法使用面向?qū)?/p>

17、象的程序開發(fā)方法;使用瀑布程序開發(fā)模型,從開始的時候把系統(tǒng)的需求 分析透徹,對系統(tǒng)的功能和各個模塊進行清晰的規(guī)劃,從而縮短系統(tǒng)開發(fā)所用的時間。為了完成系統(tǒng)的功能,系統(tǒng)的程序部分應(yīng)包含以下幾個模塊(見圖2-3)o各個模塊有的為一個子程序,有的為幾個子程序的集合, 有的為一段代碼,但是其功能卻是相互獨立和便于調(diào)用的。程序定義模塊。它用來定義系統(tǒng)的代碼段、數(shù)據(jù)段、堆棧段、所使用到的常量和變量、8253a、8255a和8259a的各控制口和數(shù)據(jù) 口地址,以及系統(tǒng)的儲存地址的偏移量。匯編語言所編寫的程序開頭有固定的格式,為下面程序的運行建立必須的條件。芯片初始化模塊用來初始化各個芯片,分為以下幾個步驟:

18、寫8253a芯片的控制字,選用方波發(fā)生器方式,并設(shè)定其使用通道2 進行工作;定義8255a的工作方式,使a、b、c三個端口均工作于方式0, 口為輸出口;寫8259a的icw1、icw2、icw3和icw4,設(shè)定 其工作方式為循環(huán)等待中斷方式。地址賦初值模塊(format)用來定義數(shù)字對應(yīng)的顯示字符,便于轉(zhuǎn)換模塊將時間緩沖區(qū)中的數(shù)值轉(zhuǎn) 換為便于數(shù)碼管顯示的字符;定義“err “顯示區(qū),供int7中斷服務(wù)程序調(diào)用;定義初始顯示緩沖區(qū)中的字符,用于系統(tǒng)初始運行的 時候,直接從此取值進行顯示;定義顯示緩沖區(qū),用于存放系統(tǒng)運行時剩余時間所對應(yīng)的顯示字符;定義交通燈的初始狀態(tài)、初始時 間緩沖區(qū)的值,便于系

19、統(tǒng)開始運行時從此數(shù)值開始遞減,led燈也按照這里定義的狀態(tài)值進行點亮。等待模塊(wating)在中斷請求沒有到來的時候,根據(jù)交通燈所處的狀態(tài),判斷應(yīng)調(diào)用哪個交通燈狀態(tài)程序,從而點亮相應(yīng)的led 燈;有中斷請求時,調(diào)用相應(yīng)的中斷服務(wù)程序。交通燈狀態(tài)模塊存放著四個交通燈狀態(tài)了程序zt1、zt2、zt3、zt4,供等待模塊調(diào)用。當(dāng)某個了程序被調(diào)用時,便點亮和應(yīng)的led 燈。屮斷處理程序分為兩個子程序。其*ll int7是在屮斷源電平信號不符合規(guī)定要求時,自動轉(zhuǎn)到7號屮斷,在數(shù)碼管顯示屏上顯示 "err"; int3是主要的中斷服務(wù)程序,用來對8253a發(fā)來的時鐘脈沖進行計數(shù),到達

20、一定次數(shù)后,調(diào)用newtime. convers和leddisp 模塊。更新時間緩沖區(qū)模塊(newtime)每次被調(diào)用的時候,將時間緩沖區(qū)中的時間減1,所以數(shù)碼管顯示屏上的數(shù)字才能夠不斷的減少。史新顯示緩沖區(qū)模塊(convers),用來將時間緩沖區(qū)中值轉(zhuǎn)換為適合在數(shù)碼管上顯示的字符,并存入顯示緩沖區(qū)。 顯示模塊(leddisp)使用8255a將顯示緩沖區(qū)的字符逐位顯示在數(shù)碼管顯示屏上,完成顯示數(shù)值的更新。圖2-3系統(tǒng)模塊圖2. 程序流程設(shè)計程序運行的流程圖見圖2-4。開始運行的時候,調(diào)用format初始化程序,給初始顯示區(qū)和電平錯誤顯示區(qū)賦初值,這樣系統(tǒng)會在初始顯示和電平有錯誤的時候, 顯示相

21、應(yīng)的字符;定義數(shù)值對應(yīng)的顯示字符,便丁轉(zhuǎn)換程序取到吋間數(shù)值對應(yīng)的字符;定義顯示緩沖區(qū)的地址,便于系統(tǒng)運行的吋候,把時間轉(zhuǎn)換成的顯示字符存到相應(yīng)的單元中;定義吋間緩沖區(qū)初值,系統(tǒng)運行后吋間將從該處的值開始減??;定義系統(tǒng)初始狀態(tài),便 于運行后led燈工作于相應(yīng)的狀態(tài)。接著對8253a、8255a和8259a進行初始化。定義8253a使用通道2,工作于方式3,其計數(shù)初值為3c50,每隔20ms向8259a發(fā) 出一個時鐘脈沖;8255a的a、b、c三個端口均工作于輸出方式;8259a i作于循環(huán)等待中斷方式。進入等待程序wating后,首先打開中斷,等待8259a發(fā)出的中斷請求。當(dāng)無中斷的時候,判斷系

22、統(tǒng)所處的狀態(tài),并調(diào)用相應(yīng)的交 通燈狀態(tài)子程序,使led燈相應(yīng)的點亮。當(dāng)有中斷的時候,則轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序,木系統(tǒng)主要為int3程序。int3程序首先關(guān)閉中斷,判斷中斷計數(shù)器data6單元 所存儲的屮斷次數(shù)是否達到20次,如果沒有則直接調(diào)用intr2程序,打開屮斷,并屮斷返回。如果達到20次,則將屮斷計數(shù)器清零; 再調(diào)用顯示程序leddisp把當(dāng)前時間顯示出來;接著調(diào)用時間緩沖區(qū)更新程序newtime將剩余時間減1;進入狀態(tài)判斷程序p1-p4,當(dāng) 相應(yīng)狀態(tài)的剩余時間未減到0的時候,調(diào)用c0nv程序,更新顯示緩沖區(qū)并中斷返冋,否則改變狀態(tài),并將新狀態(tài)將持續(xù)的時間寫入時 間緩沖區(qū),再調(diào)用c0nv

23、程序,更新顯示緩沖區(qū)并中斷返回。主程序流程圖n3. 重要代碼分析(1)中斷服務(wù)程序int3是木系統(tǒng)的程序最核心的了程序。它用來計算收到8353a發(fā)來的中斷次數(shù),當(dāng)次數(shù)達到20的時候,就口 動將次數(shù)清零、調(diào)用ledd1sp顯示程序、newtime時間緩沖區(qū)更新程序、狀態(tài)修改程序pl-p4和屮斷返回程序,完成數(shù)碼顯示屏上時 間的更新和led燈狀態(tài)的改變。以下是該程序的代碼分析,并注有詳細的功能說明。/等待模塊(wattng)在中斷請求沒有到來的時候,根據(jù)交通燈所處的狀態(tài),判斷應(yīng)調(diào)用哪個交通燈狀態(tài)程序,從而點亮相應(yīng)的led燈;有中斷請求時,調(diào)用相應(yīng)的中斷服 務(wù)程序。交通燈狀態(tài)模塊存放著四個交通燈狀態(tài)

24、子程序zt1、zt2、zt3、zt4,供等待模塊調(diào)用。當(dāng)某個子程序被調(diào)川時,便點亮相應(yīng)的led燈int3:;定義函數(shù)名稱clt;處理中斷時先關(guān)中斷pish ax ;保存堆棧push dxmov al, ds:data6 ; data6用丁-保存收到的中斷次數(shù),取當(dāng)前中斷次數(shù)inc al;將中斷次數(shù)加1mov ds: data6, al ;將加1后的|】斷次數(shù)寫回data6存儲單元cmp al, 2011;將中斷次數(shù)與20進行比較jae next ;大于等于20時,清零,并轉(zhuǎn)向狀態(tài)判斷程序,中斷返回jmp intre2;小丁時直接中斷返回mov byte ptr ds: data6, ooii

25、:將 data6 iff零call leddisp ;調(diào)用顯示程序,將顯示緩沖區(qū)中的數(shù)字顯示出來call newtime ;調(diào)用時間緩沖區(qū)更新程序,將時間緩沖區(qū)data & data9減1pl: cmp byte ptr ds: status, 01h;判斷是否是狀態(tài)一jnzp2;如果不是狀態(tài)一,則轉(zhuǎn)p2 cmp byte ptrjneconv:如果未減到0,則更新顯示緩沖區(qū),并中斷返回movbyteptrds:status,02h;如果減到0,則設(shè)置系統(tǒng)為狀態(tài)二movbyteptrds:data9,15h;設(shè)定狀態(tài)二時,路口的顯示初始值movbyteptrds:data8,15hj

26、mpconv;p2-p4類似于pl,在此略去。conv: call convers ;把時間緩沖區(qū)中的時間轉(zhuǎn)換到顯示緩沖區(qū)中intre2: mov al, 20h;寫8259控制口,并中斷返回mov dx, tntp0rt1octdx, alpopdx;彈出堆棧popaxds:ldata8j,ooh ;如果是狀態(tài)一,看時間否已經(jīng)減到01所對應(yīng)的子程序為例,來分析一下如何用8255a來控制交通燈的亮滅。ztl: push axpush dxmov al01010000b ;設(shè)置2, 4路口直行燈亮mov dx, bport:bport為8255a的pb 口的地址out dx, al;更改pb 口

27、的值,從而改變led燈顯示的狀態(tài)mov al, ooh;設(shè)置四個路口左轉(zhuǎn)燈,右轉(zhuǎn)燈全部關(guān)閉mov dx,cport;cport為8255a的pc 口的地址out dx,al;更改pc 口的值,從而改變led燈顯示的狀態(tài)pop dxpop axretzt1f:;狀態(tài)一閃爍程序:2、4路口直行燈閃爍push axpush dxmov cx, 1211;定義閃爍12次ztlflash:mov al, ooh;燈滅call delay2:短延時mov dx, bportmov al,o1o1oooob ;燈亮out dx, alcall delay2:短延時loop ztiflash;循環(huán)pop dx

28、pop axjmp wating:跳轉(zhuǎn)到等待程序(3)顯示了程序ledd1sp:push ax;將當(dāng)前寄存器保存到堆棧中push bxpush cxpush dxmov si,data4:將顯示緩沖區(qū)的首地址0520h存入simov al, 90h;初始顯示時data3 equ 0518hout dx, al mov byte ptr ds: data5, ooh : data5單元屮保存當(dāng)前顯示到第幾位led1: cmp byte ptr ds: data5, 0511 ;看是否顯示到第 5 位ja led2;如果顯示完5位后,返回mov bl, ds:data5mov bh, oh mov

29、 al, cs: lbx+st:將當(dāng)前位的顯示緩沖區(qū)的地址寫入al,mov dx, dataport ;寫8255a數(shù)據(jù)i i,以此改變顯示值out dx, aladd byte ptr ds: data5, 01h;顯示下一位jnz led1led2: pop dx:彈出堆棧并返回pop cxpop bxpop axret五.系統(tǒng)實現(xiàn)(-)軟件開發(fā)與運行環(huán)境本系統(tǒng)的代碼使用8086匯編語言編寫,所以代碼編寫環(huán)境可以使用任何文本編輯器。如系統(tǒng)白帶的記事本.dos k的編輯工具edit和文本編輯工具ultraedit等。木系統(tǒng)使用了 dvcc-8086jhn實驗箱附帶的dv88聯(lián)機軟件。它可以讀

30、取其他編輯軟件生成的masm格式的匯編語言文件(*.asm), 也可以作為匯編代碼的編輯、測試、運行環(huán)境。在顯示代碼的時候,可以把常用的匯編指令顯示為藍色,數(shù)值顯示為紅色,注釋顯示 為綠色,從而使論文清晰易讀,并容易發(fā)現(xiàn)代碼中的錯誤。dv88聯(lián)機軟件同樣可以作為系統(tǒng)的運行環(huán)境。系統(tǒng)運行的時候需耍將asm源程序編譯產(chǎn)生的obj文件傳送到實驗箱,由實驗箱上 的處理器和各個芯片負責(zé)執(zhí)行。(-)系統(tǒng)硬件環(huán)境交通燈控制系統(tǒng)采用的dvcc-8086jhn通用微機原理及接口實驗系統(tǒng),集成了 8253a計數(shù)/定時器芯片、8255a可編程并行接口芯 片和8259a中斷控制器芯片,并把大部分的引腳進行了封裝,方便

31、直接進行使用;并設(shè)有12個led顯示燈;系統(tǒng)分頻器可以產(chǎn)生特定 頻率的時鐘脈沖;固定的導(dǎo)線接口,方便使用導(dǎo)線把各芯片進行連接;并設(shè)有鍵盤,可以隨時控制程序的運行,方便進行調(diào)試。實驗箱使用串行口連接線與pc機的串口相連,然后使用dv88聯(lián)機軟件與實驗箱進行連接并傳送運行的程序。(三)系統(tǒng)運行步驟系統(tǒng)的代碼編寫完畢的時候,便可以進行程序的聯(lián)機調(diào)試了。將實驗箱的電源線連接好,使用串口通信線將實驗箱上的串口與pc機上的串口相連。將各個芯片和led燈按照硬件連接設(shè)計圖上 的圖示進行連接。打開實驗箱的電源,數(shù)碼管顯示屏上顯示dvcc-86,提示實驗箱初始化成功。在pc機上打開dv88聯(lián)機軟件,調(diào)用編輯好的

32、程序代碼。首先進行編譯,系統(tǒng)會口動調(diào)用masm程序?qū)Υa進行編譯。若沒有提示錯誤,便叮以點擊連接按鈕,調(diào)用link程序把編譯生成的obj文件進行連接,生成exe文件。再點進調(diào)試按鈕,把生成的可執(zhí)行文件 傳送到實驗箱,進行調(diào)試狀態(tài),此時屏幕會顯示實驗箱各個寄存器的值。最后點擊連續(xù)運行按鈕,實驗箱上的數(shù)碼顯示管和led燈便 會按照設(shè)計的要求進行工作。在運行的過程屮可以隨時按實驗箱上的reset鍵,屮斷程序的執(zhí)行,以便進行代碼的修改或者結(jié)束系統(tǒng)的運行。(四)系統(tǒng)測試結(jié)果按照表1-1中交通燈四個狀態(tài)所對應(yīng)的秒數(shù),在程序中為各個狀態(tài)子程序設(shè)定相應(yīng)的時間初值。測試運行的結(jié)果如下:開始運行時,系統(tǒng)在狀態(tài)一下

33、工作,兩個顯示屏顯示剩余吋間為45秒,并不斷遞減,同吋led燈的2、4路口的直行燈點亮;當(dāng) 狀態(tài)一的剩余時間減至零的時候,系統(tǒng)口動切換到狀態(tài)二,顯示屏顯示剩余時間變?yōu)?5秒并遞減,同時1、3路口的左轉(zhuǎn)燈和2、4路 口的右轉(zhuǎn)燈點亮;狀態(tài)二結(jié)束時,系統(tǒng)切換到狀態(tài)三,顯示屏的剩余時間變更為15秒,1、3路口的右轉(zhuǎn)燈和2、4路口的左轉(zhuǎn)燈點亮; 狀態(tài)三結(jié)束時,進入狀態(tài)四,顯示屏剩余時間變?yōu)?5秒,同時1、3路口的直行燈點亮。狀態(tài)四結(jié)束時,自動切換到狀態(tài)一循壞執(zhí)行。(-)重要源代碼1. convers子程序,用于將時間緩沖區(qū)中的數(shù)值轉(zhuǎn)換到顯示緩沖區(qū)。convers:moval, byte ptr ds:data9callcoxvers2addword ptr ds:data10,03hmoval, byte ptr ds:data8call

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論