單片機原理及應(yīng)用實驗
《單片機原理及應(yīng)用實驗》由會員分享,可在線閱讀,更多相關(guān)《單片機原理及應(yīng)用實驗(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 單片機原理及應(yīng)用實驗 指導(dǎo)說明書 信息物理與工程系 王春勇 2003年5月2日 實驗一 指令系統(tǒng)實驗 一、實驗?zāi)康模? 掌握仿真器的安裝、連接和調(diào)試方法 開始 除數(shù)為零 清部分余數(shù),裝計數(shù)器R1 置溢出標志 部分余數(shù)、被除數(shù)左移 部分余數(shù)-除數(shù) 夠減 上商,建立新余數(shù) 次數(shù)到 余數(shù)最高位是1 余數(shù)*2>除數(shù) 商+1 清溢出標記 返回 Y N Y Y Y Y N N N N 掌握MEDWIN軟件的使用 掌握程序的編輯、編譯和調(diào)試方法 熟練掌握MCS-51單片機指令系統(tǒng) 二、
2、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 仿真器是單片機開發(fā)過程中不可缺少的重要儀器,它能在仿真軟件的控制下,完成MCS-51單片機的所有軟件和硬件功能。并能實現(xiàn)編輯、編譯/匯編、在線及模擬調(diào)試,能實現(xiàn)單步、連續(xù)、和設(shè)置斷點運行,并能在PC機上顯示單片機當前運行結(jié)果和各功能寄存器狀態(tài)。 四、實驗步驟 1.仔細閱讀MEDWIN軟件使用手冊,了解軟件使用方法。 2.打開PC機,按照MEDWIN軟件安裝方法,安裝MEDWIN軟件到指定目錄。 3.按格式輸入編制好的匯編程序。 4.對程序進行編譯,查找語法錯誤。
3、 5.根據(jù)編譯過程指出的錯誤,修改錯誤,重復(fù)第4步,直到編譯通過。 6.開始調(diào)試,讓程序單步運行,通過觀察輸出結(jié)果的變化,查找程序錯誤。 7.修改錯誤,并重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前要預(yù)習(xí),熟悉MCS-51指令系統(tǒng),了解GDEE-II實驗系統(tǒng)的基本結(jié)構(gòu)和各部分的功能,仔細閱讀MEDWIN軟件的使用手冊,掌握軟件的安裝和基本功能的使用。 實驗中要求用匯編語言,編制一段雙字節(jié)除法程序,控制單片機運行。在MEDWIN軟件的控制下,使仿真器工作在單步運行模式,通過觀察各輸出窗口,查找程序錯誤,最終使程序正常運行。雙字節(jié)除法程序流程圖如右: 六、實驗結(jié)果 在
4、寄存器中輸入給定數(shù),檢查輸出結(jié)果是否正確。 實驗二 靜態(tài)顯示實驗 一、實驗?zāi)康? 1. 進一步掌握仿真器的使用和MEDWIN軟件的調(diào)試方法。 2. 掌握由雙字節(jié)16進制數(shù)轉(zhuǎn)換為壓縮BCD碼的軟件編制 3. 掌握輸出接口的硬件連接方式和軟件控制方法。 4. 掌握口地址的取得方法 5. 掌握7段LED顯示原理 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 7段LED有共陰極和共陽極兩種,當公共極為“0”,當陽極上輸入“1”時,所選段被點亮,,否則,LED不亮,這種LED稱為共陰極;與之相反,當公共極為“1”
5、,當陰極上輸入“0”時,所選段被點亮,,否則,LED不亮,這種LED稱為共陽極。 為了在LED上顯示數(shù)字,首先要把數(shù)字轉(zhuǎn)換為相應(yīng)的段碼,又稱為字型碼或字模。這一轉(zhuǎn)換可通過硬件和軟件來實現(xiàn)。在本實驗中,字型轉(zhuǎn)換通過硬件來實現(xiàn)。 靜態(tài)顯示電路原理如下,它主要由四部分組成: 1) 四位共陰極七段LED顯示器。 2) 由四片CD4511芯片組成的硬件譯碼電路,實現(xiàn)從BCD碼到7段碼的轉(zhuǎn)換和電流驅(qū)動。 3) 數(shù)據(jù)鎖存部分,由兩片74HC374組成。由于每個BCD碼只要四位,而74HC374是一個8位數(shù)據(jù)鎖存器,因此只要兩片(U2、U3)74HC374就可鎖存四位LED要顯示的數(shù)據(jù)。 4)
6、 地址鎖存譯碼部分,由地址鎖存器74HC373和地址譯碼器74HC138組成,U2、U3的片選地址由U4:74HC138譯碼提供,根據(jù)電路結(jié)構(gòu),可得U2、U3的口地址分別為83H、84H。 四、實驗步驟 1. 分析靜態(tài)顯示電路原理; 2. 選擇雙字節(jié)16進制數(shù)轉(zhuǎn)換為壓縮BCD碼的合適算法; 3. 根據(jù)靜態(tài)顯示原理和所選擇轉(zhuǎn)換算法,繪制相應(yīng)的轉(zhuǎn)換及顯示流程圖; 4. 按流程圖編制單片機程序; 5. 進行程序編譯,檢查軟件語法錯誤,如存在語法錯誤,則重復(fù)4 ,直到編譯通過; 6. 連接仿真器和實驗儀,并檢查是否連接正確; 7. 進行單步調(diào)試,檢查程序是否存在功能錯誤,如存在錯誤,則
7、進行修改,返回步驟5,直至輸出正確結(jié)果。 五、實驗要求 實驗前通過預(yù)習(xí),掌握靜態(tài)顯示的基本原理,了解相關(guān)電路芯片的使用方法,繪制程序流程圖。實驗中要進一步掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的一般步驟,通過調(diào)試,在LED上正確顯示任意雙字節(jié)16進制數(shù)的BCD碼。 六、實驗結(jié)果 在程序進行編譯、調(diào)試之后,能在LED上正確顯示任意雙字節(jié)16進制數(shù)的BCD碼。 實驗三 動態(tài)顯示實驗 一、實驗?zāi)康? 1. 掌握MEDWIN軟件的使用和仿真器調(diào)試程序方法 2. 掌握動態(tài)顯示的原理和電路組成原理 3. 掌握字模的制作方法 4. 掌握主
8、程序、子程序的設(shè)計。 5. 掌握口地址的取得方法 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 動態(tài)顯示實際上是利用人眼的視覺暫時停留原理而實現(xiàn)的,當某顯示的閃爍頻率大于25Hz時,人眼察覺不到閃爍的存在。動態(tài)顯示就是讓LED工作在脈沖狀態(tài),每次導(dǎo)通幾毫秒,脈沖頻率大于50Hz。由于工作在脈沖狀態(tài),瞬時導(dǎo)通電流較大,因此,選通電路要有電流驅(qū)動。為了使顯示時每次只有一只LED被點亮,因此,每次只能有一個片選信號有效。 在此實驗中,字模譯碼采用軟件譯碼,因此,首先要建立軟件字模,存于ROM中,當顯示時,查表就可得相對應(yīng)的
9、字模。 如下動態(tài)顯示電路原理圖,它由四部分組成: 1) 六位共陽極七段LED顯示器,它們的段碼都分別連在一起,稱為A、B、C、D、E、F、G、H,選通信號分別連接,它們是DS1、DS2、DS3、DS4、DS5、DS6。 2) 字模(段碼)寄存驅(qū)動器,軟件譯碼后,字模通過CPU寫入到段碼寄存驅(qū)動器U2(74HC374)中,由于段碼的電流較小,因而沒有添加更大電流的驅(qū)動器。 3) 選通信號寄存器和驅(qū)動器,LED的選通信號寫入到U3(74HC374)中,由于選通信號有較大電流流過,所以增加U5(MC1413)反相電流驅(qū)動器來驅(qū)動LED 4) 地址鎖存譯碼部分,由地址鎖存器74HC373
10、和地址譯碼器74HC138組成,U2、U3的片選地址由U4:74HC138譯碼提供,根據(jù)電路結(jié)構(gòu),可得U2、U3的口地址分別為80H、81H。 四、實驗步驟 1. 根據(jù)電路原理編制動態(tài)顯示軟件流程 2. 按流程圖編制軟件 3. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 4. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 5. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),掌握動態(tài)顯示的基本原理,了解相關(guān)電路芯片的使用方法和在電路中的作用,繪制程序流程圖。實驗中要進一步掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握
11、軟件調(diào)試的一般步驟,通過調(diào)試,在LED上正確顯示所須顯示的字符。 六、實驗結(jié)果 實驗后能使動態(tài)顯示器LED正常顯示,無閃爍現(xiàn)象,顯示字型正確。實驗后,討論動、靜態(tài)顯示在軟、硬件實現(xiàn)及顯示結(jié)果上的異同點。 實驗四 非編碼鍵盤實驗 一、 實驗?zāi)康? 1. 掌握非編碼鍵盤的電路原理和軟件控制方法 2. 掌握非編碼鍵盤的去抖方法 3. 掌握非編碼鍵盤的鍵盤處理方法 4. 掌握行掃描和線反轉(zhuǎn)實現(xiàn)鍵識別的軟件實現(xiàn)方法 二、 實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 鍵盤是一組開關(guān)的集合,是最常用的輸入設(shè)備,鍵盤
12、接口必須解決下列問題 1. 決定是否有鍵按下 2. 如果有鍵按下,決定是那一個鍵被按下 3. 確定被按鍵的讀數(shù) 4. 能對按鍵的抖動進行抑制 5. 不管一次按鍵持續(xù)的時間多長,僅采樣一個數(shù)據(jù) 6. 對同時有多個按鍵按下進行處理 一般鍵盤有編碼鍵盤和非編碼鍵盤。由于非編碼鍵盤電路簡單,所以,一般儀器中經(jīng)常使用。下面是實驗中4*4非編碼鍵盤電路原理圖: 有兩種方法能實現(xiàn)非編碼鍵盤的鍵識別,一種是行掃描法,一種是線反轉(zhuǎn)法,但后一種方法必須采用程控接口。 行掃描方法是以步進掃描的方式,每次在鍵盤的一行發(fā)出掃描信號,同時檢查列線輸入信號,若發(fā)現(xiàn)某列輸入信號與掃描信號一致,則
13、位于該列和掃描行交點的鍵被按下。通過掃描,可識別是那一鍵按下。 線反轉(zhuǎn)法是借助程控并行口實現(xiàn)的,其實現(xiàn)方法是:1)使行線為輸出口,輸出“0000”,列線為輸入口,讀入此時的按鍵狀態(tài)值;2)線反轉(zhuǎn),既行線為輸入口,列線為輸出口,輸出“0000”,從行線讀入此時按鍵狀態(tài)值;3)根據(jù)兩次的按鍵狀態(tài)值決定是那一鍵按下。 按鍵的去抖一般有兩種方法,一種是硬件的,采用R-S觸發(fā)器或J-K觸發(fā)器,另外一種是用軟件的方法,即延時去抖。在本實驗中采用延時去抖。 四、實驗步驟 1) 根據(jù)電路原理編制編碼鍵盤軟件流程 2) 按流程圖編制軟件 3) 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 4) 連
14、接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 5) 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),了解鍵盤工作的基本原理,特別掌握非編碼鍵盤的按鍵識別的軟件處理方法,繪制程序流程圖。實驗中要掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的方法和步驟,通過調(diào)試,在LED上正確顯示從鍵盤輸入的鍵值。每按一次,在LED上只顯示一個鍵值。 六、實驗結(jié)果 軟件調(diào)試正確后,能正確識別所按按鍵,并在動態(tài)顯示器上移位顯示所輸入鍵值。實驗結(jié)束后,討論兩種鍵盤處理方法的優(yōu)缺點。 實驗五 定時/計數(shù)器的使用 一、實驗?zāi)康?
15、1、 掌握定時/計數(shù)器的工作原理和控制方法 2、 掌握TMOD、TCON寄存器中各位的功能及使用方法 3、 掌握定時/計數(shù)器的初始化過程 4、 掌握中斷的控制方法 5、 掌握中斷矢量和中斷程序的編制方法 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 MCS-51系列單片機有兩個定時/計數(shù)器,它們在專用寄存器TMOD的控制下,可在軟件的控制下,工作在四種模式。通過對控制寄存器TCON的控制,可使定時/計數(shù)器工作在中斷或查詢方式。 MCS-51系列單片機有5個中斷源,兩級中斷優(yōu)先系統(tǒng),可通過軟件控制。 定時/計數(shù)
16、器實驗電路原理圖如下,其中動態(tài)顯示系統(tǒng)如上一實驗,可變時鐘源控制參考GDEE-II光電EDA實驗儀的使用說明。 四、實驗步驟 1. 按流程圖編制軟件 2. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 3. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 4. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),掌握定時/計數(shù)器的基本原理和控制方法,掌握中斷過程和中斷程序的編制方法,熟悉電路的連接,繪制程序流程圖。實驗中要進一步掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的一般步驟,通過調(diào)試,完成以下兩部分工作:
17、1)T1工作在定時狀態(tài),容許中斷,產(chǎn)生1S標準時間,T0工作在計數(shù)狀態(tài),把1S時間內(nèi)T0所計的數(shù)顯示在LED上。 2)T0工作在計數(shù)狀態(tài),測量INT0管腳上輸入正脈沖的時間寬度。 六、實驗結(jié)果 完成五中所要求的各項功能,在動態(tài)顯示LED上顯示運行結(jié)果。 實驗六 串口通信實驗 一、實驗?zāi)康? 1. 了解串口的工作原理 2. 掌握串口的軟件編程控制方法 3. 掌握波特率的計算方法和串口的初始化過程 4. 進一步掌握中斷的使用和鍵盤的控制 5. 了解RS232的傳輸標準 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺
18、三、實驗原理 MCS-51單片機有一個全雙工的通信接口,能同時進行發(fā)送和接收,同時也可做同步以為寄存器用。 MCS-51單片機的串口由串口控制寄存器SCON控制,使它有四種工作模式和不同的波特率,還可工作在中斷方式和查詢方式。 工作于模式1或3時,其波特率可變,可用下式來確定波特率: 波特率=2SMOD/32 * (T1溢出速率) T1溢出速率=計數(shù)速率 / {256 – TH1} 在實驗中,顯示和鍵盤電路如實驗2、實驗3,雙機通信電路連接如下,由于MCS-51輸出的是TTL電平,而我們一般在線路傳輸中采用RS232標準電平,因此要在接口中加入電平轉(zhuǎn)換接口,實際中采用MAX202芯
19、片實現(xiàn)TTL—RS232和RS232—TTL的轉(zhuǎn)換。 四、實驗步驟 1. 按流程圖編制軟件 2. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 3. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 4. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),了解RS-232C的傳輸協(xié)議和要求,掌握單片機串口工作的基本原理和控制方法,掌握串口控制寄存器SCON的應(yīng)用,了解串口各工作模式的工作原理,掌握串口波特率的設(shè)置方法和串口初始化過程,繪制串口工作程序流程圖。實驗中要掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的方
20、法和步驟, 實驗要求實現(xiàn)雙機通信,把鍵盤輸入的鍵值通過串口傳輸出去,同時接收串口輸入的數(shù)據(jù),通過譯碼后,在LED上顯示。在通信中要使用相同的通信協(xié)議,這樣才能保證通信的暢通,在本實驗中,通信中采用波特率=2400,數(shù)據(jù)位:8位,一個停止位,無奇偶校驗。 六、實驗結(jié)果 實驗完后,實現(xiàn)雙機通信,掌握要實現(xiàn)雙機通信必須具備的條件。 實驗七 并行D/A轉(zhuǎn)換實驗 一、 實驗?zāi)康? 1. 掌握D/A轉(zhuǎn)換的工作原理 2. 掌握D/A轉(zhuǎn)換芯片AD7528的工作原理 3. 掌握AD7528的工作時序和控制方法。 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光
21、電EDA實驗儀一臺 三、實驗原理 D/A轉(zhuǎn)換器的功能是把數(shù)字量轉(zhuǎn)換為與之成比例的模擬電壓或者是模擬電流。其輸出有電壓型和電流型,下面是由R—2R網(wǎng)絡(luò)組成的電流輸出型D/A轉(zhuǎn)換原理圖: 在實驗中,D/A轉(zhuǎn)換部分采用AD7528,它是一8位并行雙輸出D/A轉(zhuǎn)換器,其工作時序如下: AD7528 工作時序圖 AD7528 的工作電路圖如下, D0~D8為并行數(shù)據(jù)輸入端;與MCS-51單片機的數(shù)據(jù)總線相連。 CS 為片選端,低電平有效;此信號由地址信號經(jīng)74HC138譯碼后得到。地址為85H; WR 為寫入信號,低電平有效;與MCS-51單片機的WR管腳相連。 DACA
22、/B 為內(nèi)部DACA或DACB選擇端,當此管腳電位為高時,DACB 被選中,模擬輸出從OUT B 輸出,當此管腳電位為低時,DAC A 被選中,模擬輸出從OUT A 輸出。此信號與MCS-51單片機的P2.7相連。 四、實驗步驟 1. 按流程圖編制軟件 2. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 3. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 4. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),了解D/A轉(zhuǎn)換的基本原理,閱讀AD7528使用說明,掌握此芯片的使用方法,繪制軟件工作程序流程圖。實驗中要掌握MEDWIN軟件的使用,能正
23、確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的方法和步驟, 實驗要求:制作一波形發(fā)生器,在OUT-A上輸出一三角波,在OUT-B上輸出鋸齒波,兩波形的變化范圍為250個步距。 實驗八 串行A/D轉(zhuǎn)換實驗 一、實驗?zāi)康? 4. 掌握A/D轉(zhuǎn)換的工作原理 5. 掌握A/D轉(zhuǎn)換芯片TLC549的工作原理 6. 掌握TLC549的工作時序和控制方法。 7. 掌握SPI串行接口的工作時序和由MCS-51單片機模擬產(chǎn)生SPI串行接口的方法 二、實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 A/D是計算機控制中非常重
24、要的一部分,按接口形式可分為并行輸出和串行輸出兩種,按轉(zhuǎn)換精度有四位、8位、10位、12位、甚至20位等多種,按轉(zhuǎn)換速度有低速、高速和超高速之分,按轉(zhuǎn)換方式有階梯波比較式、逐次逼近式、直接比較式、雙斜式、Σ-Δ式等等,各種ADC的具體原理請參考有關(guān)書籍。 本實驗中,A/D部分采用TLC549,它是一8位串行輸出A/D轉(zhuǎn)換器,其電路工作原理圖如下:(P25、P26管腳交換,IN8接低電平) TLC549 電原理圖 如原理圖所示,TLC549的參考電壓接在電源電壓上,通過可變電位器R2的中心抽頭輸入模擬電壓,調(diào)節(jié)R2可調(diào)節(jié)輸入電壓,在模擬電壓輸入點可測量輸入
25、電壓的大小,I/O CLK 管腳輸入、輸出時鐘驅(qū)動,DATAOUT為數(shù)據(jù)輸出腳,A/D轉(zhuǎn)換后的數(shù)據(jù)由此腳串行輸出,CS為片選輸入腳,當CS為低時,此芯片被選通。TLC549的工作時序如下: 四、實驗步驟 1. 按流程圖編制軟件 2. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 3. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 4. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),了解A/D轉(zhuǎn)換的基本原理,閱讀TLC549使用說明,掌握此芯片的使用方法,繪制軟件工作程序流程圖。實驗中要掌握MEDWIN軟件的使用,能正確連接仿真器和GDE
26、E-II實驗系統(tǒng),掌握軟件調(diào)試的方法和步驟。 要求實驗中,根據(jù)TLC549所給出的時序圖,由MCS-51單片機模擬產(chǎn)生SPI接口信號訪問TLC549,讀出A/D轉(zhuǎn)換結(jié)果,在軟件的控制下把二進制數(shù)轉(zhuǎn)換為BCD碼在動態(tài)顯示器上顯示輸入模擬電壓值。 六、實驗報告 實驗完后,軟件正常運行,在動態(tài)顯示LED上以BCD碼顯示輸入電壓。 實驗九 打鈴器 一、實驗?zāi)康? 1. 掌握外部數(shù)據(jù)存儲器的硬件擴展方法 2. 掌握軟件訪問外部數(shù)據(jù)存儲器的方法 3. 了解實時時鐘芯片DS12887的使用 4. 掌握監(jiān)控程序的設(shè)計方法 5. 提高綜合運用鍵盤、顯示和單片機系統(tǒng)資源的能力。 二、實驗儀
27、器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、實驗原理 DS12887是DALLAS公司生產(chǎn)的實時時鐘芯片,它除了有14個控制寄存器外,還有114個通用存儲空間,通過對此芯片的編程利用,可使學(xué)生了解一般外部存儲器和I/O口的硬件連接和軟件訪問控制方法,學(xué)生通過編程控制此芯片,可以制作如數(shù)字鐘、打鈴器等實用程序,增加學(xué)生的學(xué)習(xí)興趣,加深對課程的理解。 DS12887 工作電原理圖 其中: D0~D8: 雙向地址/數(shù)據(jù)線; /RD: 數(shù)據(jù)有效。接CPU的讀信號/RD; /WR: 讀寫使能端。接CPU寫信號/WR;
28、 CS: 片選端,低電平有效。 ALE: 地址有效,接CPU的ALE信號; IRQ: 中斷請求輸出端。 DS12887內(nèi)部有10個時標寄存器,4個狀態(tài)寄存器和114個可供用戶使用的靜態(tài)RAM,其地址分配如下所示: 0 00H 0 秒 00H 14字節(jié) 1 秒報警 01H 14 0DH 2 分 02H 15 0EH 3 分報警 03H 4 時 04H 114字節(jié) 5 時報警 05H RAM 6 星期 06H (
29、可供用 7 日 07H 戶使用) 8 月 08H 9 年 09H 10 寄存器A 0AH 11 寄存器B 0BH 12 寄存器C 0CH 127 7FH 13 寄存器D 0DH DS12887 片內(nèi)寄存器和RAM地址分配 CPU可通過讀時標寄存器得到時間和日歷,也可通過編程設(shè)置其初值。地址為00H~09H,10個時標值可以選擇二進制碼或BCD碼表示。 片內(nèi)114個RAM,可供用戶在系統(tǒng)掉電時保存有用數(shù)據(jù),地址為0EH~07FH。 片內(nèi)4個狀
30、態(tài)/控制寄存器A、B、C、D用來控制和指示芯片的工作狀態(tài),其內(nèi)容可讀寫,地址為0AH~0DH。下面對此四寄存器予以說明: A 寄存器 寄存器A的格式如下: D7 D6 D5 D4 D3 D2 D1 D0 UIP / / / RS3 RS2 RS1 RS0 UIP:更新周期標志位。UIP=0 時,芯片正處于或?qū)㈤_始更新周期,此期間不容許讀寫時標寄存器。 RS3、RS2、RS1、RS0:中斷周期時間和SQW輸出頻率選擇位。 B 寄存器 寄存器B主要用于設(shè)置DS12887的工作狀態(tài)。其格式如下: D7 D6 D5 D4 D3 D2 D1 D
31、0 SET PIE AIE UIE SQWE DM 24/12 DSE PIE、AIE、UIE:分別為周期中斷、報警中斷、更新周期結(jié)束中斷允許位。各位分別為1時,允許發(fā)相應(yīng)的中斷。 SET:SET=0時芯片正常工作,每秒更新一次時標寄存器,此段時間為更新周期,SET=1時,芯片停止工作,此期間可編程時標寄存器。 SQWE:方波輸出允許。 DM:時標用BCD或二進制數(shù)表示選擇。DM=1選擇二進制;DM=0選擇BCD碼。 24/12:24小時制或12小時制選擇。24/12 為1時選24小時制;24/12 為0時選擇帶上午、下午的12小時制。 DSE:DSE=1 表示需要
32、正常時制與夏令時轉(zhuǎn)換;DSE=0不需轉(zhuǎn)換。 C 寄存器 寄存器C為中斷標志位寄存器。其格式如下: D7 D6 D5 D4 D3 D2 D1 D0 IRQF PF AF UF 0 0 0 0 IRQF:片內(nèi)中斷請求標志。IRQF=PFPIE+AFAIE+UFUIE。當IRQF=1時,IRQ引腳變低,芯片中斷請求有效。 PF、AF、UF:這三位分別為周期中斷、報警中斷、更新周期結(jié)束中斷各標志位。 D 寄存器 寄存器D只有一個標志位VRT(D7位),其它位均為保留位。 VRT:片內(nèi)RAM與寄存器數(shù)據(jù)有效標志位,讀寄存器D,可使VRT自動置1。之后,片內(nèi)寄
33、存器、時標寄存器和114字節(jié)RAM數(shù)據(jù)有效,才可供系統(tǒng)使用。 四、實驗步驟 1. 按流程圖編制軟件 2. 編譯檢查軟件語法錯誤,重復(fù)2 ,直到編譯通過 3. 連接好仿真器和實驗儀,進行單步調(diào)試,查找程序錯誤。 4. 修改錯誤,重新編譯調(diào)試,使程序輸出正確結(jié)果 五、實驗要求 實驗前通過預(yù)習(xí),掌握MCS-51單片機擴展外部數(shù)據(jù)存儲器的原理及方法,掌握實時時鐘芯片DS12887的工作原理及控制方法,繪制軟件工作程序流程圖。實驗中要掌握MEDWIN軟件的使用,能正確連接仿真器和GDEE-II實驗系統(tǒng),掌握軟件調(diào)試的方法和步驟。 實驗中,要求用軟件能修改當前時間,并在動態(tài)顯示LED上,按
34、時、分、秒的順序顯示當前時間。運用鍵盤輸入打鈴時間,若當前時間與打鈴時間相等時,打鈴15秒(即蜂鳴器響)。打鈴時間至少可設(shè)置10個。 六、實驗結(jié)果 軟件通過調(diào)試后能正常運行,達到實驗要求中所須的效果。 實驗十 整數(shù)電子計算器 一、 實驗?zāi)康? 1. 掌握監(jiān)控程序的設(shè)計方法 2. 掌握鍵盤,顯示的綜合運用 3. 掌握整數(shù)加、減、乘、除的計算方法 二、 實驗儀器 PC微型計算機一臺 SE-51P仿真器一臺 GDEE-II光電EDA實驗儀一臺 三、 實驗要求 運用GDEE-II中已有的鍵盤和動態(tài)顯示,設(shè)計一整數(shù)電子計算器,其中鍵盤有0~9數(shù)值鍵,加、減、乘、除、等于和
35、清零等功能鍵,設(shè)計顯示格式與普通計算器一樣。 四、 實驗步驟 1. 繪制軟件流程圖,包括各功能程序流程圖 2. 設(shè)計軟件 3. 連接仿真器,調(diào)試程序 五、 實驗結(jié)果 通過此實驗,加強學(xué)生對指令系統(tǒng)的理解和運用,掌握單片機系統(tǒng)監(jiān)控程序的設(shè)計方法和結(jié)構(gòu)形式。 附錄:實驗程序清單 1. 雙字節(jié)整數(shù)無符號數(shù)除法程序 入口地址:被除數(shù)(R2R3),除數(shù)(R4R5),部分余數(shù)(R6R7),商(R2R3) R1:循環(huán)次數(shù) 使用資源:R1,R2,R3,R4,R5,R6,R7,ACC,CY 出口地址:余數(shù)(R6R7),商(R2R3) DIV16: M
36、OV R6,#0; MOV R7,#0; MOV R1,#16; CJNE R4,#0,DIV0; CJNE R5,#0,DIV0; LJMP ERROR; DIV0: LCALL RL16; LCALL COM16; MOV A,R3; ADDC A,#0; MOV R3,A; DJNZ R1,DIV0; RET; 入口地址:R6R7R2R3, 出口地址:R6R7R2R3, 功能:把R6R7R2R3,的數(shù)左移一位。 RL16: CLR C; MOV A,R3; RLC A; MOV R3,A;
37、 MOV A,R2; RLC A; MOV R2,A; MOV A,R7; RLC A; MOV R7,A; MOV A,R6; RLC A; MOV R6,A; RET; 入口地址:R6R7,R4R5 出口地址:R6R7,CY; 功能:實現(xiàn)R6R7與R4R5的比較,當R6R7大時R6R7=R6R7-R4R5,CY=1; 當R6R7小時R6R7=R6R7,CY=0; COM16: MOV A,R6 CJNE A,R4,COM1; MOV A,R7;
38、
CJNE A,R5,COM1;
JNC COM2;
CLR C;
RET;
COM2: MOV A,R7;
CLR C;
SUBB A,R5;
MOV R7,A;
MOV A,R6;
SUBB A,R4;
MOV R6,A;
SETB C;
RET;
鍵盤掃描程序:
#include
39、] #define LED14 PBYTE[0x84] #define DADB PBYTE[0x85] #define Sec PBYTE[0x00] #define Min PBYTE[0x02] #define Hour PBYTE[0x04] #define Day PBYTE[0x07] #define Mon PBYTE[0x08] #define Year PBYTE[0x09] #define TRA PBYTE[0x0A] #define TRB PBYTE[0x0B] #define TRC PBYTE[0x0C] #define TRD PBYTE
40、[0x0D] sbit COL1 = P1^0; /* 定義P1.0口地址 */ sbit COL2 = P1^1; /* 定義P1.1口地址 */ sbit COL3 = P1^2; /* 定義P1.2口地址 */ sbit COL4 = P1^3; /* 定義P1.3口地址 */ sbit ROW1 = P1^4; /* 定義P1.4口地址 */
41、 sbit ROW2 = P1^5; /* 定義P1.5口地址 */ sbit ROW3 = P1^6; /* 定義P1.6口地址 */ sbit ROW4 = P1^7; /* 定義P1.7口地址 */ sbit OUTB = P2^7; /* 定義P2.7口地址 */ sbit DACS = P2^5; /* 定義P2.5口地址 */
42、 sbit DACK = P2^6; /* 定義P2.6口地址 */ sbit DAD0 = P3^3; /* 定義P3.3口地址 */ code unsigned char TDA[]={ 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; code unsigned char Scan[] = {0xEF, 0xDF, 0xBF, 0x7F}; code short int
43、 LeftShift[] = {0x0, 0x4, 0x8, 0xC}; idata unsigned char txdata[] = {"NJUST 0211090134 106040542 XURONG\n"}; void AD(); void DA(); void Com(); void CountAdd(); void LedDisplay(); void LedStaticDisplay(unsigned int t); void LedDynamicDisplay(unsigned long int t); void KeyBoard(); void Key
44、StateChange(short int Key, bit State); void Delay(unsigned int t); unsigned int StaticLedCount; unsigned long int DynamicLedCount; void main() { unsigned int tim; unsigned char trd; TRB = 0x06; trd = TRD; while (1) { //while ((TRA & 0x80) == 0) ; tim = Sec;
45、 tim += (Min * 100); tim += (Hour * 10000); LedDynamicDisplay(tim); } } void AD() { short int i; unsigned short Vol; unsigned short Add; while (1) { DACK = 0; DACS = 0; Vol = 0; Add = 128; for (i = 8; i > 0; i--) { DAD0 = 1; if (DAD0 == 1) {
46、 Vol += Add; } Add = Add >> 1; DACK = 1; DACK = 0; } DACS = 1; LedDynamicDisplay(Vol); } } void DA() { unsigned short int way1 = 125; unsigned short int way2 = 0; short int step1 = 1; while(1) { OUTB = 0; DADB = way1; OUTB = 1; DADB = way2;
47、 way1 += step1; if (way1 > 200) { step1 = -1; way2 = 248; } else if (way1 < 1) { step1 = 1; way2 = 10; } } } void Com() { short int i; int j; TMOD = 0x20; TL1 = 0xF3; TH1 = 0xF3; TR1 = 1; SCON = 0x50; PCON = 0x00; EA =
48、 1; ES = 0; while(1) { i = 0; while (txdata[i] != 0x00) { SBUF = txdata[i]; while (TI == 0) ; TI = 0; i++; DynamicLedCount++; LedDynamicDisplay(DynamicLedCount); } } } void timer0_ISR(void) interrupt 1 { static Times = 39; TH0 =
49、0x3C; TL0 = 0xD3; TF0 = 0; // Delay(100000); if (Times) { Times--; } else { CountAdd(); Times = 39; } } void CountAdd() { StaticLedCount++; if (StaticLedCount > 9999) { StaticLedCount = 0; } DynamicLedCount++; if (DynamicLedCount > 9999999999) {
50、 DynamicLedCount = 0; } } void KeyStateChange(short int Key, bit State) { LED14 = Key / 10 * 0x10 + Key % 10; LED13 = State; DynamicLedCount++; } unsigned int GetKeysState() { unsigned int Keys = 0; short int i; for (i = 0; i < 4; i++) { P1 = Scan[i]; Keys += ((
51、P1 & 0xF) << LeftShift[i]); } return Keys; } void KeyBoard() { static unsigned int KeysOld = 0xFFFF; unsigned int Keys; unsigned int Keys1; unsigned int GetBit; short int i; bit state; Keys = GetKeysState(); if (KeysOld != Keys) { do { Delay(1000); Key
52、s1 = Keys; Keys = GetKeysState(); }while(Keys != Keys1); KeysOld = KeysOld ^ Keys; GetBit = 0x1; for (i = 0; i < 16; i++) { if (KeysOld & 0x1) { state = (Keys & GetBit); KeyStateChange(i, state); } KeysOld = KeysOld >> 1; GetBit = GetBit << 1;
53、 } KeysOld = Keys; } } void LedStaticDisplay(unsigned int t) { short int ledt1, ledt2; static short int ledb1 = 1; static short int ledb2 = 1; long int ledt3; // Static Led ledt1 = t; ledt3 = ledt1 / 10; ledt2 = ledt1 - ledt3 * 10; ledt1 =
54、ledt3 / 10; LED13 = (ledt3 - ledt1 * 10) * 0x10 + ledt2; ledt3 = ledt1 / 10; ledt2 = ledt1 - ledt3 * 10; LED14 = ledt3 % 10 * 0x10 + ledt2; // End of SL } void LedDynamicDisplay(unsigned long int t) { short int ledt1, ledt2; static short int ledb1 = 1; static short int
55、ledb2 = 1; long int ledt3; // Dynamic Led ledt3 = 1; ledt2 = 6 - ledb1; for (ledt1 = 0; ledt1 < ledt2; ledt1++) { ledt3 *= 10; } ledt3 = t / ledt3; LED11 = 0; LED12 = ledb2; ledt2 = ledt3 % 10; LED11 = TDA[ledt2]; ledb1++; ledb2 = ledb2 << 1; if (ledb1 > 6)
56、 { ledb1 = 1; ledb2 = 1; } // End of DL } void LedDisplay() { LedStaticDisplay(StaticLedCount); LedDynamicDisplay(DynamicLedCount); } void Delay(unsigned int t) { unsigned int i; for (i = 0; i < t; i++) { ; } }As of Microsoft Internet Explorer 4.0, you can applmu
57、ltimedia-style effects to your Web pages using visual filters and transitions. You can apply visual filters and transitions to standard HTML controls, such as text containers, images, and other windowless objects. Transitions are time-varying filters that create a transition from one visual state to
58、 another. By combining filters and transitions with basic scripting, you can create visually engaging and interactive documents.Internet Explorer 5.5 and later supports a rich variety of optimized filters. Click the following button to see a demonstration of many of these filters and how to usethePr
59、ocedural surfaces are colored surfaces that display between the content of an object and the objects background. Procedural surfaces define each pixels RGB color and alpha values dynamically. Only the procedure used to compute the surface is stored in memory. The content of an object with a procedur
60、al surface applied is not affected by the procedural surface.警告:此類已序列化的對象將不再與以后的 Swing 版本兼容。當前的序列化支持適合在運行相同 Swing 版本的應(yīng)用程序之間短期存儲或 RMI。從 1.4 版開始,已在 java.beans 包中加入對所有 JavaBeansTM 的長期存儲支持。請參見 XMLEncoder。引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當引用類型和原始類型用作某個類的實例數(shù)據(jù)時
61、所指定的缺省值。對象引用實例變量的缺省值為 null,而原始類型實例變量的缺省值與它們的類型有關(guān)。當JAVA程序違反了JAVA的語義規(guī)則時,JAVA虛擬機就會將發(fā)生的錯誤表示為一個異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的語義檢查。例如數(shù)組下標越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時會引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。這里我們采用的是Java語言,Java,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺的總稱。用Java實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持
- 溫馨提示:
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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中語文作文素材:30篇文學(xué)名著開場白
- 初中語文答題技巧:現(xiàn)代文閱讀-說明文閱讀知識點總結(jié)
- 初中語文作文十大??荚掝}+素材
- 初中語文作文素材:描寫冬天的好詞、好句、好段總結(jié)
- 初中語文必考名著總結(jié)
- 初中語文作文常見主題總結(jié)
- 初中語文考試??济偨Y(jié)
- 初中語文必考50篇古詩文默寫
- 初中語文易錯易混詞總結(jié)
- 初中語文228條文學(xué)常識
- 初中語文作文素材:30組可以用古詩詞當作文標題
- 初中語文古代文化常識七大類別總結(jié)
- 初中語文作文素材:100個文藝韻味小短句
- 初中語文閱讀理解33套答題公式
- 初中語文228條文學(xué)常識總結(jié)