




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、四川大學網(wǎng)絡教育學院計算機綜合實踐校外學習中心: 天津市勞動經(jīng)濟學校 學 生 姓 名: 邊浩東 專 業(yè): 電氣工程及其自動化 層 次: 專升本(業(yè)余) 年 級: 2012春 學 號: DH1121S1003 實 踐 時 間: 2014年2月16日 一、熟悉、使用DEBUG調試工具摘要 借助DEBUG調試工具來發(fā)現(xiàn)匯編語言程序的錯誤所在并加以改正。通過實驗,掌握DEBUG的常用基本命令,學會如何在windows的命令模式下啟動DEBUG,進而學會如何使用DEBUG查看CPU和內存,以及進行程序的跟蹤調試等。1 實驗目的1.1學習如何在Windows的命令模式下啟動DEBUG。1.2掌握DEBUG
2、的常用基本命令。1.3學習如何使用DEBUG查看CPU和內存以及進行跟蹤調試。2 實驗設備及軟件環(huán)境裝有DOS系統(tǒng)及MASM6.X的微機一臺。3 預備知識3.1 什么是DEBUG? Debug是DOS、Windows都提供的實模式(8086方式)程序的調試工具。使用它,可以查看CPU各種寄存器的內容、內存的情況和在機器碼級跟蹤程序的運行。3.2 常用的Debug命令及其含義表1.1 Debug命令及其含義命令格式 功能說明R 寄存器名 查看、改變CPU寄存器的內容D 范圍 查看指定范圍內的內存中的內容E 起始地址 字節(jié)值表 用值表中的值替換從“起始地址”開始的內存單元中的內容U 范圍 反匯編,
3、將內存中的機器指令翻譯成匯編指令T 地址指令數(shù) 執(zhí)行一條機器指令A 地址 以匯編指令的格式在內存中寫入一條機器指令Q 退出Debug,回到DOS狀態(tài)4 啟動DEBUG4.1打開Windows命令窗口選擇“開始”“運行”輸入“cmd”命令4.2啟動DEBUG在命令窗口中啟動DEBUG,將顯示連接符“”,這時可輸入各種DEBUG命令。4.3關于使用命令的幾點說明:l 在提示符“”下才能輸入命令,在按“回車”鍵后,該命令才開始執(zhí)行;l 命令是單個字母,命令和參數(shù)的大小寫可混合輸入;l 可用F1、F2、F3、Ins、Del、等編輯鍵來編輯本行命令;l 當命令出現(xiàn)語法錯誤時,將在出錯位置顯示“Error
4、”;l 在DEBUG中使用的數(shù)都是以十六進制來表示的。5 實驗內容5.1 R命令作用:查看、改變CPU寄存器的內容(1)顯示所有寄存器之中的內容:輸入R我們重點關注AX、BX、CX、DX、CS及IP寄存器的內容,其他寄存器SP、BP、SI、DI、ES、SS及標志寄存器先不予理會。此外,并列出了CS:IP所指向的內存單元處所存放的機器碼,并將它翻譯為匯編指令。(2)改變寄存器中的內容:輸入R AX在提示符“:”后輸入1111,即可將AX的值設置為1111。在輸入R命令,查看修改后的寄存器值。5.2 D命令作用:查看指定范圍內的內存中的內容(1)直接輸入D命令DEBUG將輸出3部分內容,查看執(zhí)行結
5、果。說明:l 左邊是每行的起始地址,用“XXXX:YYYY”表示,其中XXXX表示內存單元的段地址,YYYY表示內存單元的偏移量;l 中間以十六進制的形式顯示從指定地址開始的128個內存單元的內容,每行顯示16個字節(jié)的內容;l 右邊顯示每個內存單元中的數(shù)據(jù)對應的可顯示的ASCII碼字符,若沒有對應可顯示的ASCII碼字符,DEBUG用“.”來代替。(2)執(zhí)行帶參數(shù)的D命令若執(zhí)行帶參數(shù)的命令D,DEBUG將顯示指定地址范圍的內容。帶參數(shù)的方式有三種。l 方式一:D 起始位置n DEBUG從起始位置開始顯示128個字節(jié)的內容。n 輸入命令:D 1AF5:100l 方式二:D 起始位置 結束位置n
6、DEBUG從起始位置開始一直顯示到結束位置。n 輸入命令:D DS:100 11Fl 方式三:D 起始位置 L長度n DEBUG命令從起始位置開始顯示指定長度內容。n 輸入命令:D DS:100 L10使用帶參數(shù)的D命令后,接著使用D命令,可列出后續(xù)的128個內存單元的內容。5.3 E命令格式:E 起始地址 字節(jié)值表 或 E 起始地址作用:用值表中的值替換從“起始地址”開始的內存單元中的內容例1:將內存1000:01000:9單元中的內容分別寫為0、1、2、3、4、5、6、7、8、9,可用“E 起始地址 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù)”的格式來進行。步驟: 用D命令查看1000:01000:f單
7、元的內容:D 1000:0 f 用E命令修改從1000:0開始的10個單元中的內容:E 1000:0 0 1 2 3 4 5 6 7 8 9 用D命令查看1000:01000:f單元中內容的變化:D 1000:0 f例2:用E命令向內存中寫入字符。從內存1000:0開始寫入:數(shù)值1,字符“a”,數(shù)值2,字符“b”,數(shù)值3,字符“c”。步驟: 用D命令查看1000:0處的內容:D 1000:0 用E命令輸入:E 1000:0 1 a 2 b 3 c 用D命令查看1000:01000:f單元中內容的變化:D 1000:0 f例3:用E命令向內存中寫入字符串。從內存1000:0開始寫入:數(shù)值1,字符
8、串“a+b”,數(shù)值2,字符串“c+”,數(shù)值3,字符“IBM”。步驟: 用D命令查看1000:0處的內容:D 1000:0 用E命令輸入:E 1000:0 1 a+b 2 c+ 3 IBM 用D命令查看1000:01000:f單元中內容的變化:D 1000:0例4 用E命令以提問的方式來逐個地修改從某一地址開始的內存單元中的內容。以從1000:10單元開始為例。 步驟: 用D命令查看1000:10處的內容:D 1000:10 用E命令輸入:E 1000:10,按Enter鍵 DEBUG將顯示起始地址1000:0010以及第一個單元(即1000:0010單元)的原始內容:00.,然后光標停在“.”
9、的后面,提示輸入想要寫入的數(shù)據(jù),此時有兩種選擇:其一輸入數(shù)據(jù),完后按空格鍵,即用輸入的數(shù)據(jù)改寫當前的內存單元;其二不輸入數(shù)據(jù),直接按空格鍵,則表示不對當前內存單元進行改寫 當前單元處理完成后(不論是改寫或者沒有改寫,只要按了空格鍵,就表示處理完成),DEBUG將顯示下一個內存單元的原始內容,并提示進行修改,可以用同樣的方法進行處理 所有希望改寫的內存單元改寫完畢后,按ENTER鍵,E命令結束 用D命令查看1000:10單元中內容的變化:D 1000:10 6實驗任務C:>debug -F 100 17F 00 -A 100 0B3E:0100 MOV DL,01 0B3E:0102 MO
10、V AH,02 0B3E:0104 INT 21 0B3E:0106 INT 20 0B3E:0108 -N C:1ST.COM -R BXBX 0000 : -R CX CX 0000 :8 -W 100 Writing 00008 bytes -Q C:>在dos下執(zhí)行程序 C:>dir 1st*.* Volume in drive C is NTFSCCCC Volume Serial Number is FC03-2958 Directory of C: 2010-8-18 18:51 8 1ST.COM 1 File(s) 8 bytes 0 Dir(s) 1,080,6
11、19,008 bytes free C:>1st C:>方法一:C:>DEBUG 1ST.COM -G=100 Program terminated normally方法二: C:>DEBUG -N C:1ST.COM -L 100 -G=100 Program terminated normally借助DEBUG調試工具來發(fā)現(xiàn)匯編語言程序的錯誤所在并加以改正。 7體會這次實驗,因為要自己去設計整個過程,所以就去了解學習自己原來并沒有真正弄懂的東西。比如一些程序的代碼的意思,匯編語言的邏輯。使我對前面所做的實驗有了原理性的了解,回頭看一些實驗,也知其然其所以然了。同時對
12、課本上講的一些內容,不再像以前那樣覺得抽象,通過這次設計,有了具體的理解。二、設計匯編語言程序1實驗目的進行程序設計實驗,掌握匯編語言程序。實驗包括對字符串統(tǒng)計程序進行設計;設計雙字乘法程序設計;設計字符串統(tǒng)計程序設計雙字乘法程序設計。掌握宏匯編中的標號的使用學會使用msam編寫簡單的程序2預備知識匯編語言程序設計是一門實踐性很強的課程。編寫程序、上機調試、運行程序是進一步學習和掌握匯編語言程序設計的必要手段。在編譯匯編程序后,需要進行調試,DEBUG.EXE是DOS提供的用于調試可執(zhí)行程序的工具軟件,是匯編語程序設計中常用的調試工具。在DEBUG環(huán)境下,不但可以調試經(jīng)匯編、連接生成的可執(zhí)行程
13、序,也可以編寫簡單的程序。調試匯編語言程序,能使用戶接觸到計算機內部,允許用戶直接觀察和修改CPU的寄存器;能觀察、修改內存單元;允許直接輸入機器指令并單步執(zhí)行;能反匯編程序。可以說,debug是觀察和了解計算機內部運行情況的有利助手。3匯編語言源程序上機操作過程3.1源程序上機過程流程圖 開始建立源文件 Y有人工檢查嗎? 修改源程序 NASM文件存盤調MASM程序匯編源文件 Y有語法錯誤? N調LINK程序,連接目標文件?連接有錯?EXE文件存盤 用DELBUG查錯執(zhí)行EXE文件 Y結果有錯? N結束3.2 實驗步驟1)編寫一段代碼(m.asm)功能是:顯示字符串data segment m
14、ov ax,num num dw 8072h or ax,ax data ends jns donecode segment neg ax assume cs:code,ds:data mov num,a xstart proc far done: r t epush ds start endpxor ax,ax code end spush ax end start mov ax,data mov ds,ax 2) 在DOS提示符下鍵入:對名為m.asmd的文件進行編譯,連接生產(chǎn).obj和.exe文件:-cd.-cd.-cdmasm-msam-m-link t-debug m.exe得到可執(zhí)
15、行文件后就可以直接調用可執(zhí)行文件名,從盤上調到內存中運行。程序及運行結果(或實驗數(shù)據(jù)記錄及分析)3)編寫一段代碼(m.asm)功能是:顯示字符串data segment lp3:cmp ax,64h mov dl,bx+sis db 4 dup(?) mov ds,ax add dl,30hx db ? jb lp4 int 21hdata ends inc dl inc sicode segment sub ax,64h loop lp7assume cs:code,ds:data jmp lp3 mov ah,1start:mov ax,data lp4:mov s+1,dl int 21
16、h mov ds,ax mov dl,0 mov ah,4ch mov bx,1 lp5: cmp ax,0ah int 21h mov ax,0 jb lp6 code ends mov cx,100 inc dl end start lop:add ax,bx sub ax,0ah inc bx jmp lp5 loop lop lp6:mov s+2,dl mov dl,0 mov s+3,al lp1:cmp ax,3e8h mov bx,offset s jb lp2 mov si,0 inc dl mov ah,2 sub ax,3e8h mov cl,4 jmp lp1 lp7:
17、mov di,bx+si lp2:mov s,dl or di,30h mov dl,0 4) 在DOS提示符下鍵入:對名為m.asmd的文件進行編譯,連接生產(chǎn).obj和.exe文件:-cd.-cd. -msam -link t -cdmasm m -debug m.exe程序及運行結果(或實驗數(shù)據(jù)記錄及分析)4體會編寫好一個程序后,要想在計算機中調試、運行,必須要有一個程序來支持程序的編輯、修改等操作。這種支援程序叫編輯程序。編輯程序有很多種,但按功能劃分,主要有兩大類。一類是行編輯程序,如EDIT編輯程序;另一類是全屏幕編輯程序如Quick Edit(QE)。行編輯程序功能較弱,不如全屏幕
18、編輯程序方便、靈活。在編輯匯編語言的源程序時,可以使用已熟悉的。三、8253定時器/計數(shù)器接口與數(shù)字電子琴摘要 選擇利用實驗儀揚聲器/PC機內8253驅動內揚聲器改變定時器2的計數(shù)值來改變聲音頻率,通過編程來獲得聲調(頻率)和節(jié)奏(延時長短),利用鍵盤1、2、3、4、5、6、7、8設計一個電子琴,通過按數(shù)字鍵響相應的樂符1、2、3、4、5、6、7、i,使能演奏簡單的樂曲。使計算機演奏出樂曲來。1實驗目的檢驗和提高我在原理與接口綜合應用方面分析問題與解決問題的能力,同時也給我提供更多、更好的訓練機會。根據(jù)設計要求,盡可能完成設計要求的功能,選擇最合適的器件,構成最有效的硬件電路來完成。2實驗要求
19、選擇利用實驗儀揚聲器/PC機內8253驅動內揚聲器與鍵盤1、2、3、4、5、6、7、8設計一個電子琴,通過按數(shù)字鍵響相應的樂符1、2、3、4、5、6、7、i,使能演奏簡單的樂曲。3程序流程和程序實現(xiàn)3.1流程圖 開始鍵盤讀入一個字符是ESC鍵嗎? N N 返回DOS是數(shù)字18鍵嗎? Y讀出音階值保存賦相應頻率延時3.2程序seg segment freq dw 262,294,330,349,392,440,494,523 ;揚聲器發(fā)聲各頻率值msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'tim dw 400num
20、 db ?dseg endssseg segment stack dw 256 dup(?)sseg endscseg segment assume cs:cseg,ds:dsegstart: mov ax,dseg mov ds,ax mov dx,offset msg mov ah,9 int 21h ;顯示提示信息sss: mov ah,7int 21h ;等待從鍵盤接收字符,不回顯al=asc碼 cmp al,1bh je exit;若為ESC鍵,則轉EXIT退出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在'1
21、39;-'8'之間轉sss sub al,31h mov num,al ;num求出相應的時間常數(shù)的序號jinei: mov al,num add al,al mov ah,00h mov si,axagain: mov di,freqsi mov bx,tim call gen jmp sssexit: mov ah,4ch int 21hgen proc near mov al,0b6h ;設置8253通道2方式3二進制計數(shù) out 43h,al mov dx,12h mov ax,12928; DX AX=896*533h=18*65536+12928=1.19M div
22、 di out 42h,al ;8253通道2口設置初值 mov al,ah out 42h,al in al,61h ;讀8255PB口 mov ah,al or al,3out 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延時子程序delay2: nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp cseg endsend start3.3試驗儀電子琴流程圖3.4實驗電路:3.5程序data segmentioportequ 0d400h
23、-0280hio8253aequ ioport+280hio8253bequ ioport+283hio8255aequ ioport+288hio8255bequ ioport+28bhio0832aequ ioport+290hdata1 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;正弦波數(shù)據(jù)time db 120,106,94,8
24、9,79,70,63,59;發(fā)不同音時8253的計數(shù)器初值msg db 'Press 1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'num db ?;num為8253計數(shù)器初值的序號data endscode segment assume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset msgmov ah,9int 21h ;顯示提示信息sss:mov ah,7int 21h ;從鍵盤接收字符,不回顯cmp al,1bhje exit ;若為ESC鍵,則轉EXITcmp al,31
25、hjl ssscmp al,38hjg sss ;若不在'1'-'8'之間轉ssssub al,31hmov num,al ;求出相應的時間常數(shù)的序號mov cx,60 ;取60次32個正弦波數(shù)據(jù)ddd:mov si,0lll:mov al,data1si ;取正弦波數(shù)據(jù)mov dx,io0832aout dx,al ;放音call delay ;調延時子程序inc sicmp si,32 ;是否取完32個數(shù)據(jù)jl lll ;若沒有,則繼續(xù)loop ddd ;總循環(huán)次數(shù)60是否完,沒有,則繼續(xù)jmp sssexit:mov ah,4chint 21hdelay
26、proc near ;延時子程序ccc:mov bx,offset timemov dx,io8253b ;置8253通道0為方式0工作mov al,10hout dx,almov dx,io8255b ;設8255A口輸入mov al,9bhout dx,almov al,num ;取相應的時間常數(shù)xlatmov dx,io8253aout dx,al ;向8253通道0輸出kkk:mov dx,io8255ain al,dx ;從8255A口讀一字節(jié)test al,01 ;判PA0口是否為1jz kkk ;若不為1,則轉KKKret ;子程序返回delay endpcode endsend
27、 start4測試方案和測試結果 測試方案 測試結果啟動程序,出現(xiàn)按鍵提示,按下18鍵機內/實驗儀發(fā)出相應的音階改變開關狀態(tài)(可隨時任意改變),按18鍵對應發(fā)出相應的音階“彈琴”發(fā)出優(yōu)美旋律按下ESC鍵退出程序5體會 通過這次微機實驗課程設計,使我對微機軟硬件結合有了進一步的了解。原來并不太清楚是什么意思,一直都很模糊,聽課本也是很迷茫;而之前的那些單元實驗,也沒有都做好。之前做的實驗,由于大部分是驗證性的,所以就很被動地去做,甚至并沒有想為什么要那樣連電路,內部的代碼更沒有認真看。這次課程設計,要自己去設計整個過程,了解學習自己原來并沒有真正弄懂的東西。比如一些程序的代碼的意思,匯編語言的邏
28、輯,比如一些芯片的用途。使我對前面所做的實驗有了原理性的了解,回頭看一些實驗,也知其然其所以然了。同時對課本上講的一些內容,不再像以前那樣覺得抽象,通過這次設計,有了具體的理解。 同時,我也知道了設計一個項目,應該如何下手。應該先對項目要求有個全面的了解,知道要做什么,然后根據(jù)要求所要涉及到的知識我們要主動去攝取,結合自己已學過的,再對整體框架有個感知,心里有數(shù)后,進行設計。設計時用流程圖,這很重要,這樣整個思路就很清晰,而且是按照軟硬件語言的邏輯順序進行,就很方便。設計過程可以分模塊,不要一開始就想把所有的功能都實現(xiàn)了,應該一個模塊一個模塊地實現(xiàn),再總的連起來,實現(xiàn)最后的總模塊。在每個模塊設
29、計時,盡量想到比較簡單的設計,簡化編程和電路,也可少出錯。對微機是這樣,對其他的像數(shù)字系統(tǒng)設計,也是一樣的。 因此,我也覺得微機實驗的這種形式的課程設計是很好也很有必要的,對我們對微機實驗的理解有很大幫助。四、實時時鐘實驗1實驗目的1.1了解RTC實時時鐘特性、功能、結構1.2了解RTC實時時鐘寄存器描述1.3了解RTC中斷2實驗過程2.1利用RTC的增量功能進行1s的定時,當定時時間到,取反LED控制#include "config.h"#define LED1CON 0x00000400 /*P0.10口為LED1控制器*/*定義Fpclk值,用于設置串口波特率*/#d
30、efine FPCLK 3686250L2.2初始化實時時鐘void RTCIni(void) PREINT=FPCLK/32768-1; /設置預分頻器 PREFRAC=FPCLK-(FPCLK/32768)*32768; YEAR=2005; /初始化年 MONTH=6; /初始化月 DOM=10; /初始化日 CIIR=0x01; /設置秒值的增量產(chǎn)生一次中斷 CCR=0x01; /啟動RTC2.3使用RTC的秒增量中斷功能控制LED閃動int main(void) PINSEL0=0x00000000; /引腳連接設置 PINSEL1=0x00000000; IODIR=LED1CON
31、; RTCIni(); /初始化RTC while(1) IOSET=LED1CON; /熄滅LED1 while(0=(ILR&0x01); /等待RTC增量中斷標志 ILR=0x01; /清除中斷標志 IOCLR=LED1CON; /點亮LED1 while(0=(ILR&0x01); ILR=0x01; return(0);2.4運行rtc進行計時,并將所計時間值不斷地通過串口向上位機發(fā)送#include "config.h"#define LED1CON 0x00000400 /*P0.10口為LED1控制端*/* 定義Fpclk值,用于設置串口波特
32、率*/#define FPCLK 2764800L/*定義串口模式設置數(shù)據(jù)結構*/typedef struct UartMode uint8 datab; /字長度,5/6/7/8 uint8 stopb; /停止位,1/2 uint8 parity; /奇偶校驗位,0為無校驗,1為奇數(shù)校驗,2為偶數(shù)校驗 UARTMODE;uint8 send_buf16; /UART0數(shù)據(jù)接收緩沖區(qū) 2.5初始化串口0,設置其工作模式及波特率入口參數(shù): baud 波特率 set 模式設置(UARTMODE數(shù)據(jù)結構)出口參數(shù): 返回值為1時表示初始化成功,為0時表示參數(shù)出錯uint8 UART0_Ini(ui
33、nt32 baud, UARTMODE set) uint32 bak; /*參數(shù)過濾*/ if (0=baud)|(baud>115200)return(0); if (set.datab<5)|(set.datab>8)return(0); if (0=set.stopb)|(set.stopb>2)return(0); if (set.parity>4)return(0); /*設置串口波特率*/ U0LCR=0x80; /DLAB位置1 bak=(FPCLK>>4)/baud; U0DLM=bak>>8; U0DLL=bak&
34、;0xff; /*設置串口模式*/ bak=set.datab-5; /設置字長度 if(2=set.stopb)bak|=0x04; /判斷是否為2位停止位 if(0!=set.parity)set.parity=set.parity-1; bak|=0x08; bak|=set.parity<<4; /設置奇偶校驗 U0LCR=bak; return(1);2.6向串口發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢void SendByte(uint8 data) U0THR=data; /發(fā)送數(shù)據(jù) while(U0LSR&0x20)=0); /等待數(shù)據(jù)發(fā)送 2.7將緩沖區(qū)的數(shù)據(jù)發(fā)送回主
35、機入口參數(shù): buf 數(shù)據(jù)緩沖區(qū) no 發(fā)送數(shù)據(jù)的個數(shù)出口參數(shù): 無void ISendBuf(uint8 const *buf,uint8 no) uint8 i; for(i=0;i<no;i+)SendByte(bufi); 2.8讀取rtc的時間值,并將讀出的時分秒值由串口發(fā)送到上位機顯示void SendTimeRtc(void) uint8 const MESSAGE="RTC Time is:" uint32 times; uint8 bak; times=CTIME0; /讀取完整時鐘寄存器0 bak=(times>>16)&0x1
36、F; /取得時的值 send_buf0=bak/10+'0' send_buf1=bak%10+'0' send_buf2=':' bak=(times>>8)&0x3F; /取得分的值 send_buf3=bak/10+'0' send_buf4=bak%10+'0' send_buf5=':' bak=times&0x3F; /取得秒的值 send_buf6=bak/10+'0' send_buf7=bak%10+'0' send_bu
37、f8='n' ISendBuf(MESSAGE,14); /發(fā)送數(shù)據(jù) ISendBuf(send_buf,9); 2.9初始化實時時鐘void RTCIni(void) PREINT=FPCLK/32768-1; /設置預分頻器 PREFRAC=FPCLK-(FPCLK/32768)*32768; YEAR=2005; /初始化年 MONTH=6; /初始化月 DOM=10; /初始化日 HOUR=8; MIN=30; SEC=0; CIIR=0x01; /設置秒值的增量產(chǎn)生一次中斷 CCR=0x01; /啟動RTC 2.10讀取實時時鐘的值,并從串口發(fā)送出去int main(
38、void) UARTMODE uart0_set; PINSEL0=0x00000005; /設置I/O連接到UART0 PINSEL1=0x00000000; IODIR=LED1CON; /設置LED1控制口為輸出,其它I/O為輸入 uart0_set.datab=8; /8位數(shù)據(jù)位 uart0_set.stopb=1; /1位停止位 uart0_set.parity=0; /無奇偶校驗位 UART0_Ini(9600,uart0_set); /初始化串口模式 U0FCR=0x01; /使能FIFO RTCIni(); /初始化RTC while(1) IOSET=LED1CON; /熄滅
39、LED while(0=(ILR&0x01); /等待RTC增量中斷標志位 ILR=0x01; /清除中斷標志位 SendTimeRtc(); /讀取時鐘值,并向UART0發(fā)送 IOCLR=LED1CON; /點亮LED while(0=(ILR&0x01); ILR=0x01; SendTimeRtc(); return(0);3實驗電路圖4體會學習rtc的時間并不長,而且又是第一次接觸,因此有很多東西還是不太了解,雖然說時間不長,但是還是很有收獲的,這次畢竟使自己有機會去學習一些貼近硬件的知識,如果將來有機會再學習,我還是很樂意的。畢竟一個真正學習計算機的人不能只知道軟件的
40、知識。五、8255并行接口鍵盤實驗1實驗目的1.1掌握8255A的功能及方式0、1的實現(xiàn)1.2熟悉8255A與CPU的接口,以及傳輸數(shù)據(jù)的工作原理及編程方法。2準備知識2.1 8255的工作方式一片8255內部有3個端口,A口可以工作在方式0、方式1或方式2,B口可以工作在方式0、方式1,C口可以工作在方式0。方式0是基本型輸入/輸出。這種方式和外設交換數(shù)據(jù)時,8255端口與外設之間不使用聯(lián)絡線。方式1為選通型輸入/輸出。用這種方式和外界交換數(shù)據(jù)時,端口和外設之間要有聯(lián)絡信號。方式2是雙向數(shù)據(jù)傳送,僅A口有這項功能。當A口工作在方式2時,B口仍可以工作在方式0或方式1,但此時B口方式1只能用查
41、詢方式與CPU交換信息。2.2 工作方式選擇字8255工作方式選擇字共8位,存放在8255控制寄存器中。最高位D7為標志位,D7=1表示控制寄存器中存放的是工作方式選擇字,D7=0表示控制寄存器中存放的是C口置位/復位控制字。2.3 C口置/復位控制字8255的C口可進行位操作,即:可對8255C口的每一位進行置位或清零操作,該操作是通過設置C口置/復位字實現(xiàn)的(圖8-10)。C口置/復位字共8位,各位含義如下:2.4 命令字與初始化編程8255有兩個命令字,即方式選擇控制字和C口置0/置1控制字,初始化編程的步驟是: 向8255控制寄存器寫入“方式選擇控制字”,從而預置端口的工作方式。 當端
42、口預置為方式1或方式2時,再向控制寄存器寫入“C口置0/置1控制字”。這一操作的主要目的是使相應端口的中斷允許觸發(fā)器置0,從而禁止中斷,或者使相應端口的中斷允許觸發(fā)器置1,從而允許端口提出中斷請求。 注意:“C口置0/置1控制字”雖然是對C口進行操作,但是該控制字是命令字,所以要寫入控制寄存器,而不是寫入C口控制寄存器。 向8255數(shù)據(jù)寄存器寫入“數(shù)據(jù)”或從8255數(shù)據(jù)寄存器讀出“數(shù)據(jù)”。3實驗過程鍵盤驅動的主要作用就是實時監(jiān)測外部按鍵中斷,一旦發(fā)現(xiàn)外部有鍵按下就向內核發(fā)送鍵盤消息實現(xiàn)鍵盤輸入功能。鍵盤驅動創(chuàng)建了中斷服務線程和4個鍵盤中斷事件,每行按鍵對應一個鍵盤中斷事件。有鍵被按下時,中斷服
43、務例程得到對應的中斷標識符并報告給系統(tǒng)任務調度進程,同時產(chǎn)生鍵盤中斷事件,鍵盤中斷服務線程響應鍵盤中斷事件,開始掃描矩陣鍵盤。根據(jù)產(chǎn)生的中斷事件類型不同,可以首先確定被按下鍵的行位置。由于鍵盤被按下后,該鍵對應的行和列被連通,因此根據(jù)判斷各列對應的I/O口的電平,可以得到被按下鍵的列位置;得到按鍵的準確位置后,通過向操作系統(tǒng)發(fā)送鍵盤消息KEYBD_EVENT,實現(xiàn)一次鍵盤輸入。循環(huán)掃描鍵盤,直到按鍵被彈起則發(fā)送KEYEVENTF_KEYUP事件。響應鍵盤中斷輸入的整個流程如圖。3.1 在OAL層加入中斷源矩陣鍵盤采用4路I/O口中斷,每路中斷對應1個中斷源。矩陣鍵盤驅動首先要在OAL層加入這些中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提高班級工作效率的實踐經(jīng)驗計劃
- 期貨合約交易策略優(yōu)化考核試卷
- 私人房屋 合同范本
- 保險理賠部工作總結與患者投訴處理計劃
- 幕墻的合同范本
- 征兵體檢合同范本
- 科技產(chǎn)業(yè)未來趨勢與投資方向
- 修建護欄合同范本
- 小班環(huán)保知識宣傳與實踐計劃
- 如何進行市場需求分析計劃
- 精雕JDPaint快捷鍵大全
- 燈泡貫流式機組基本知識培訓ppt課件
- 小學數(shù)學四年級下冊培優(yōu)補差記錄
- 人教版三年級下冊體育與健康教案(全冊教學設計)
- DB61∕T 5006-2021 人民防空工程標識標準
- 土壤學習題與答案
- 產(chǎn)品結構設計(課堂PPT)
- 第九課_靜止的生命
- 尖尖的東西我不碰(課堂PPT)
- 工程勘察和設計承攬業(yè)務的范圍
- 數(shù)字化影像與PACS教學大綱
評論
0/150
提交評論