久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

2018東南大學自動化學院微機實驗6、7實驗報告

時間:2019-05-14 16:10:45下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《2018東南大學自動化學院微機實驗6、7實驗報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《2018東南大學自動化學院微機實驗6、7實驗報告》。

第一篇:2018東南大學自動化學院微機實驗6、7實驗報告

《微機實驗及課程設計》實驗報告

學號

08

東南大學

《微機系統與接口(含實驗)》

實驗報告

實驗六

8255 并行輸入輸出

實驗七

串行通信

名:

號:

08

業:

實 驗 室:

金智樓516

實驗時間: 2018年05月08日

報告時間: 2018年06月03日

評定成績:

審閱教師:

《微機實驗及課程設計》實驗報告

學號

08

一.實驗目的與內容

1.實驗目的:

(1)掌握 8255 方式 0 的工作原理及使用方法,利用直接輸入輸出進行控制顯示;(2)掌握 8 段數碼管的動態刷新顯示控制;

(3)分析掌握 8255 工作方式1時的使用及編程,進一步掌握中斷處理程序的編寫。(4)了解串行通信的基本原理,認識串行收發過程;(5)掌握串行接口芯片 8251 的工作原理和編程方法。

2.實驗內容:

(1)實驗六 8255 并行輸入輸出

基本實驗內容和要求 1)8255方式0:簡單輸入輸出

實驗電路如圖3.7-1,8255C口輸入接邏輯電平開關K0~K7,編程A口輸出接LED顯示電路L0~L7;用指令從C口輸入數據,再從A口輸出。注意實驗箱中的8255既引出了A、B、C口引腳排線,也提供了PA0-PA7,PB0-PB7,PC0-PC7的信號連接孔,成組開關、數碼管,8段LED顯示器也如此,可根據需要設計選用。

推薦接線:

8255/JP8(PC7---PC0)8255/JP6(PA7---PA0)8255/CS

接邏輯開關/JP1(K7---K0)接LED顯示/JP2(L7---L0)接I/O譯碼/Y1(288H---28FH)2)編程將 A 口 L0-L7 控制成流水燈,流水間隔時間由軟件產生;流水方向由 K0 鍵在線控制,隨時 可切換;流水間隔時間也可由 K4~K7 鍵編碼控制,如 0000 對應停止,0001 對應 1 秒,1111 對應 15 秒, 大鍵盤輸入 ESC 鍵退出。8段數碼管。

3)8段數碼管靜態顯示:按圖 3.7-3 連接好電路,將 8255 的 A 口 PA0~PA6(JP6)分別與七段

《微機實驗及課程設計》實驗報告

學號

08

數碼 管的段碼驅動輸入端 a~DP 相連(JP3),位碼驅動輸入端 S1 接+5V(選中),S0 接地(關閉)。編程從鍵盤 輸入一位十進制數字(0~9),在七段數碼管上顯示出來。

4)8段數碼管動態顯示:按圖 3.7-4 連接好電路,七段數碼管段碼連接不變,位碼驅動輸入端 S1、S0 接 8255 C 口的 PC1、PC0。編程在兩個數碼管上顯示“56”。(注意字符變換之間應使段位全滅,避免顯 示“影子”)

(2)實驗七 串行通信 基本實驗內容和要求

1)按圖 3.8-1 連接好電路,其中 8254 計數器用于產生 8251 的發送和接收時鐘,TXD 和 RXD 直接相連(注意: 實驗系統未采用 MC1488/1489 或 ICL232 等長線收發器,故有關 RS232/422 等電平標準及轉 換內容可自行參考相關資料);

2)編寫測試程序,初始化 8251,實現連續發送固定字符,用示波器觀察發送波形,試用多種不同字符格式和字符。

《微機實驗及課程設計》實驗報告

學號

08

3)編程實現從鍵盤輸入一個字符, 將其 ASCII 碼加 1 后發送出去,再接收回來在屏幕上顯示,實現自發自收。

《微機實驗及課程設計》實驗報告

學號

08

二.基本實驗原理

(1)實驗六 8255并行輸入輸出

1)實驗箱上的七段數碼管為共陰型,段碼采用同相驅動,輸入端加高電平,選中的數碼管亮,位碼加反相驅動器,位碼輸入端高電平選中。

2)七段數碼管的字型代碼表如表 3.7-1:

3)參考流程圖(圖3.7-5,3.7-6)

《微機實驗及課程設計》實驗報告

學號

08

(2)實驗七 串行通信

編程提示

1)圖 3.8-1 電路 8251 的控制口地址為 2B9H,數據口地址為 2B8H。

2)8253 計數器的計數初值= 時鐘頻率 /(波特率× 波特率因子),這里的時鐘頻率接脈沖源1MHz,波特率若選 1200,波特率因子若選16,則計數器初值為52。

4)收發采用查詢方式,參考流程圖(見圖 3.8-2)6

《微機實驗及課程設計》實驗報告

學號

08

《微機實驗及課程設計》實驗報告

學號

08

三.方案實現與測試

1.實驗六 8255并行輸入輸出

(1)8255方式0:簡單輸入輸出

實驗電路如圖3.7-1,8255C口輸入接邏輯電平開關K0~K7,編程A口輸出接LED顯示電路L0~L7;用指令從C口輸入數據,再從A口輸出。

推薦接線:

8255/JP8(PC7---PC0)8255/JP6(PA7---PA0)8255/CS

接邏輯開關/JP1(K7---K0)接LED顯示/JP2(L7---L0)接I/O譯碼/Y1(288H---28FH)1)按照上圖所示電路搭接電路,接線圖如下:

2)在純DOS或者桌面上的TPC集成開發環境中編譯運行如下代碼:

8255 簡單輸入輸出(程序名:8255_io.asm)

8255 控制寄存器端口地址 28BH A 口的地址 288H

《微機實驗及課程設計》實驗報告

學號

08

C 口的地址 28AH ioport equ 3100h-0280h;tpc 卡中設備的 I/O 地址 io8255a equ ioport+288h io8255c equ ioport+28ah

;8255A 口地址;8255C 口地址

io8255k equ ioport+28bh;8255 控制寄存器端口地址 stacks segment stack db 100 dup(?)stacks ends code segment assume cs:code,ss:stacks main proc far start: mov ax,stacks

mov ss,ax mov dx,io8255k;設 8255 為 C 口輸入,A 口輸出 mov al,8bh out dx,al inout: mov dx,io8255c;從 C 口輸入一數據

in al,dx mov dx,io8255a;從 A 口輸出剛才自 C 口所輸入的數據 out dx,al mov dl,0ffh;判斷是否有按鍵 mov ah,06h int 21h jz inout;若無,則繼續自 C 口輸入,A 口輸出

mov ah,4ch;否則返回 DOS 操作系統 int 21h main endp code ends end start 3)實驗結果記錄如下圖所示:

《微機實驗及課程設計》實驗報告

學號

08

(2)8段數碼管靜態顯示實驗

1)按圖下圖連接好電路,將 8255 的 A 口 PA0~PA6(JP6)分別與七段數碼 管的段碼驅動輸入端 a~DP 相連(JP3),位碼驅動輸入端 S1 接+5V(選中),S0 接地(關閉)。

2)在純DOS或者桌面上的TPC集成開發環境中編譯運行如下代碼:

8255_led_s.asm源程序: data segment ioport io8255a io8255b equ 3100h-0280h equ 288h equ 28bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num(0--9h):',0dh,0ah,'$' data ends stacks segment stack

《微機實驗及課程設計》實驗報告

學號

08

db 100 dup(?)stacks ends code segment assume cs:code,ds:data,ss:stacks start: mov ax,stacks

mov ss,ax mov ax,data mov ds,ax mov dx,io8255b;使8255的A口為輸出方式 mov ax,80h out dx,al sss: mov dx,offset mesg1;顯示提示信息

mov ah,09h int 21h mov ah,01;從鍵盤接收字符 int 21h cmp al,'0';是否小于0 jl exit;若是則退出 cmp al,'9';是否大于9 jg exit;若是則退出

sub al,30h;將所得字符的ASCII碼減30H mov bx,offset led;bx為數碼表的起始地址 xlat;求出相應的段碼 mov dx,io8255a;從8255的A口輸出 out dx,al jmp sss;轉SSS exit: mov ah,4ch;返回DOS int 21h code ends end start

3)實驗現象記錄如下:

《微機實驗及課程設計》實驗報告

學號

08

(3)8段數碼管動態顯示實驗

1)按圖下圖所示電路搭接好電路,七段數碼管段碼連接不變,位碼驅動輸入端 S1、S0 接 8255 C 口的 PC1、PC0。編程在兩個數碼管上顯示“56”。(注意字符變換之間應使段位全滅,避免顯示“影子”)

2)在純DOS或者桌面上的TPC集成開發環境中編譯運行如下代碼:

8255 動態顯示‘56’參考程序(程序名:8255_led_d.asm)data segment ioport equ 3100h-0280h io8255a equ ioport+288h io8255c equ ioport+28ah io8255k equ ioport+28bh

;tpc 卡中設備的 I/O 地址;8255A 口地址;8255C 口地址

;8255 控制寄存器端口地址

《微機實驗及課程設計》實驗報告

學號

08

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段碼 buffer1 db 5,6 bz dw ? data ends stacks segment stack db 100 dup(?)

;存放要顯示的個位和十位

;位碼

stacks ends code segment assume cs:code,ss:stacks,ds:data start: mov ax,stacks

mov ss,ax mov ax,data mov ds,ax mov dx,io8255k;將 8255 設為 A 口輸出 mov al,80h out dx,al mov di,offset buffer1;設 di 為顯示緩沖區

loop2: mov bh,02 lll:

mov al,0

;送全滅段碼

mov dx,io8255a;自 8255A 口輸出 out dx,al mov byte ptr bz,bh push di dec di add di, bz mov bl,[di];bl 為要顯示的數 pop di mov bh,0 mov si,offset led;置 LED 數碼表偏移地址為 SI add si,bx;求出對應的 LED 數碼 mov al,byte ptr [si] mov dx,io8255a;自 8255A 口輸出 out dx,al mov al,byte ptr bz;使相應的數碼管亮 mov dx,io8255c 13

《微機實驗及課程設計》實驗報告

學號

08

out dx,al mov cx,3000 delay: loop delay;延時

mov bh,byte ptr bz shr bh,1 jnz lll mov dx,0ffh mov ah,06 int 21h je loop2;有鍵按下則退出

mov dx,io8255c mov al,0 out dx,al mov ah,4ch;返回 DOS 操作系統 int 21h;關掉數碼管顯示

code ends end start

3)實驗結果記錄如下:

《微機實驗及課程設計》實驗報告

學號

08

2.實驗七 串行通信

基本實驗內容和要求

1)按圖 3.8-1 連接好電路,其中 8254 計數器用于產生 8251 的發送和接收時鐘,TXD 和 RXD 直接相連

2)在純DOS或者桌面上的TPC集成開發環境中編譯運行如下代碼:

參考程序:程序名:8251.asm data segment ioport equ 3100h-0280h io8253a equ ioport+280h io8253b equ ioport+283h io8251a equ ioport+2b8h io8251b equ ioport+2b9h mes2 dd mes1 data ends stacks segment stack db 100 dup(?)stacks ends code segment assume cs:code,ds:data,ss:stacks main proc far start: mov ax,stacks

;tpc 卡中設備的 io 地址;計數器 0 地址;8253 控制寄存器地址;8251 數據口地址;8251 控制口地址

mes1 db 'you can play a key on the keybord!',0dh,0ah,24h mov ss,ax

《微機實驗及課程設計》實驗報告

學號

08

mov ax,data mov ds,ax mov dx,io8253b;設置 8253 計數器 0 工作方式 mov al,16h out dx,al mov dx,io8253a mov al,52;給 8253 計數器 0 送初值 out dx,al mov dx,io8251b;初始化 8251 xor al,al mov cx,03;向 8251 控制端口送 3 個 0 loop delay mov al,40h;向 8251 控制端口送 40H,使其復位 call out1 mov al,4eh;設置為 1 個停止位,8 個數據位 call out1;波特率因子為 16 mov al,27h;向 8251 送控制字允許其發送和接收 call out1 lds dx,mes2;顯示提示信息 mov ah,09 int 21h in al,dx test al,01;發送是否準備好 jz waiti mov ah,01;是,從鍵盤上讀一字符 int 21h cmp al,27;若為 ESC,結束 jz exit mov dx,io8251a inc al out dx,al;發送 mov cx,0F00h

;延時

next: mov dx,io8251b in al,dx test al,02;檢查接收是否準備好 jz next in al,dx;沒有,等待;準備好,接收 delay: call out1 waiti: mov dx,io8251b s51: loop s51 mov dx,io8251a

《微機實驗及課程設計》實驗報告

學號

08

inc al mov dl,al;如果需要處理,如加 1 mov ah,02;將接收到的字符顯示在屏幕上 int 21h jmp waiti int 21h

;向外發送一字節的子程序 exit: mov ah,4ch;退出 main endp out1 proc near

out dx,al push cx mov cx,0F00h;延時

pop cx ret gg: loop gg out1 endp code ends end start

3)實驗現象:輸入1,回顯3,因為發時加1,接受時又加1。

修改代碼,持續輸入55,用示波器觀察發送發送過程和波特率,刪掉源碼中接受和發送部分,在原發送部分加如下代碼:

out2: mov al,55h mov dx,io8251a out dx,al mov cx,0f00h 實驗現象:

每16次RCLK脈沖對應一個數據位。

《微機實驗及課程設計》實驗報告

學號

08

四.提高與創新研究

五.分析與總結

通過這兩次實驗,我大致了解并掌握了 8255三種方式的工作原理及使用方法以及利用它直接輸入輸出進行控制顯示的方法,掌握了8段數碼管的動態刷新顯示控制方法;進一步掌握了中斷處理程序的編寫,了解串行通信的基本原理,深入認識了串行收發過程,掌握了串行接口芯片 8251 的工作原理和編程方法,特別是對8255的A組控制,B組控制以及8255控制字有了更加深入的理解

第二篇:【微機實驗】2018東南大學微型計算機原理及應用實驗二

實驗二 基本算術和邏輯運算

學院:信息科學與工程學院

姓名:周信元

學號:04016523 實驗日期:2018.4.4

一、實驗目的

1.熟悉算術和邏輯運算指令的功能。

2.進一步了解標志寄存器各標志位的意義和指令執行對它的影響。

二、實驗任務

1.采用單步執行方式執行下列各程序段,檢查各標志位的情況。

程序段1 MOV AX, 10101H MOV SI, 2000H ADD AL, 30H ADD AX, SI

;AX=1010H

;SI=2000H

;AX=1040H

;AX=3040H;BX=03FFH MOV BX, 03FFH ADD AX, BX

;AX=343FH;DS:[0020]=1000H;DS:[0020]=443FH MOV[0020],1000H ADD 0020, AX 程序段2: MOV AX, OA0AOIH ADO AX, OFFFFH

;AX=A0A0H;AX=A09FH MOV CX, OFFOOH ADD AX, CX SUB AX, AX INC AX

;CX=FF00H;AX=9F9FH

;AX=0000H

;AX=0001H

;CX=FFFFH OR CX, OOFFH AND CX, OFOFH M0V[0010],CX 程序段3: MOV BL, 25H MO[0010],04H MOV AL, [0010] MUL BL 程序段4: MOV BL, 04H

;CX=0F0FH;DS:[0010]=OFOFH

;BX=0025H;DS:[0010]=04H

;AX=0004H

;AX=0094H

;BX=0004H MOV WORD PTR L0010], 0080H;DS:[0010]=0080H MOV AX, [0010] DIV BL 程序段5: MOV AX, 00 DEC AX

;AX=0000H;AX=FFFFH

;AX=3FFEH

;AX=0080H;AX=0020H ADC AX, 3FFFH ADD AX, AX

;AX=7FFCH NOT AX SUB AX, 3

;AX=8003H;AX=8000H

;AX=FBFDH OR AX, OFEFDH AND AX, OAFCFH SHL AX, 1 RCL AX, 1 步驟

;AX=ABCDH;AX=579AH;AX=AF35H(1)進入 Turbo Debugger,在CPU窗口下輸入程序段 2)將IP指針指向程序段開始處(3)按下F7鍵(單步)運行程序。

(4)分析各條指令執行后的結果與各標志位在指令執行后對它的影響

2.將寄存器BⅨ作地址指針,自BX所指的內存單元(0010HD)開始連續存放著三個無符號數(10H、04H、30H),。試編寫程序分別求它們的和與積,并將結果存放在這三個數之后的單元中。

求和程序段

MOV[0010],10H MOV[0011],04H MOV[0012],30H SUB AX, AX MOV BX, 0010H MOV AL, BXI ADD AL, [BX+1] ADD Al, [BX+2] MOV [BX+3], AL 結果[DS:0013]=44H 求積程序段

MOV[0010],10H MOV[0011],04H MOV[0012],30H SUB AX, AX MOV A1,[0010] MOV BL, [0011 MUL BL MOV BL, [0012] MUL BL MOV [0013], AX 結果[DS:0013=0C00H 3.寫出完成下述功能的程序段(1)傳送15H到AL寄存器。(2)將L的內容乘以2(3)傳送15H到L寄存器 4)AL的內容乘以BL的內容。最后結果(AX)=?

MOV AL, 15H SHL AL, 1 MOV BL, 15H MUL BL 結果(AX)=0372H 4.寫出完成下述功能的程序段

(1)從地址DS:0000H單元中,傳送一個數據58H到AL寄存器。(2)把AL寄存器的內容右移兩位

(3)再把L寄存器的內容與字節單元DS:0001H中的數據12H相乘。(4)將乘積存入字單元DS:0002H中

M0V[0000],58H MOV[0001],12H MOV AL, [0000] SHR AL, 02 MOV BL, [0001] MUL BL MOV [0002], AX 結果[0002]=018CH 5.假設下面的程序段用來清除數據段中相應字存儲單元的內容(即零送到這些存儲 單元中去),其偏移地址從0010H到0020H(1)將第4條比較指令語句填寫完整(劃線處)MOV SI, 0010H NEXT: MOV WORD PTR[SI].00 ADD SI, 0022H CMP SI, INE NEXT(2)假設要清除偏移地址從0020H到001字存儲單元中的內容(即由高地址到 低地址清零),試編寫程序段。

MOV SI, 0020H NEXT MOV WORD PTR[S1], 00 SUB SI, 2 CMP SI, 000EH JNE NEXT

三,實驗設備

IBM-TC/XT微機一臺

四、實驗預習要求

1.復習8086指令系統的算術和邏輯運算指令 2,按照題目要求在實驗前編寫好程序

五、實驗報告要求

1.整理出運行正確的各題源程序段和結果, 2.,簡要說明ADD指今和AND指令對標志位的影響。

1.見報告中加粗文字部分

2.普通加法指令ADD,指令格式:ADD Reg/mem,Reg/mem/imm受影響標志位:AF/CF/OF/PF/SF/ZF 邏輯與操作指令AND,指令的格式: AND Reg/Mem, Reg/Mem/imm受影響的標志位:CF(0)、OF(0)、PF、SF和ZF(AF無定義)

第三篇:微機實驗報告數模轉換器和模數轉換器實驗

課程名稱

微機接口與匯編語言

實驗項目

實驗五

數/模轉換器和模/數轉換器實驗

實驗儀器 TPC-USB通用微機接口實驗系統

系 別 計算機學院

專 業

班級/學號

學生姓名 實驗日期 2013.12.19 成 績 指導教師

胡信裕

實驗五 數/模轉換器和模/數轉換器實驗

一、實驗目的

1.了解數/模轉換器的基本原理,掌握DAC0832芯片的使用方法。2.了解模/數轉換器的基本原理,掌握ADC0809的使用方法。二.實驗設備

1.PC微機系統一套

2.TPC-USB通用微機接口實驗系統 一套 三.實驗要求

1.實驗前要作好充分準備,包括程序框圖、源程序清單、調試步驟、測試方法、對運行結果的分析等。

2.熟悉與實驗有關的系統軟件(如編輯程序、匯編程序、連接程序和調試程序等)使用方法。在程序調試過程中,有意識地了解并掌握TPC-USB通用微機接口實驗系統的軟硬件環境及使用,掌握程序的調試及運行的方法技巧。3.實驗前仔細閱讀理解教材相關章節的相關內容,實驗時必須攜帶教材及實驗講義。四.實驗內容及步驟

(一)數/模轉換器實驗

1.實驗電路原理如圖:DAC0832采用單緩沖方式,具有單雙極性輸入端(圖中的Ua、Ub),編程產生以下鋸齒波(從Ua和Ub輸出,用示波器觀察)

參考電路圖

2.8位D/A轉換器DAC0832的口地址為290H,輸入數據與輸出電壓的關系為:

(UREF表示參考電壓,N表示數數據),這里的參考電壓為PC機的+5V電源。

3.產生鋸齒波只須將輸出到DAC0832的數據由0循環遞增。4.參考流程圖:

參考流程圖

(二)模/數轉換器

1.實驗電路原理圖如圖。

(一)的DAC的輸出Ua,送入ADC0809通道1(IN1)。

連接參考電路圖

2.編程采集IN1輸入的電壓,在屏幕上顯示出轉換后的數據(用16進制數)。3.ADC0809的IN0口地址為298H,IN1口地址為299H。4.IN0單極性輸入電壓與轉換后數字的關系為:

其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為PC機的+5V電源。

4.一次A/D轉換的程序可以為

MOV DX,口地址 OUT DX,AL

;啟動轉換

;延時

IN AL,DX

;讀取轉換結果放在AL中

五、實驗程序設計和調試運行

1、程序設計

實驗一:(生成的是鋸齒波)io0832a

equ 290h(a)主程序

參考流程圖

(b)顯示子程序 code segment assume cs:code start: mov cl,0 mov dx,io0832a lll:

mov al,cl out dx,al inc cl

;cl加1 inc cl inc cl inc cl inc cl inc cl inc cl push dx mov ah,06h

;判斷是否有鍵按下

mov dl,0ffh int 21h pop dx jz lll

;若無則轉LLL mov ah,4ch

;返回

int 21h code ends end start

實驗二 :(生成正弦波)DATA SEGMENT IO0832A EQU 290H SIN DB 80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDH DB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96H DB 80H,66H,4EH,38H,25H,15H,09H,04H DB 00H,04H,09H,15H,25H,38H,4EH,66H

;正弦波數據 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX

;置正弦波數據的偏移地址為SI,LL:MOV SI,OFFSET SIN

;一組輸出32個數據

MOV BH,32

;將數據輸出到D/A轉換器

LLL:MOV AL,[SI]

MOV DX,IO0832A

OUT DX,AL

MOV AH,06H

MOV DL,0FFH

INT 21H

JNE EXIT

MOV CX,1 DELAY:LOOP DELAY INC SI DEC BH JNZ LLL JMP LL EXIT:MOV AH,4CH INT 21H CODE ENDS END START

2.實驗過程(步驟)和實驗結果說明

(1)按圖連接實驗電路;

(2)在TPC-IDE操作環境下,用文本編輯器編輯實驗源程序(EXP5.asm);(3)在IDE操作環境下,對源程序(EXP5.asm)進行編譯和連接,生成生成鏈接文件(EXP5.obj)和可執行文件(EXP5.exe);

(4)運行IDE操作環境下的調試命令,調試可執行文件(EXP5.exe);

(5)運行IDE操作環境下的執行命令,運行可執行文件(EXP5.exe),結果顯示為:

運行成功后,可以從示波器中看到相應的波形,通過調節示波器,波形會更加明顯。

實驗結果 鋸齒波:

正弦波:

六、實驗總結

通過此次實驗,我了解了數/模和模/數轉換器的基本原理,以及掌握了DAC0832和ADC0809芯片的使用方法。在實驗過程中,對于填寫代碼空白這一項,感覺很鍛煉對于程序的閱讀和理解能力。當然也遇到了一些障礙,通過請教老師和同學,最后都順利解決,此次實驗收獲很大。

第四篇:電子科技大學微機實驗報告 實驗4

實驗四基于ARM的嵌入式Linux開發環境建立 【實驗目的】 1.掌握嵌入式Linux 開發環境的基本流程。2.熟悉Linux 操作系統 3.熟悉嵌入式開發平臺

【實驗內容】

在PC機虛擬機下的Linux系統中建立基于ARM 的嵌入式Linux 開發環境。

1.學會網口的配置 2.Minicom端口的使用

【預備知識】

1.了解ARM9處理器結構 2.了解Linux 系統結構

3.了解ARM開發板使用常識

【實驗設備和工具】

硬件:PC機Pentium100以上,ARM嵌入式開發平臺

軟件:PC機Linux 操作系統+MINICOM+AMRLINUX開發環境

【實驗原理】

1.交叉編譯器在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,我們就稱這種編譯器支持交叉編譯,這個編譯過程就叫交叉編譯。簡單地說,就是在一個平臺上生成另一個平臺上的可執行代碼。這里需要注意的是所謂平臺,實際上包含兩個概念:體系結構

(Architecture)、操作系統(OperatingSystem)。同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。舉例來說,我們常說的x86 Linux平臺實際上是Intelx86體系結構和Linuxforx86操作系統的統稱;而x86WinNT平臺 實際上是Intelx86體系結構和Windows NTforx86操作系統的簡稱。交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。我們常用的計算機軟

件,都需要通過編譯的方式,把使用高級計算機語言編寫的代碼(比如C代碼)編譯(compile)成計算機可以識別和執行的二進制代碼。比如,我們在Windows平臺上,可使用Visual C++ 開發環境,編寫程序并編譯成可執行程序。這種方式下,我們使用PC平臺上的Windows工具開發針對Windows本身的可執行程序,這種編譯過程稱為nativecompilation,中文可理解

為本機編譯。然而,在進行嵌入式系統的開發時,運行程序的目標平臺通常具有有限的存儲空間和運算能力,比如常見的ARM平臺,其一般的靜態存儲空間大概是16到32MB,而CPU 的主頻大概在100MHz到500MHz之間。這種情況下,在ARM平臺上進行本機編譯就不太可能了,這是因為一般的編譯工具鏈(compilationtoolchain)需要很大的存儲空間,并需要很強 的CPU運算能力。為了解決這個問題,交叉編譯工具就應運而生了。通過交叉編譯工具,我們就可以在CPU能力很強、存儲空間足夠的主機平臺上(比如PC上)編譯出針對其他平臺的可執行程序。

要進行交叉編譯,我們需要在主機平臺上安裝對應的交叉編譯工具鏈(crosscompilation tool-chain),然后用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標平臺上運行的代碼。常見的交叉編譯例子如下:

1、在WindowsPC上,利用RVDS(ARM開發環境),使用armcc編譯器,則可編譯出針對ARMCPU的可執行代碼。

2、在LinuxPC上,利用arm-linux-gcc編譯器,可編譯出針對LinuxARM平臺的可執行代碼。

3、在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARMCPU的可執行代碼。

2.NFS服務

NFS是Net FileSystem的簡寫,即網絡文件系統.網絡文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS.NFS允許一個系統在網絡上與它人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系

統上的文件。

NFS至少有兩個主要部分:一臺服務器和一臺(或者更多)客戶機。客戶機遠程訪問存放在服務器上的數據。為了正常工作,一些進程需要被配置并運行。

在本實驗中就是將PC機作為服務器,而將ARM開發板作為客戶機,這樣ARM開發板就可以遠程

訪問存放在在PC機上的數據,這樣可以縮短研發周期,更方便的調試程序。

【實驗步驟】

1.雙擊桌面上VMWARE,打開Linux 虛擬機 2.點擊啟動虛擬機,啟動虛擬機 3.以root身份登陸虛擬機,密碼123456

4.其他步驟詳見實驗指導書

【實驗結果和程序】

基于ARM 的嵌入式Linux開發環境建立完畢。

【思考題】

1.如何驗證交叉編譯器已安裝成功? 答:在終端輸入命令:cd/arm/rootfs/home/driver(文件夾里已有test_led.c文件)arm-linux-gcc–o test_ledtest_led.c

若有可執行文件test_led生成則表示交叉編譯器已安裝成功

2.如果我們需要變更根文件系統的目錄,該如何設置使得ARM開發板可以成功掛載?答:修改/etc/exports 文件的內容,將/arm/rootfs*(rw,sync,no_root_squash)改為/XX/XXX

*(rw,sync,no_root_squash)(/XX/XXX為變更后點的文件目錄)

3.怎么在u-boot命令行下修改ARM 開發板的IP?

答:輸入setenvip=x.x.x.x:192.168.0.1:192.168.0.1:255.255.255.0:uestc:eth0:off

Saveenv

x,x,x,x為ARM開發板的新IP。

【實驗結論】

本實驗實現了基于ARM 的嵌入式Linux 開發環境建立

第五篇:電子科技大學微機實驗報告 實驗5

實驗五 基于ARM的模塊方式驅動程序實驗 【實驗目的】 1.掌握Linux 系統下設備驅動程序的作用與編寫技巧 2.掌握Linux 驅動程序模塊加載和卸載的方法 3.了解Linux 內核中的makefile和kconfig文件

【實驗內容】

1.基于s3c2440 開發板編寫led 驅動程序。2.將編寫好的led驅動加入linux內核中,修改makefile和kconfig文件,配置和編譯內核。3.編寫關于led 的測試程序,交叉編譯后運行,控制led 燈的亮滅。

【預備知識】

1.了解ARM9處理器結構和Linux 系統結構

2.熟練掌握C語言。

【實驗設備和工具】

? 硬件:ARM嵌入式開發平臺,PC機Pentium100 以上。

? 軟件:PC機Linux操作系統+MINICOM+AMRLINUX 開發環境

【實驗原理】

?

linux設備驅動程序 ? 驅動的模塊式加載和卸載

? 編譯模塊

? 裝載和卸載模塊

? led 驅動的原理

在本開發板上有八個led指示燈,從下往上分別為LED0-LED7。這八個led燈都是接的芯片上的gpio口(通用功能輸入輸出口)。在本實驗的開發板硬件設計中,當led 燈對應的gpio的電平為低時,led燈被點亮;當led燈對應的gpio的電平為高時,led燈滅。本驅動的作用就是通過設置對應gpio口的電平來控制led 的亮滅。

因為ARM 芯片內的GPIO口都是復用的,即它可以被配置為多種不同的功能,本實

驗是使用它的普通的I/O口的輸出功能,故需要對每個GPIO口進行配置。在內核中已經定義了對GPIO口進行配置的函數,我們只需要調用這些函數就可以完成對GPIO口的配置。

【實驗步驟】實驗程

序運行效果:

程序會提示:“pleaseenterthe led status”

輸入與希望顯示的led狀態對應的ledstatus值(輸入十進制值即可),觀察led 的顯示情況。例如:

? 輸入數字“3”,對應的二進制數字為00000011

故點亮LED2~LED7

? 輸入數字“4”,對應的二進制數字為00000100

故點亮LED0,LED1,LED3~LED7

【實驗結果和程序】

C語言程序:

#include #include #include #include #include #include #include #include #include #include #include #include #include#defineDEVICE_NAME “s3c2440-led”

static intLedMajor=231;

staticintLedMinor=0;

static charledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev *s3c2440_led_cdev;

/*

******************************************************************************* ************************

** Function name:Update_led()**Descriptions **Input :NONE **Output :NONE :update the led status

******************************************************************************* ************************

*/ staticvoid Update_led(void)

{

if(ledstatus&0x01)

s3c2410_gpio_setpin(S3C2410_GPC7,1);//LED0滅

else

s3c2410_gpio_setpin(S3C2410_GPC7,0);//LED0亮

if(ledstatus&0x02)

s3c2410_gpio_setpin(S3C2410_GPC5,1);//LED1滅

else

s3c2410_gpio_setpin(S3C2410_GPC5,0);//LED1亮

if(ledstatus&0x04)

s3c2410_gpio_setpin(S3C2410_GPH9,1);//LED2滅

else

s3c2410_gpio_setpin(S3C2410_GPH9,0);//LED2亮

if(ledstatus&0x08)

s3c2410_gpio_setpin(S3C2410_GPB4,1);//LED3滅

else

s3c2410_gpio_setpin(S3C2410_GPB4,0);//LED3亮

if(ledstatus&0x10)

s3c2410_gpio_setpin(S3C2410_GPG5,1);//LED4滅

else

s3c2410_gpio_setpin(S3C2410_GPG5,0);//LED4亮

if(ledstatus&0x20)

s3c2410_gpio_setpin(S3C2410_GPG6,1);//LED5滅

else

s3c2410_gpio_setpin(S3C2410_GPG6,0);//LED5亮

if(ledstatus&0x40)

s3c2410_gpio_setpin(S3C2410_GPG7,1);//LED6滅elses3c2410_gpio_setpin(S3C2410_GPG7,0);//LED6亮

if(ledstatus&0x80)

s3c2410_gpio_setpin(S3C2410_GPG8,1);//LED7滅

else

s3c2410_gpio_setpin(S3C2410_GPG8,0);//LED7亮

}

staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){

copy_from_user(&ledstatus,buffer,sizeof(ledstatus));

Update_led();

printk(“write: led=0x%x,count=%dn”,ledstatus,count);returnsizeof(ledstatus);} staticints3c2440_Led_open(structinode*inode,struct file *filp)

{

printk(“led device openn”);

return 0;

} staticints3c2440_Led_release(structinode*inode,struct file*filp)

{

printk(“led device releasen”);

return 0;} staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release, };

staticintinits3c2440_Led_init(void)

{

dev_ts3c2440_leds_devno;

/*configure the gpiofor leds*/

s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);

s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);

Update_led();/*registerthe devnumber*/ s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno, 1,DEVICE_NAME);

/*registerthe chardevice*/

s3c2440_led_cdev=cdev_alloc();if

(s3c2440_led_cdev!= NULL)

{ cdev_init(s3c2440_led_cdev, &s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev, s3c2440_leds_devno, 1))

printk(KERN_NOTICE “Something wrong when addings3c2440_led_cdev!n”);

else

printk(“Success addings3c2440_led_cdev!n”);} /*create the device node in /dev*/ s3c2440_class =class_create(THIS_MODULE, “led_class”);class_device_create(s3c2440_class, NULL, s3c2440_leds_devno, NULL, DEVICE_NAME);

printk(DEVICE_NAME “ initializedn”);

return 0;

}

staticvoid exits3c2440_Led_exit(void)

cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class, MKDEV(LedMajor,LedMinor));class_destroy(s3c2440_class);printk(DEVICE_NAME “ removedn”);

}

module_init(s3c2440_Led_init);

module_exit(s3c2440_Led_exit);

【思考題】

1.設備驅動程序的功能是什么?答:設備驅動的功能就是將系統提供的調用映射到作用于實際硬件的和設備相關的操作上。

2.模塊化的最大優點是什么?答:可以在系統正在運行著的時候給內核增加模塊

提供的功能(也可以移除功能)。

3.如果在驅動模塊中刪除module_exit(s3c2440_Led_exit);后會有什么影響?

答:這個模塊將不能被移除。

4.驅動代碼中調用的宏MKDEV 的作用是什么?答:獲取設備在設備表中的位置。輸入主設備號,從設備號,返回位置號。

【實驗結論】

本實驗實現了linux環境下的led燈驅動的添加。

下載2018東南大學自動化學院微機實驗6、7實驗報告word格式文檔
下載2018東南大學自動化學院微機實驗6、7實驗報告.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

主站蜘蛛池模板: 极品粉嫩嫩模大尺度无码视频| 日日猛噜噜狠狠扒开双腿小说| 人妻少妇久久久久久97人妻| 中文字幕人妻丝袜乱一区三区| 国内精品国内精品自线在拍| 上海少妇高潮狂叫喷水了| 色偷偷中文字幕综合久久| 国产成人无码av一区二区在线观看| 精品性影院一区二区三区内射| 亚洲欭美日韩颜射在线二| 麻豆精品秘?一区二区三区| 又粗又猛又黄又爽无遮挡| 99久久精品精品6精品精品| 亚洲成在人网站av天堂| 97久久超碰中文字幕| 亚洲精品一区二区中文字幕| 三个老头同嫖一个老妇| 粗大猛烈进出高潮视频二| 亚洲宅男精品一区在线观看| 国产精品久久久久秋霞鲁丝| 国产成人精品亚洲日本在线观看| 免费网禁国产you女网站下载| 亚洲 自拍 欧美 日韩 丝袜| 日日碰狠狠添天天爽五月婷| 午夜三级a三级三点在线观看| 国产区图片区小说区亚洲区| 国产乱人伦偷精品视频免下载| 东京热无码国产精品| 国产麻豆| 麻豆国产人妻欲求不满谁演的| 精品国产a∨无码一区二区三区| 蜜桃精品免费久久久久影院| 久久综合久久自在自线精品自| 亚洲精品中文字幕久久久久| 国产乱了真实在线观看| 收集最新中文国产中文字幕| 亚洲精品无码mv在线观看| 毛茸茸厕所偷窥xxxx| 亚洲精品少妇高清30p| 国产精品v片在线观看不卡| 国产欧美va欧美va香蕉在|