微機原理及接口技術(shù) 實驗指導(dǎo)
《微機原理及接口技術(shù) 實驗指導(dǎo)》由會員分享,可在線閱讀,更多相關(guān)《微機原理及接口技術(shù) 實驗指導(dǎo)(44頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 《微機原理及接口技術(shù)》 實 驗 指 導(dǎo) 書 楊霞 周林英 編 長安大學(xué)電子與控制工程學(xué)院 2009年9月 44 前 言 本實驗指導(dǎo)是為適應(yīng)各大、中專院校開設(shè)微機原理及應(yīng)用方面的課程需做大量軟硬件實驗的需要而編寫的,供學(xué)生編程用。完成本實驗指導(dǎo)中的實驗,可使學(xué)生基本掌握8086/8088的結(jié)構(gòu)原理、接口技術(shù)、程序設(shè)計技巧。手冊中詳細敘述了各實驗的目的、內(nèi)容,列出了接線圖、程序框圖和實驗步驟。 主要學(xué)習(xí)內(nèi)容為80X86語言實驗環(huán)境配置、匯編源語言格式、輸出字符、循環(huán)結(jié)構(gòu)、子程序調(diào)用,以及加減乘除等指令操作、通用接口芯片的接口編程與使用。所有實
2、驗都是相互獨立的,次序上也沒有固定的先后關(guān)系,在使用本書進行教學(xué)時,教師可根據(jù)教學(xué)要求,選擇相應(yīng)實驗。學(xué)習(xí)結(jié)束后,要求學(xué)生能夠獨立編寫出綜合加減乘除等指令,以及循環(huán)結(jié)構(gòu)、子程序調(diào)用等程序控制程序、看懂一般接口芯片電路圖。 目 錄 實驗一 清零程序 4 實驗二 拆字程序 6 實驗三 數(shù)據(jù)區(qū)移動 8 實驗四 多分支程序設(shè)計 10 實驗五 多字節(jié)減法運算 13 實驗六 顯示程序 16 實驗七 8251串口實驗 25 實驗八 步進電機控制 29 附錄一 匯編語言的存儲模型 36 附錄二 8279鍵值顯示程
3、序 37 實驗一 清零程序 一、實驗?zāi)康? 掌握8088匯編語言程序設(shè)計和調(diào)試方法。 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 把RAM區(qū)內(nèi)4000H-40FFH單元的內(nèi)容清零 。 四、程序框圖 五、源程序清單 .MODEL TINY .STACK 100 .DATA .CODE ORG 0100H START: MOV BX,4000H MOV AX,0000H MOV CX,80H L1: MOV [BX],AX INC BX INC B
4、X LOOP L1 JMP $ END START 六、實驗步驟 手動修改RAM區(qū)內(nèi)4000H-40FFH的內(nèi)容,連續(xù)或單步方式運行程序,檢查4000-40FFH內(nèi)容 執(zhí)行程序前后的變化。 七、思考 1、把4000H-40FFH中的內(nèi)容改成FF,如何修改程序。 2、把4000H-40FFH中的內(nèi)容改成00~FF,如何修改程序。 實驗二 拆字程序 一、實驗?zāi)康? 掌握匯編語言設(shè)計和調(diào)試方法。 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 把4000H單元的內(nèi)容拆開,高位送4001H低位,低位送4002H低位,4001H、4002H 的
5、高位清零,一般本程序用于把數(shù)據(jù)送顯示緩沖區(qū)時用。 四、程序框圖 五、源程序 .MODEL TINY .STACK .DATA .CODE START: MOV BX,4000H MOV AL,[BX] MOV AH,AL MOV CL,4 SHR AH,CL INC BX MOV [BX],AH AND AL,0FH INC BX MOV [BX],AL JMP $ 六、實驗步驟 手動修改4000H的內(nèi)容,用連續(xù)或單步方式運行程序,檢查4000H-4002H中內(nèi)容變化情況。 七、思考 1.如何用斷點方式調(diào)試本程序。 2.把4000H、4
6、001H單元低位的內(nèi)容合成一字送4002H單元。 實驗三 數(shù)據(jù)區(qū)移動 一、實驗?zāi)康? 掌握RAM中的數(shù)據(jù)操作。 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 把4100H源RAM區(qū)首址內(nèi)的16字節(jié)數(shù)據(jù)傳送到4200H目標(biāo)RAM區(qū)。 四、設(shè)計思想 程序要求把內(nèi)存中某一數(shù)據(jù)區(qū)(稱為源數(shù)據(jù)塊)傳送到另一存儲區(qū)(稱為目的數(shù)據(jù)塊)。源數(shù)據(jù)塊和目的數(shù)據(jù)塊在存儲器中可能有三種情況,如下圖: 對于兩個數(shù)據(jù)塊分離的情況,如圖(a),數(shù)據(jù)的傳送從數(shù)據(jù)塊的首址開始,或者從數(shù)據(jù)塊的末址開始均可。但對于有部分重疊的情況,則要加以分析,否則重疊部分會因“搬移”而遭破壞。
7、可以得出以下結(jié)論:當(dāng)源數(shù)據(jù)首址>目的塊首址時,從數(shù)據(jù)塊首址開始傳送數(shù)據(jù)。 當(dāng)源數(shù)據(jù)塊首址<目的塊首址時,從數(shù)據(jù)塊末地址開始傳送數(shù)據(jù)。 五、程序框圖 六、源程序清單 .MODEL TINY .STACK .DATA .CODE ORG 0100H START0: MOV CX,0010H MOV SI,4100H MOV DI,4200H CMP SI,DI JA A42 ADD SI,CX ADD DI,CX A41: DEC SI DEC DI MOV AL,[SI] MOV [DI],AL LOOP A
8、41 JMP $ A42: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP A42 JMP $ END START0 七、實驗步驟 調(diào)試運行3060程序,檢查4100-410FH中內(nèi)容是否和4200-420FH中內(nèi)容完全一致。 八、思考 1.把4200H源RAM區(qū)首址內(nèi)的16字節(jié)數(shù)據(jù)傳送到4100H目標(biāo)RAM區(qū)。 2.把4100H源RAM區(qū)首址內(nèi)的16字節(jié)數(shù)據(jù)傳送到410AH目標(biāo)RAM區(qū)。 實驗四 多分支程序設(shè)計 一、實驗?zāi)康? 掌握匯編語言的編程,熟悉程序散轉(zhuǎn)的設(shè)計方法。 二、實驗設(shè)備 S
9、TAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 編寫程序,根據(jù)接收到的鍵值,作不同的處理。 四、設(shè)計思想 多分支結(jié)構(gòu)相當(dāng)于一個多路開關(guān),在程序設(shè)計中通常是根據(jù)某寄存器或某單元的內(nèi)容進行程序轉(zhuǎn)移。在設(shè)計多分支轉(zhuǎn)移程序時,如果分支太多,則平均轉(zhuǎn)移速度太慢,本實驗采用轉(zhuǎn)移地址表實現(xiàn)多分支轉(zhuǎn)移,可以提高平均轉(zhuǎn)移速度。 五、程序框圖 六、實驗步驟 1、連線說明: E5區(qū) :CLK —— B2區(qū):2M E5區(qū) :CS —— A3區(qū):CS5 E5區(qū) :A0 —— A3區(qū):A0 E5區(qū) :A、B、C、D —— G5區(qū):A、B、C、D 2、在G5區(qū)的鍵盤上輸入
10、1位數(shù) 3、使用各種手段調(diào)試程序 3、結(jié)果顯示在G5區(qū)的數(shù)碼管上 七、源程序清單 ;調(diào)用GetKeyB返回鍵值,根據(jù)鍵值執(zhí)行相應(yīng)的程序 .MODEL TINY EXTRN Display8:NEAR, GetKeyB:NEAR .STACK 100 .DATA BUFFER DB 8 DUP(?) .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP START1: CALL GetKeyB ;鍵值存放在AL中
11、 CMP AL,8 JB START2 XOR AL,AL ;大于7,作0處理 START2: XOR AH,AH MOV BX,AX SHL BX,1 LEA DI,Table_1 JMP CS:[DI][BX] Table_1: DW Key0, Key1, Key2, Key3, Key4, Key5, Key6, Key7 Key0: MOV AL,1 JMP Key Key1: MOV AL,2 JMP Key Key2
12、: MOV AL,3 JMP Key Key3: MOV AL,4 JMP Key Key4: MOV AL,5 JMP Key Key5: MOV AL,6 JMP Key Key6: MOV AL,7 JMP Key Key7: MOV AL,8 JMP Key Key: MOV CX,8 LEA DI,BUFFER REP STOSB LEA SI,BUFFER CALL Display8
13、 MOV CX,60000 LOOP $ ;延時 JMP START1 END START 實驗五 多字節(jié)減法運算 一、實驗?zāi)康? 掌握BCD碼、補碼,熟悉多文件、多模塊匯編語言程序設(shè)計的方法。 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 從鍵盤上輸入4位被減數(shù)、減數(shù),實現(xiàn)雙字節(jié)BCD碼(四位數(shù))的減法,結(jié)果顯示在數(shù)碼管上;進一步熟悉使用斷點、單步進入、單步、運行到光標(biāo)處、修改PC指針、全速運行等各種調(diào)試手段;熟悉查看特殊功能寄存器、CS段、DS段存貯器的各種方法。 四、程序
14、框圖 五、實驗步驟 1、連線說明: E5區(qū) :CLK —— B2區(qū):2M E5區(qū) :CS —— A3區(qū):CS5 E5區(qū) :A0 —— A3區(qū):A0 E5區(qū) :A、B、C、D —— G5區(qū):A、B、C、D 2、在G5區(qū)的鍵盤上輸入4位被減數(shù)、減數(shù) 3、結(jié)果顯示在G5區(qū)的數(shù)碼管上 六、源程序清單 .MODEL TINY EXTRN Display8:NEAR, GetBCDKey:NEAR EXTRN F1:BYTE .STACK 100 .DATA BUFFER DB 8 DUP(?)
15、minuend DW 1 DUP(?) ;被減數(shù) subtrahend DW 1 DUP(?) ;減數(shù) .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP MOV F1,0 ;先清除顯示,再接收鍵輸入 START1: LEA DI,minuend MOV CX,4 ;按鍵次數(shù) CALL GetBCDKey ;得到雙字節(jié)十進制數(shù)(被減數(shù)) MOV F1,1 ;接收到第一個鍵,才清除顯示 LEA DI,s
16、ubtrahend MOV CX,4 ;按鍵次數(shù) CALL GetBCDKey ;得到雙字節(jié)十進制數(shù)(減數(shù)) MOV AX,minuend MOV BX,subtrahend MOV DL,10H CMP AX,BX JNB START2 XCHG AX,BX MOV DL,11H ;負數(shù) START2: SUB AL,BL ;低位 DAS XCHG AL,AH SBB AL,BH ;高位 DAS XCHG AL,
17、AH CLD LEA DI,BUFFER ;存放顯示結(jié)果 CALL B1toB2 ;低位 MOV AL,AH CALL B1toB2 ;高位 MOV AL,10H ;最高三位消隱 STOSB STOSB STOSB STOSB LEA SI,BUFFER+3 MOV CX,3 CALL BlackDisplay ;將高位0消隱 LEA SI,BUFFER CALL Display8 JMP STAR
18、T1 ;將一個字節(jié)壓縮BCD碼轉(zhuǎn)換成二個字節(jié)非壓縮BCD碼 B1toB2 PROC NEAR PUSH AX AND AL,0FH STOSB POP AX AND AL,0F0H ROR AL,4 STOSB RET B1toB2 ENDP BlackDisplay PROC NEAR ;將高位0消隱 BlackDisplay1: MOV AL,[SI] CMP AL,0 JNZ Exit MOV
19、 AL,10H MOV [SI],AL DEC SI LOOP BlackDisplay1 Exit: CLD MOV [SI+1],DL RET BlackDisplay ENDP END START 七、思考 從鍵盤上輸入4位被加數(shù)、加數(shù),實現(xiàn)雙字節(jié)BCD碼(四位數(shù))的加法,結(jié)果顯示在數(shù)碼管上。 實驗六 顯示程序 一、實驗?zāi)康? 1、熟悉8255的功能,理解LED顯示原理及控制方法; 2、學(xué)會使用LED點陣液晶顯示字體和圖形; 3、認真預(yù)
20、習(xí)本節(jié)實驗內(nèi)容,可嘗試自行編寫程序,做好實驗準備工作,填寫實驗報告。 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 1、編寫程序,用8255的PA、PB口控制LED的位選和段選, (1)控制8位數(shù)碼管依次顯示0; (2)編寫程序,控制8位數(shù)碼管依次顯示任意指定字符(0-F); (3)編寫程序,控制8位數(shù)碼管同時顯示0、1、……F; 2、按圖連接線路,運行程序,觀察實驗結(jié)果。 四、實驗原理圖 五、實驗步驟 1、主機連線說明: B4區(qū):CS(8255) —— A3區(qū):CS1 B4區(qū):A0、A1 —— A3區(qū):A0、A1 B4區(qū):JP56
21、、JP53 —— G5區(qū):JP 41、 JP 42 2、運行程序,驗證顯示結(jié)果。 六:源程序 (1) 控制8位數(shù)碼管依次顯示0; .MODEL TINY .STACK 100 .DATA IO8255_Con EQU 0F003H ;CS3 IO8255_A EQU 0F000H ;A IO8255_B EQU 0F001H ;B LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7DH,07H DB 07FH,6FH,77H,7CH,39H,05EH,79H,71H .CODE START: MOV AX,@DATA
22、 MOV DS,AX MOV ES,AX MOV DX,IO8255_Con MOV AL,80H ;方式0,A,B,C均為輸出 OUT DX,AL MOV AL,0FEH ;8255 PC輸出 MOV CX,8 GOON: MOV DX,IO8255_A ;位選 OUT DX,AL ROL AL,1 MOV AH,AL MOV DX,IO8255_B MOV AL,03FH OUT DX,AL MOV AL,AH ;0FFH->8255 PA CALL Delay JMP GOON Delay PROC
23、 NEAR PUSH CX MOV CX,20000 Delay1: LOOP Delay1 POP CX RET ENDP END START (2) 編寫程序,控制8位數(shù)碼管依次顯示任意指定字符(0-F); .MODEL TINY .STACK 100 .MODEL TINY .STACK 100 .DATA IO8255_Con EQU 0F003H ;CS3 IO8255_A EQU 0F000H ;A IO8255_B EQU 0F001H ;B LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7
24、DH,07H DB 07FH,6FH,77H,7CH,39H,05EH,79H,71H .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX MOV DX,IO8255_Con MOV AL,80H ;方式0,A,B,C均為輸出 OUT DX,AL MOV AL,0FEH ;8255 PC輸出 MOV CX,8 GOON: MOV DX,IO8255_B MOV AL,05BH OUT DX,AL MOV AL,AH MOV DX,IO8255_A ;位選 OUT DX,AL
25、 ROL AL,1 MOV AH,AL ;0FFH->8255 PA CALL Delay JMP GOON Delay PROC NEAR PUSH CX MOV CX,800 Delay1: LOOP Delay1 POP CX RET ENDP END START (3) 編寫程序,控制8位數(shù)碼管同時顯示0、1、……F: .MODEL TINY .STACK 100 .MODEL TINY .STACK 100 .DATA IO8255_Con EQU 0F003H ;CS3 IO8255_A EQU 0F000H
26、 ;A IO8255_B EQU 0F001H ;B LED_TAB: DB 03FH,06H,05BH,04FH,66H,6DH,7DH,07H DB 07FH,6FH,77H,7CH,39H,05EH,79H,71H F1 DB 0 .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX MOV DX,IO8255_Con MOV AL,80H ;方式0,A,B,C均為輸出 OUT DX,AL MOV AX,0FEFEH ;8255 PC輸出 MOV CX,1600 LEA BX,LED
27、_TAB GOON: MOV AL,F1 XLAT MOV DX,IO8255_B ;段選 OUT DX,AL MOV AL,AH MOV DX,IO8255_A ;位選 OUT DX,AL ROL AL,1 MOV AH,AL CALL DL500ms LOOP GOON ;8段數(shù)碼管顯示當(dāng)前值 MOV CX,1600 ;8段數(shù)碼管顯示完成,則顯示下個字符 MOV AL,AH ; ; CALL DL3S INC F1 CMP F1,10H ;是否顯示完了 JZ EXIT JMP GOON DL500
28、ms PROC NEAR PUSH CX MOV CX,400 DL500ms1: LOOP DL500ms1 POP CX RET DL500ms ENDP EXIT: END START 七、思考 (4)編寫程序,控制8位數(shù)碼管顯示當(dāng)前日期以及時間; 實驗七 8251串口實驗 一、實驗?zāi)康呐c要求 了解8251的內(nèi)部結(jié)構(gòu)、工作原理;了解8251與8088的接口邏輯;掌握對8251的初始化編程方法,學(xué)會使用8251實現(xiàn)設(shè)備之間的串行通信。 復(fù)習(xí)本節(jié)實驗內(nèi)容,可嘗試自行編寫程序,做好實驗準備工作,填寫實驗報告。 二、實驗設(shè)備 STA
29、R系列實驗儀一套、PC機一臺 三、實驗內(nèi)容 1、編制程序:實現(xiàn)8251A與PC機的串行通訊,使用8253作分頻器提供8251的收發(fā)時鐘。 2、連接線路,從微機接收一批數(shù)據(jù),接收完畢,再將它們回送給微機。 四、程序框圖 開始 初始化8253(定時器0,方式3,BCD碼計數(shù),CLK0/26) 初始化8251 接收10個字節(jié)數(shù)據(jù)子程序 將接收到的10個字節(jié)數(shù)據(jù)通過8251發(fā)送給微機 初始化8251: 開始 允許接收和發(fā)送數(shù)據(jù) 清錯誤標(biāo)志 復(fù)位8251 波特率系數(shù)為16,8個數(shù)據(jù)位,一個停止位,偶校驗 返回 接收10個字節(jié)數(shù)據(jù)子程序:
30、 開始 讀入狀態(tài) 有數(shù)據(jù) 讀數(shù)據(jù)->緩沖區(qū) 接收了10個字節(jié)數(shù)據(jù) 返回 N N Y Y 發(fā)送了10個字節(jié)數(shù)據(jù)子程序: 開始 讀入狀態(tài) 有數(shù)據(jù) 發(fā)送 發(fā)送了10個字節(jié)數(shù)據(jù) N N Y Y 返回 五、實驗原理圖 六、實驗步驟 1、連線說明: C5區(qū):CS(8253)、A0、A1 —— A3區(qū):CS5、A0、A1 C5區(qū):CLK0 —— B2區(qū):2M C5區(qū):GATE0 —— C1區(qū)的VCC C5區(qū):OUT0 —— C5區(qū):RxC、TxC C5區(qū):CS(8251)、C/D —— A3區(qū):CS1、A0 C5區(qū):C
31、LK —— B2區(qū):4M C5區(qū):RXD、TXD —— E7區(qū):RXD、TXD 2、運行程序 3、運行“串口助手(ComPort.EXE)”,設(shè)置串口(波特率4800,8個數(shù)據(jù)位,一個停止位,偶校驗),打開串口,選擇“HEX發(fā)送”、“HEX顯示”,向8251發(fā)送10個字節(jié)數(shù)據(jù)(輸入數(shù)據(jù)之間用空格分隔),是否能接收到10個字節(jié)數(shù)據(jù),接收到的數(shù)據(jù)是否與發(fā)送數(shù)據(jù)一致。 4、改變傳輸數(shù)據(jù)的數(shù)目,重復(fù)實驗,觀察結(jié)果。 七、演示程序 .MODEL TINY ;使用8253的計數(shù)器0,外接2Mhz,經(jīng)26分頻后,送給8251,產(chǎn)生4800bps CTL_ADDR E
32、QU 0FF01H ;控制字或狀態(tài)字 DATA_ADDR EQU 0FF00H ;讀寫數(shù)據(jù) W_8253_T0 EQU 0BF00H ;計數(shù)器0地址 W_8253_C EQU 0BF03H ;控制字 .STACK 100 .DATA Receive_Buffer DB 10 DUP(0) ;接受緩沖器 Send_Buffer EQU Receive_Buffer ;發(fā)送緩沖器 .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX
33、 NOP CALL INIT_8253 CALL INIT_8251 START1: MOV CX,10 CALL Receive_Group MOV CX,10 CALL Send_Group JMP START1 INIT_8253 PROC NEAR MOV DX,W_8253_C MOV AL,37H ;定時器0,方式3 OUT DX,AL MOV DX,W_8253_T0 MOV AL,26H ;BCD碼26(200000
34、0/26)=16*4800 OUT DX,AL MOV AL,0 OUT DX,AL RET INIT_8253 ENDP INIT_8251 PROC NEAR CALL RESET_8251 MOV DX,CTL_ADDR MOV AL,7EH ;波特率系數(shù)為16,8個數(shù)據(jù)位 OUT DX,AL ;一個停止位,偶校驗 CALL DLTIME ;延時 MOV AL,15H ;允許接收和發(fā)送發(fā)送數(shù)據(jù),清錯誤標(biāo)志 OUT DX,AL
35、 CALL DLTIME RET INIT_8251 ENDP Reset_8251 PROC NEAR MOV DX,CTL_ADDR MOV AL,0 OUT DX,AL ;向控制口寫入"0" CALL DLTIME ;延時,等待寫操作完成 OUT DX,AL ;向控制口寫入"0" CALL DLTIME ;延時 OUT DX,AL ;向控制口寫入"0" CALL DLTIME ;延時 MOV AL,40H ;向控制口寫入復(fù)位字40H
36、OUT DX,AL CALL DLTIME RET Reset_8251 ENDP ;接受一組數(shù)據(jù),CX--接受數(shù)目 Receive_Group PROC NEAR LEA DI,Receive_Buffer Receive_Group1: CALL Receive_Byte STOSB LOOP Receive_Group1 RET Receive_Group ENDP ;接受一個字節(jié) Receive_Byte PROC NEAR MOV D
37、X,CTL_ADDR Receive_Byte1: IN AL,DX ;讀入狀態(tài) TEST AL,2 JZ Receive_Byte1 ;有數(shù)據(jù)嗎? MOV DX,DATA_ADDR ;有 IN AL,DX RET Receive_Byte ENDP ;發(fā)送一組數(shù)據(jù),CX--發(fā)送數(shù)目 Send_Group PROC NEAR LEA SI,Send_Buffer Send_Group1: LODSB CALL SendByte LOOP Send_Gr
38、oup1 RET Send_Group ENDP ;發(fā)送一個字節(jié) Sendbyte PROC NEAR PUSH AX MOV DX,CTL_ADDR ;讀入狀態(tài) Sendbyte1: IN AL,DX TEST AL,1 JZ Sendbyte1 ;允許數(shù)據(jù)發(fā)送嗎? POP AX ;發(fā)送 MOV DX,DATA_ADDR OUT DX,AL RET Sendbyte ENDP ;延時 DLTIME PROC NEAR
39、 MOV CX,10 LOOP $ RET DLTIME ENDP END START 八、實驗擴展及思考 請讀者思考,如何修改程序?qū)崿F(xiàn)8251的自發(fā)自收功能? 實驗八 步進電機控制 一、實驗?zāi)康呐c要求 1、了解步進電機的基本原理,掌握步進電機的轉(zhuǎn)動編程方法 2、了解影響電機轉(zhuǎn)速的因素有那些 二、實驗設(shè)備 STAR系列實驗儀一套、PC機一臺。 三、實驗內(nèi)容 編寫程序:使用G5區(qū)的鍵盤控制步進電機的正反轉(zhuǎn)、調(diào)節(jié)轉(zhuǎn)速,連續(xù)轉(zhuǎn)動或轉(zhuǎn)動指定步數(shù);將相應(yīng)的數(shù)據(jù)顯
40、示在G5區(qū)的數(shù)碼管上。 四、控制原理 步進電機的驅(qū)動原理是通過它每相線圈的電流的順序切換來使電機作步進式旋轉(zhuǎn),驅(qū)動電路由脈沖來控制,所以調(diào)節(jié)脈沖的頻率便可改變步進電機的轉(zhuǎn)速,微控制器最適合控制步進電機。另外,由于電機的轉(zhuǎn)動慣量的存在,其轉(zhuǎn)動速度還受驅(qū)動功率的影響,當(dāng)脈沖的頻率大于某一值(本實驗為f.>100hz)時,電機便不再轉(zhuǎn)動。 實驗電機共有四個相位(A,B,C,D),按轉(zhuǎn)動步驟可分單4拍(A->B->C->D->A),雙4拍(AB->BC->CD->DA->AB)和單雙8拍(A->AB->B->BC->C->CD->D->DA->A). 五、程序框圖 N Y N Y
41、 N N N N 0->需要刷新顯示標(biāo)志 1->步進電機未轉(zhuǎn)動過標(biāo)志 1->轉(zhuǎn)動方向標(biāo)志(1:表示順時針方向) 33H->下次送給步進電機值 5->步進電機轉(zhuǎn)速 初始化8255(PC口輸出) 初始化8253(計數(shù)器T0設(shè)置在模式2狀態(tài),BCD碼計數(shù),CLK0/210) 初始化8259(允許8253中斷) 初始化8253中斷向量 初始化顯示緩沖區(qū): (數(shù)碼管第8位:0,順時針方向;5、7位消隱;6位:轉(zhuǎn)速; 1、2、3、4位:0,表示連續(xù)轉(zhuǎn)動,其他值表示需要轉(zhuǎn)動的步數(shù)) 調(diào)用顯示子程序 有鍵按下 需要刷新顯示標(biāo)志=1 0->需要刷新顯示標(biāo)志 調(diào)用步數(shù)調(diào)
42、整子程序 關(guān)中斷(終止步進電機轉(zhuǎn)動) 數(shù)碼管的1、2、3位->2、3、4位 鍵值送給數(shù)碼管的第一位 調(diào)用改變轉(zhuǎn)向子程序 鍵值>9 鍵值=0AH 調(diào)用增速子程序 調(diào)用減速子程序 調(diào)用啟動步進電機子程序 Y 鍵值=0BH 鍵值=0CH 鍵值=0DH 開始 Y Y Y 改變方向子程序: Y Y N N Y 開始 轉(zhuǎn)動方向標(biāo)志=0 91H->下次送給步進電機值 下次送給步進電機值循環(huán)右移二次 1->轉(zhuǎn)動方向標(biāo)志 0->送給數(shù)碼管的第7位 步進電機未轉(zhuǎn)動過標(biāo)志 33H->下次送給步進電機值 下次送給步進電機值
43、循環(huán)左移二次 0->轉(zhuǎn)動方向標(biāo)志 1->送給數(shù)碼管的第7位 步進電機未轉(zhuǎn)動過標(biāo)志 返回 啟動步進電機子程序: Y N Y 開始 0->步進電機未轉(zhuǎn)動過標(biāo)志 取轉(zhuǎn)動步數(shù) 取轉(zhuǎn)速對應(yīng)的延時值(轉(zhuǎn)速延時) 初始轉(zhuǎn)速延時1=初始轉(zhuǎn)速延時 轉(zhuǎn)速延時< 50 初始轉(zhuǎn)速延時=50 返回 開中斷 初始轉(zhuǎn)速延時=轉(zhuǎn)速延時 增速子程序: Y N 開始 轉(zhuǎn)速=11 轉(zhuǎn)速+1 轉(zhuǎn)速送給數(shù)碼管第5位 返回 減速子程序: N Y 開始 轉(zhuǎn)速=0 轉(zhuǎn)速-1 轉(zhuǎn)速送給數(shù)碼管第5位 返回 定時中斷程序: N
44、 N Y N N N Y Y N Y 初始轉(zhuǎn)速延時1=轉(zhuǎn)速延時 初始轉(zhuǎn)速延時 -1=0 時 初始轉(zhuǎn)速延時1 - 1 初始轉(zhuǎn)速延時=初始轉(zhuǎn)速延時1 1-1 轉(zhuǎn)動方向標(biāo)志=0 時 下次送給步進電機值循環(huán)右移一次 1-1 轉(zhuǎn)動步數(shù)=0 時 1->需要刷新顯示標(biāo)志轉(zhuǎn)動步數(shù)減一 1-1 轉(zhuǎn)動步數(shù)=0 時 關(guān)中斷 清中斷標(biāo)志 開始 下次送給步進電機值循環(huán)左移一次 1-1 返回 下次送給步進電機值->8255的PC口(控制步進電機轉(zhuǎn)動一步) Y 六、實驗原理圖 七、實驗步驟
45、 1、主機連線說明: E1區(qū):A、B、C、D —— B4區(qū):PC0、PC1、PC2、PC3 E5區(qū):CLK —— B2區(qū):2M E5區(qū):CS、A0 —— A3區(qū):CS5、A0 E5區(qū):A、B、C、D —— G5區(qū):A、B、C、D B3區(qū):CS、A0 —— A3區(qū):CS1、A0 B3區(qū):INT、INTA —— ES8688:INTR、INTA C5區(qū):CS(8253)、A0、A1 —— A3區(qū):CS2、A0、A1 C5區(qū):GATE0 —— C1區(qū):VCC C5區(qū):CLK0 —— B2區(qū):1M C5區(qū):OUT0 —— B3區(qū):IR0
46、B4區(qū):CS(8255)、A0、A1 —— A3區(qū):CS3、A0、A1 2、調(diào)試程序,查看運行結(jié)果是否正確 八、演示程序 .MODEL TINY EXTRN Display8:NEAR, SCAN_KEY:NEAR IO8259_0 EQU 0F000H IO8259_1 EQU 0F001H Con_8253 EQU 0E003H T0_8253 EQU 0E000H IO8255_Con EQU 0D003H ;CS3 IO8255_PC EQU 0D002H .STACK 100
47、 .DATA StepControl DB 0 ;下一次送給步進電機的值 buffer DB 8 DUP(0) ;顯示緩沖區(qū),8個字節(jié) buffer1 DB 8 DUP(0) ;顯示緩沖區(qū),8個字節(jié) SpeedNo DB 0 ;選擇哪一級速度 StepDelay DB 0 ;轉(zhuǎn)動一步后,延時常數(shù) StartStepDelay DB 0;若選擇速度過快,延時由長到短,最終使用對應(yīng)延時常數(shù) StartStepDelay1 DB 0 ;StartStepDelay bFirst DB 0 ;有沒有轉(zhuǎn)動過步進電機 bClo
48、ckwise DB 0 ; =1 順時針方向 =0 逆時針方向轉(zhuǎn)動 bNeedDisplay DB 0 ;已轉(zhuǎn)動一步,需要顯示新步數(shù) StepCount DW 0 ;需要轉(zhuǎn)動的步數(shù) StepDelayTab: DB 250,125,83,62,50,42,36,32,28,25,22,21 .CODE START: MOV AX,@DATA MOV DS,AX MOV ES,AX NOP MOV bFirst,1 ;有沒有轉(zhuǎn)動過步進電機 MOV bClock
49、wise,1 ;順時針方向 MOV StepControl,33H ;下一次送給步進電機的值 MOV SpeedNo,5 ;第五級速度 CALL Init8255 CALL Init8253 CALL Init8259 CALL WriIntver MOV buffer,0 ;顯示緩沖器初始化 MOV buffer+1,0 MOV buffer+2,0 MOV buffer+3,0 MOV buffer+4,10H MOV AL,SpeedNo
50、MOV buffer+5,AL MOV buffer+6,10H MOV buffer+7,0 STAR2: LEA SI,buffer LEA DI,buffer1 MOV CX,8 REP MOVSB LEA SI,buffer1 CALL Display8 STAR3: CALL Scan_Key JB STAR5 CMP bNeedDisplay,0 JZ STAR3 MOV bNeedDisplay,0 CALL
51、 Step_SUB_1 JMP STAR2 STAR5: CLI ;終止步進電機轉(zhuǎn)動 CMP AL,10 JNB STAR1 MOV AH,buffer+2 MOV buffer+3,AH MOV AH,buffer+1 MOV buffer+2,AH MOV AH,buffer MOV buffer+1,AH MOV buffer,AL JMP STAR2 STAR1: CMP AL,14 JNB STAR3
52、LEA SI,DriverTab SUB AL,10 SHL AL,1 XOR AH,AH MOV BX,AX JMP CS:[SI+BX] DriverTab: DW Direction ;轉(zhuǎn)動方向 DW Speed_up ;提高轉(zhuǎn)速 DW Speed_Down ;降低轉(zhuǎn)速 DW Exec ;步進電機根據(jù)方向、轉(zhuǎn)速、步數(shù)開始轉(zhuǎn)動 Direction: CMP bClockwise,0 JZ Clockwise MOV bClockwise
53、,0 MOV buffer+7,1 AntiClockwise: CMP bFirst,0 JZ AntiClockwise1 MOV StepControl,91H JMP Direction1 AntiClockwise1: MOV AL,StepControl ROR AL,2 MOV StepControl,AL JMP Direction1 Clockwise: MOV bClockwise,1 MOV buffer+7,0 CMP bFir
54、st,0 JZ Clockwise1 MOV StepControl,33H JMP Direction1 Clockwise1: MOV AL,StepControl ROL AL,2 MOV StepControl,AL Direction1: JMP STAR2 Speed_up: MOV AL,SpeedNo CMP AL,11 JZ Speed_up2 Speed_up1: INC AL MOV SpeedNo,AL MOV
55、 buffer+5,AL Speed_up2: JMP STAR2 Speed_Down: MOV AL,SpeedNo CMP AL,0 JZ Speed_Down1 DEC AL MOV SpeedNo,AL MOV buffer+5,AL Speed_Down1: JMP STAR2 Exec: MOV bFirst,0 CALL TakeStepCount LEA BX,StepDelayTab MOV AL,SpeedNo XLA
56、T MOV StepDelay,AL CMP AL,50 JNB Exec1 MOV AL,50 Exec1: MOV StartStepDelay,AL MOV StartStepDelay1,AL STI JMP STAR2 TIMER0: PUSH AX PUSH DX DEC StartStepDelay JNZ TIMER0_1 MOV AL,StartStepDelay1 CMP AL,StepDelay
57、JZ TIMER0_2 DEC AL MOV StartStepDelay1,AL TIMER0_2: MOV StartStepDelay,AL MOV AL,StepControl MOV DX,IO8255_PC OUT DX,AL CMP bClockwise,0 JNZ TIMER0_3 ROR AL,1 JMP TIMER0_4 TIMER0_3: ROL AL,1 TIMER0_4: MOV StepControl,AL CMP
58、 StepCount,0 JZ TIMER0_1 MOV bNeedDisplay,1 DEC StepCount JNZ TIMER0_1 add sp,8 ;小寫部分不允許使用單步、單步進入命令 popf cli pushf sub sp,8 nop TIMER0_1: MOV DX,IO8259_0 MOV AL,20H OUT DX,AL POP DX POP AX
59、 IRET Step_SUB_1 PROC NEAR MOV CX,4 LEA BX,buffer Step_SUB_1_1: DEC BYTE PTR [BX] CMP BYTE PTR [BX],0FFH JNZ Step_SUB_1_2 MOV BYTE PTR [BX],9 INC BX LOOP Step_SUB_1_1 Step_SUB_1_2: RET Step_SUB_1 ENDP TakeStepCount PROC NEAR
60、 MOV AL,buffer+3 ;轉(zhuǎn)動步數(shù)送入StepCount MOV BX,10 MUL BL ADD AL,buffer+2 MUL BL ADD AL,buffer+1 ADC AH,0 MUL BX ADD AL,buffer ADC AH,0 MOV StepCount,AX RET TakeStepCount ENDP Init8255 PROC NEAR MOV DX,IO8255_Con
61、 MOV AL,80H OUT DX,AL ;8255 PC輸出 DEC DX MOV AL,0FFH OUT DX,AL ;0FFH->8255 PC RET Init8255 ENDP Init8253 PROC NEAR MOV DX,Con_8253 MOV AL,35H OUT DX,AL ;計數(shù)器T0設(shè)置在模式2狀態(tài),BCD碼計數(shù) MOV DX,T0_8253 MOV AL,10H OUT DX,AL
62、 MOV AL,02H OUT DX,AL ;CLK0/210 RET Init8253 ENDP Init8259 PROC NEAR MOV DX,IO8259_0 MOV AL,13H OUT DX,AL MOV DX,IO8259_1 MOV AL,08H OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,0FEH OUT DX,AL RET Init8259 E
63、NDP WriIntver PROC NEAR PUSH ES MOV AX,0 MOV ES,AX MOV DI,20H LEA AX,TIMER0 STOSW MOV AX,CS STOSW POP ES RET WriIntver ENDP END START 九、實驗擴展及思考 1、怎樣改變電機的轉(zhuǎn)速? 2、通過實驗找出電機轉(zhuǎn)速的上限,如何能進一步提高最大轉(zhuǎn)速? 3、怎樣能使電機反轉(zhuǎn)
64、? 附錄一 匯編語言的存儲模型 模型 說明 TINY(微) 所有數(shù)據(jù)及代碼裝入同一個代碼段內(nèi),此模型的程序按.COM文件格式編寫,要求程序從地址0100H處開始 SMALL(小) 這種模型包含兩個段:一個64KB的數(shù)據(jù)段和一個64KB的代碼段 MEDIUM(中) 這種模型包含一個64KB的數(shù)據(jù)段和任意多個代碼段,以供大程序使用 COMPACT(壓縮) 包含一個代碼段和任意多個數(shù)據(jù)段 LARGE(大) LARGE模型允許多個代碼段和數(shù)據(jù)段 HUGE(巨型) 允許數(shù)據(jù)段大于64KB,其他與LARGE模型相同 FLAT(平展) 僅限于MASM6.X
65、版本。FLAT模型使用一個512KB的段來存儲所有的代碼和數(shù)據(jù),應(yīng)注意的是該模型主要用于Windows NT中 附錄二 8279鍵值顯示程序 ;8279 鍵盤顯示器接口芯片 ;1.查詢控制方式 2.輸入時鐘2MHZ 3.8279內(nèi)部20分頻(100KHZ) ;4.掃描計數(shù)器采用編碼工作方式(通過外部138譯碼) ;5.顯示按鍵值,第九次按鍵,清除顯示 ; 8279 查詢工作方式 .MODEL TINY CMD_8279 EQU 0BF01H ;8279命令字、狀態(tài)字地址 DATA_8279 EQU 0B
66、F00H ;8279讀寫數(shù)據(jù)口的地址 PUBLIC GetKey, GetKeyA, GetKeyB, GetBCDKey, DisPlay8, SCAN_KEY PUBLIC F1 .STACK 100 .DATA F1 DB ? LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH DB 0FFH,0BFH .CODE GetKey PROC NEAR CMP CX,0 JZ GetKey5 CMP CX,9 JNB GetKey5 PUSH AX PUSH BX PUSH DX PUSHF MOV AX,CX CLC RCR AX,1 DEC AX ADD DI,AX STD MO
- 溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案