智慧交通車輛測速實驗_第1頁
智慧交通車輛測速實驗_第2頁
智慧交通車輛測速實驗_第3頁
智慧交通車輛測速實驗_第4頁
智慧交通車輛測速實驗_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微機原理與接口技術實驗報告!學習資料僅供參考![智慧交通路口控制實驗]班級:姓名:學號:組員:一、實驗目的智慧交通路口控制是一個基于實際工程原理,結合文獻、現實十字路口交通的研究,對工程問題進行確定、表述和建模分析,獲得最優設計方案,理解并在工程實踐中遵守工程職業道德規范,根據實驗室實驗環境限定條件來確定實驗方案。所有知識涵蓋本課程中的并行接口8255芯片、匯編語言程序設計、算法分析、接口地址的確定、外圍設備的控制等。通過此實驗可以理解微機系統中接口電路的作用,掌握軟件硬件協同工作原理,熟悉微機原理與接口技術的綜合應用。最終達到如下實驗目的:1.掌握可編程并行接口8255芯片的工作原理2.掌握利用并行接口芯片8255實現信號燈控制的硬件設計和軟件設計3.掌握接口電路及匯編語言程序設計的調試方法4.了解PC機和實驗系統板的連接原理,理解系統機擴展原理5.了解并行接口芯片在工程實踐中的典型應用及實現方式。二、實驗設備與環境1.TPC-JK-II實驗系統1臺2.TPC-JK-II實驗系統所配套的軟件---TPC-JK-II集成開發環境1套3.PC微機1臺三、實驗內容及指標1、設計要求設計利用TPC-ZK-II實驗系統提供的8254芯片和實驗臺能提供、2MHz的時鐘頻率發生器分頻的模車輛測速制硬連和程序設計。2、設計目標和性能指標主要內容是:設計利用TPC-JK-II實驗系統提供的8254(8253)、8255芯片、七段數碼管、液晶顯示器、8*8點陣實現智慧交通測速制的硬件電路設計和程序設計。eq\o\ac(○,1)基礎部分:1)通過實際調研了解交通測速原理,確定實現的算法流程,編程實現并調試完成基于定時器測量的車輛測速的模擬控制。2)利用實驗系統設計硬件電路,明確8254、8255芯片端口地址(1)編程實現并調試完成車輛測速的模擬控制。通過TPC-ZK-II實驗箱8254(8253)接口芯片實現計數和定時功能。通過撥碼開閉模擬車輛進入或駛離測速區域,當開關處于閉合狀態時(向上撥通),表示車輛進入測速區域,反之表示駛離測速區域。通過TPC-ZK-II實驗箱LCD操作顯示速度值。合理選擇8254的工作方式以及計數初值,通過計數器來間接計算出時間,通過與距離換算得到速度,并通過DOS功能調用在屏幕上打印出來。通過12864LCD液晶滾動顯示出計數值(2)了解定時/計數器在工程實踐中的典型應用及實現方式分析設計方案并比較和其它可選的測速的技術性能差別。eq\o\ac(○,2)提高部分:1)多路速度測量數據模擬,將單路開關控制,改為通過4*4鍵盤輸入控制。通過TPCZK-II實驗箱上的4*4鍵盤模擬不同路段的車輛測速功能。以鍵盤的每一行代表不同的路段,不同路段可以有不同的限速,每行中的第一列和最后一列鍵按下時,代表測速開始和測速結束,例如按下"1"鍵表示進入測速區間、按下"4"鍵表示離開測速區間。8254只有3個定時/計數器,試評估4路并發測速的可行性,如何擴展實現多路并發測速。2)通過實驗箱上12864LCD液晶滾動顯示當前測速路段的車輛速度和該路段的限速。eq\o\ac(○,3)擴展部分:1)利用8254(8253)計數器產生。其中8254輸入時鐘頻率為1MHz。2)8255芯片在本次實驗中用于控制輸入,顯示輸出,功能較為繁多。在使用該芯片時,需要合理規劃,以充分利用該芯片的數據口。3)各芯片的端口地址需要根據硬件自行合理設計。4)掌握數碼管的連接方式以及相關程序的編寫。5)主機和從機之間的數據傳送和記錄,涉及DOS調用。3、硬件連接圖實驗硬件連接圖具體的連接方式為,IO編碼地址中的Y0和Y1要分別接在8254與8255的CS端,在8254中的計數器0的CLK0接1MHz脈沖、GATE0接+5v高電平、OUT0接CLK1、GATE1接+5v高電平、OUT2接CLK2、GATE2接撥碼開關K7,8255的PA接數碼管段選、PB0與PB1接數碼管位選S0、S1。四、程序流程圖計數器工作流程圖第一個和第二個計數器用作時鐘分頻,均工作在方式3,最終得到1Hz的方波信號,第三個計數器以此為時鐘工作在方式2作為輸入的閘門信號,每經過1秒計數值就減1,結束計數時用起點和終點的計數差值就可以計算出時間。撥碼開關輸入流程圖實驗臺包含4個開關K0至K3,開關撥到“1”位置時開關斷開,輸出高電平。撥到“0”位置時開關接通輸出低電平。電路中串接了保護電阻,接口電路不直接同+5V、GND相連,有效的防止因誤操作損壞成電路現象。4*4鍵盤程序流程圖4*4矩陣鍵盤是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每一個交叉點上,設置一個按鍵。使用該鍵盤時,采用對4*4矩陣鍵盤逐行逐列掃描的方式判斷是否有按鍵按下。五、方案設計及討論【方案設計】eq\o\ac(○,1)8254計數器初始化:計數器0和計數器1工作在方式3即方波發生器,各自分頻系數就是計數初值,選用1MHz的系統內部時鐘,分頻系數設為1000,得到1Hz的方波。計數器2設置工作在方式2,為了記錄更長的時間,計數初值越大越好故設為0FFFFH。eq\o\ac(○,2)8255初始化:A口的地址288H,采用PA0~7口的方式輸出,與數碼段段碼輸入相連,PB0與PB1與數碼管的片選信號相連,由于假設長度為100m一般速度均為一位或兩位數,所以用兩個數碼管可以顯示出速度。eq\o\ac(○,3)撥碼開關與脈沖發生:將撥碼開關與GATE2連接,用作閘門信號,而CLK0為1MHz脈沖,作為時鐘信號。eq\o\ac(○,4)屏幕顯示與數碼管顯示:調用Dos2功能將速度顯示到屏幕上,并且不斷循環測速直到開關完成一次開閉(即車輛通過開始和結束測量路段),數碼管可以用PA口輸入,但要都要注意數字與ASCII碼的轉換。方法一: 將8255A和8254初始化,82255A口控制數碼管顯示,B口選通數碼管,這里為一種實現方式,但是最終通過驗收的方式不是此方式,開關狀態采用PC0口讀取,并將開關和GATE2連接起來,此時OUT1輸出1Hz方波信號,計數器二工作在工作方式二,產生N-1個脈沖計數,計數值恰好為N秒。如果開關向上撥,則GATE2變成高電平,這里的計數器二開始計數,當開關向下撥時,停止計數。若開關向下撥,說明計數完畢,此時將計數器二計到的數鎖存到寄存器AX中,送給BX進行查表工作,將相應值送到A口輸出到數碼管,循環操作,使數碼管實時顯示。最后進行DOS顯示輸出。調用DOS2號功能,先判斷讀取到的數是否大于9,若大于,則加37H后打印,若不大于,則加30H后打印,在屏幕上顯示出來。方法二: 8254計數器0和計數器1工作在方式3即方波發生器,各自分頻系數就是計數初值,選用1MHz的系統內部時鐘,分頻系數設為1000,得到1Hz的方波。計數器2設置工作在方式2,計數初值設為0FFFFH。8255A口的地址288H,采用PA0~7口的方式輸出,與數碼段段碼輸入相連,PB0與PB1與數碼管的片選信號相連,由于假設長度為100m一般速度均為一位或兩位數,所以用兩個數碼管可以顯示出速度,撥碼開關與GATE2連接,用作閘門信號,而CLK0為1MHz脈沖,作為時鐘信號,調用Dos2功能將速度顯示到屏幕上,并且不斷循環測速直到開關完成一次開閉,數碼管可以用PA口輸入。【方案討論】討論一:計數器如何鏈接? 由于本次實驗是用計數器記錄時間來測量速度,但是在實驗箱中的脈沖頻率為1MHz的高頻脈沖,這顯然是不能用來測速的,而計數器還可以作為分頻器使用,只用將0、1、2分別按著一定規則連接,本次實驗類似于串聯,就可以將本來的高頻信號進行兩次的1000分頻,這樣一來我們就能得到低頻的1Hz信號,用于測量時間剛剛好。討論二:速度的最終顯示問題?在本實驗中是要測量速度,而計數器的測量時間可看成是的中間必須要得到的實驗數據,用于產生最后的測量速度,所以我們討論認為可以在數碼管和屏幕上時間,當最后完成測試后,得到的時間與路程運算得到最后的速度,然后最終再顯示在屏幕和數碼管上。討論二:如果計數器使用中計數方式?計數器中的數字有兩種計數方式,一個是不斷地加1,另一種是不斷地減1,從小到大和從大到小都能實現計數功能,而且硬件連接沒有區別,但從大到小在實際的匯編操作中更加簡單,且符合計數器的工作原理,如果對記錄時間要求不高的實驗中可用這種方法,從小到大顯示測量時間,需要不斷地對計數值作到ASCⅡ碼的轉換,但它符合我們思考的習慣,但是我們學習匯編是為了學習計算機的原理,這里我們采用第二種,不斷減一的方式。六、實驗結果分析撥碼開關向上撥動開始計時,當計數器時間不斷增加到20時候,我們將撥碼開關向下撥回,結束計時。 結束計時后數碼管顯示速度為05,由于假設路程為100m,所以當計時20s結束時,車輛速度就是5m/s,這時在屏幕上顯示為currentspeed:05結果也是正確,本次實驗順利完成。七、心得體會與分工 略【源代碼】一:DATASSEGMENT;此處輸入數據段代碼L8255_AEQU288H;A端口地址,數碼管數據L8255_BEQU289H;B端口地址,B0,B1段選L8255_CEQU28AH;C端口地址,C0讀撥碼開關L8255_KEQU28BH;寄存器端口地址L8254_0EQU280H;計數器0,工作方式3,1000分頻L8254_1EQU281H;計數器1,工作方式3,1000分頻,輸出1HzL8254_2EQU282H;計數器2,工作方式2,硬件控制,計數L8254_KEQU283H;寄存器端口地址FLAGDB0;撥碼開關狀態LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段碼ASCDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;保存數字1-9的ASCII碼TIMEDB0;時間TIME_GEDB0;時間個位TIME_SHIDB0;時間十位BUFDB100NUMDW0;計數結束的值,16位DATASENDSSTACKSSEGMENTSTACK;此處輸入堆棧段代碼DW256DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;***********并行IO8255初始化MOVDX,L8255_KMOVAL,81HOUTDX,AL;A方式0輸出,B方式0輸出,C7-C4輸出,C0-C3輸入;***********定時器8254初始化MOVDX,L8254_K;向8254寫控制字MOVAL,36H;使計數器0為工作方式3OUTDX,ALMOVAX,1000;寫入循環計數初值1000MOVDX,L8254_0OUTDX,AL;先寫入低字節MOVAL,AHOUTDX,AL;后寫入高字節MOVDX,L8254_KMOVAL,76H;設計數器1工作方式3,輸出1Hz方波OUTDX,ALMOVAX,1000;寫入循環計數初值1000MOVDX,L8254_1OUTDX,AL;先寫低字節MOVAL,AHOUTDX,AL;后寫高字節MOVDX,L8254_KMOVAL,0B4H;設計數器2工作方式2,循環計數,硬件控制OUTDX,ALMOVAX,0;寫入循環計數初值0MOVDX,L8254_2OUTDX,AL;先寫低字節MOVAL,AHOUTDX,AL;后寫高字節MOVFLAG,0MOVTIME,0;***********主循環START_MAIN:CALLSHOW_2;顯示時間CALLSHOW_DOSCALLKEY_SCAN;按鍵掃描CALLTIME_DATAUP;時間更新NEXT_MAIN:JMPSTART_MAIN;*********返回DOSMOVAH,4CHINT21H;*********兩位數碼管顯示子程序SHOW_2PROCPUSHAXPUSHBXPUSHDXMOVBL,10;將10放入寄存器BX,用來分離各位數MOVAL,TIMEMOVAH,0DIVBL;AL/BL,商放入AL,余數放入AHMOVTIME_GE,AHMOVAH,0DIVBLMOVTIME_SHI,AHMOVAH,0LEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIME_GEXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVTIME_GE,ALLEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIME_SHIXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVTIME_SHI,AL;個位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000001B;右側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,TIME_GEOUTDX,ALCALLDELAY1;延時;十位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000010B;左側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,TIME_SHIOUTDX,ALCALLDELAY1;延時POPDXPOPBXPOPAXRETSHOW_2ENDP;*********一位數碼管顯示子程序SHOW_1PROCPUSHAXPUSHBXPUSHDXCMPTIME,0FHJASHOW_1_ENDMOVDX,L8255_BMOVAL,00000001B;右側數碼管亮OUTDX,ALLEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIMEXLAT;查表指令,將DS:[BX+AL]的內容送到AL中;輸出MOVDX,L8255_A;自8255A的口輸出OUTDX,ALSHOW_1_END:POPDXPOPBXPOPAXRETSHOW_1ENDP;*********DOS顯示子程序SHOW_DOSPROCPUSHAXPUSHBXPUSHDXCMPFLAG,0JZSHOW_DOS_ENDMOVAL,TIMECMPBUF,ALJZSHOW_DOS_ENDMOVAL,TIMEMOVBUF,ALMOVBL,10;將10放入寄存器BX,用來分離各位數MOVAL,TIMEMOVAH,0DIVBL;AL/BL,商放入AL,余數放入AHMOVTIME_GE,AHMOVAH,0DIVBLMOVTIME_SHI,AHMOVAH,0MOVAL,TIME_SHI;ADDAL,30HLEABX,ASC;將數碼管碼表的首地址放入BXXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVDL,AL;用DOS的2號功能,輸出字符MOVAH,02HINT21HMOVAL,TIME_GE;ADDAL,30HLEABX,ASC;將數碼管碼表的首地址放入BXXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVDL,AL;用DOS的2號功能,輸出字符MOVAH,02HINT21HMOVDL,',';用DOS的2號功能,輸出字符MOVAH,02HINT21HSHOW_DOS_END:POPDXPOPBXPOPAXRETSHOW_DOSENDP;*********按鍵查詢顯示子程序,C0讀撥碼開關KEY_SCANPROCPUSHAXPUSHBXPUSHDXMOVDX,L8255_CINAL,DXANDAL,00000001BCMPAL,1;高電平計數JZK1;否則為0MOVFLAG,0JMPKEY_SCAN_ENDK1:MOVFLAG,1KEY_SCAN_END:POPDXPOPBXPOPAXRETKEY_SCANENDP;*********時間更新子程序子程序TIME_DATAUPPROCPUSHAXPUSHBXPUSHDXCMPFLAG,1JZT1T0:JMPTIME_DATAUP_ENDT1:MOVAL,10000000B;鎖存計數器2的值MOVDX,L8254_KOUTDX,ALMOVDX,L8254_2INAL,DX;計數器2低字節MOVAH,AL;暫存AHINAL,DX;計數器2高字節XCHGAH,AL;放入AXMOVNUM,AX;放計數末值MOVBX,0SUBBX,AXMOVTIME,BLTIME_DATAUP_END:POPDXPOPBXPOPAXRETTIME_DATAUPENDP;*********延時子程序1DELAY1PROC;數碼管延時PUSHAXPUSHCXPUSHDXMOVCX,0FFFHX1:LOOPX1POPDXPOPCXPOPAXRETDELAY1ENDPCODESENDSENDSTART方案二:DATASEGMENTLISTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATAENDSMSTACKSEGMENTSTACKDB100DUP(?)MSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:MSTACKSTART:MOVAX,DATAMOVDS,AX;*******************************************************8254初始化;控制寄存器地址283H;計數器0地址280H;計數器1地址281H;計數器2地址282HMOVDX,283H;設定各計數器工作方式MOVAL,00110110B;計數器0工作方式3方波發生器,先高后低,二進制計數OUTDX,AL;寫計數器0控制字MOVAL,01110110B;計數器1工作方式3方波發生器,先高后低,二進制計數OUTDX,AL;寫計數器1控制字MOVAL,10110100B;計數器2工作方式2分頻器,先高后低,二進制計數OUTDX,AL;寫計數器2控制字;設定各計數器計數初值(由輸入時鐘頻率確定)假定1MHzMOVDX,280HMOVAX,1000;計數初值/分頻系數1000OUTDX,AL;寫計數器0初值低八位MOVAL,AHOUTDX,AL;寫計數器0初值高八位MOVDX,281HMOVAX,1000;計數初值/分頻系數1000OUTDX,AL;寫計數器1初值低八位MOVAL,AHOUTDX,AL;寫計數器1初值高八位MOVDX,282HMOVAX,0FFFFH;計數器2計數初值OUTDX,ALMOVAL,AHOUTDX,AL;**********************************************************8255初始化;控制寄存器端口地址28BH;A口的地址288H;B口的地址289H;C口的地址28AHMOVDX,28BHMOVAL,10001001B;A口方式0輸出(接數碼管),B口方式0輸出(選通數碼管),PC7輸入(查詢開關撥斷)OUTDX,ALMOVDX,289HMOVAL,00000001B;PB0置1,只顯示數碼管最低位OUTDX,AL;************************************************************WAIT_:MOVDX,28AHINAL,DXANDAL,80HTESTAL,10000000BJZWAIT_WAIT1:MOVAL,3FHMOVDX,288HOUTDX,ALMOVDX,28AHINAL,DXANDAL,80HTESTAL,10000000BJZSTOP;測速完畢,GATE2無效,轉STOPJMPWAIT1;否則繼續檢測STOP:MOVAL,10000000B;計數器2鎖存命令MOVDX,283HOUTDX,AL;測速完畢發鎖存命令,寫入控制端口MOVDX,282HINAL,DX;讀計數器2的低字節MOVAH,ALINAL,DX;讀計數器2的高字節XCHGAH,AL;計數值存放在AX中MOVBX,0FFFFHSUBBX,AX;計算測速時間,取整處理MOVAL,[BX+LIST];取對應的陰極數碼管段碼MOVDX,288HOUTDX,AL;8255的PA口輸出顯示結果CMPBL,9JLEPRINT;小于等于9直接打印ADDBL,7H;否則加7PRINT:MOVAL,BLADDAL,30H;測速時間轉化為對應ASCⅡ碼MOVDL,AL;調用2號功能輸出結果MOVAH,02HINT21HJMPWAIT_;進行下一次測速CODEENDSENDSTART二:DATASSEGMENTL8255_AEQU288H;A端口地址,數碼管數據L8255_BEQU289H;B端口地址,B0,B1位選數碼管L8255_CEQU28AH;C端口地址,C0讀撥碼開關L8255_KEQU28BH;寄存器端口地址L8254_0EQU280H;計數器0,工作方式3,1000分頻L8254_1EQU281H;計數器1,工作方式3,1000分頻,輸出1HzL8254_2EQU282H;計數器2,工作方式2,硬件控制,計數L8254_KEQU283H;寄存器端口地址FLAGDB0;撥碼開關狀懌LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;段碼ASCDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;保存數字1-9的ASCII碼TIMEDB0;時間TIME_GEDB0;時間個位TIME_SHIDB0;時間十位SPEEDDB0;速度SPEED_GEDB0;速度個位SPEED_SHIDB0;速度十位DISTANCEDB100;路程bufdb100MSG1DB0DH,0AH,"THESPEEDIS:$"NUMDW0;計數結束的值,16位DATASENDSSTACKSSEGMENTSTACKDW256DUP(?)STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;***********并行IO8255初始匿MOVDX,L8255_KMOVAL,81HOUTDX,AL;A方式0輸出,B方式0輸出,C7-C4輸出,C0-C3輸入;***********定時器8254初始化MOVDX,L8254_K;向8254寫控制字MOVAL,36H;使計數器0為工作方式3OUTDX,ALMOVAX,1000;寫入循環計數初值1000MOVDX,L8254_0OUTDX,AL;先寫入低字節MOVAL,AHOUTDX,AL;后寫入高字節MOVDX,L8254_KMOVAL,76H;設計數器1工作方式3,輸出1hz方波OUTDX,ALMOVAX,1000;寫入循環計數初值1000MOVDX,L8254_1OUTDX,AL;先寫低字節MOVAL,AHOUTDX,AL;后寫高字節MOVDX,L8254_KMOVAL,0B4H;設計數器2工作方式2,循環計數,硬件控制OUTDX,ALMOVAX,0;寫入循環計數初值0MOVDX,L8254_2OUTDX,AL;先寫低字節MOVAL,AHOUTDX,AL;后寫高字節MOVFLAG,0MOVTIME,0;***********主循玿START_MAIN:CALLCLECALLSHOW_2;顯示時間CALLSHOW_DOSCALLKEY_SCAN;按件掃描CALLTIME_DATAUP;時間更新NEXT_MAIN:JMPSTART_MAIN;*********返回DOSMOVAH,4CHINT21HCLEPROCPUSHAXPUSHBXPUSHDXMOVAX,0POPDXPOPBXPOPAXRETCLEENDP;*********兩位數碼管顯示子程序SHOW_2PROCpushAXpushBXpushDXCMPFLAG,0JZSHOWSPEEDMOVBL,10;將10放入寄存器BX,用來分離個位數MOVAL,TIMEMOVAH,0DIVBL;AL/BL,商放入AL,余數放入AHMOVTIME_GE,AHMOVAH,0DIVBLMOVTIME_SHI,AHMOVAH,0LEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIME_GEXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVTIME_GE,ALLEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIME_SHIXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVTIME_SHI,AL;個位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000001B;右側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,TIME_GEOUTDX,ALCALLDELAY1;延時;十位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000010B;左側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,TIME_SHIOUTDX,ALCALLDELAY1;延時JMPSHOW_2ENDSHOWSPEED:MOVBL,10;將10放入寄存器BX,用來分離個位數MOVAL,SPEEDMOVAH,0DIVBL;AL/BL,商放入AL,余數放入AHMOVSPEED_GE,AHMOVAH,0DIVBLMOVSPEED_SHI,AHMOVAH,0LEABX,LED;將數碼管碼表的首地址放入BXMOVAL,SPEED_GEXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVSPEED_GE,ALLEABX,LED;將數碼管碼表的首地址放入BXMOVAL,SPEED_SHIXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVSPEED_SHI,AL;個位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000001B;右側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,SPEED_GEOUTDX,ALCALLDELAY1;延時;十位MOVDX,L8255_A;自8255A的口輸出MOVAL,00000000B;數碼管滅OUTDX,ALMOVDX,L8255_BMOVAL,00000010B;左側數碼管亮OUTDX,ALMOVDX,L8255_A;自8255A的口輸出MOVAL,SPEED_SHIOUTDX,ALCALLDELAY1;延時LEADX,MSG1MOVAH,9INT21HMOVAL,SPEEDMOVBUF,ALMOVBL,10;將10放入寄存器BX,用來分離個位數MOVAL,SPEEDMOVAH,0DIVBL;AL/BL,商放入AL,余數放入AHMOVSPEED_GE,AHMOVAH,0DIVBLMOVSPEED_SHI,AHMOVAH,0MOVAL,SPEED_SHI;ADDAL,30HLEABX,ASC;將數碼管碼表的首地址放入BXXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVDL,AL;用dos02號功能,輸出字符MOVAH,02HINT21HMOVAL,SPEED_GE;ADDAL,30HLEABX,ASC;將數碼管碼表的首地址放入BXXLAT;查表指令,將DS:[BX+AL]的內容送到AL中MOVDL,AL;用dos02號功能,輸出字符MOVAH,02HINT21HSHOW_2END:popDXpopBXpopAXRETSHOW_2ENDP;*********一位數碼管顯示子程序SHOW_1PROCpushAXpushBXpushDXCMPTIME,0FHJASHOW_1_ENDMOVDX,L8255_BMOVAL,00000001B;右側數碼管亮OUTDX,ALLEABX,LED;將數碼管碼表的首地址放入BXMOVAL,TIMEXLAT;查表指令,將DS:[BX+AL]的內容送到AL中;輸出MOVDX,L8255_A;8255A的口輸出OUTDX,ALSHOW_1_END:popDXpopBXpopAXRETSHOW_1ENDP;*********DOS顯示子程序SHOW_DOSPROCpushAXpushBXpushDXCMPFLAG,0JZSHOW_DOS_ENDMOV

溫馨提示

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

評論

0/150

提交評論