有兩種方式可以讓設備和應用程序之間聯系:1. 通過為設備創建的一個符號鏈;2. 通過輸出到一個接口WDM驅動程序建議使用輸出到一個接口而不推薦使用創建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創建一個惟一的、獨立于語言的訪問設備的方法。一個應用程序使用Win32APIs來調用設備。在某個Win32 APIs和設備對象的分發函數之間存在一個映射關系。獲得對設備對象訪問的第一步就是打開一個設備對象的句柄。 用符號鏈打開一個設備的句柄為了打開一個設備,應用程序需要使用CreateFile。如果該設備有一個符號鏈出口,應用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統本調用希望打開一個設備。這個設備必須有一個符號鏈,以便應用程序能夠打開它。有關細節查看有關Kdevice和CreateLink的內容。在上述調用中第一個參數中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數不是Windows 98/2000中驅動程序(.sys文件)的路徑。是到設備對象的符號鏈。如果使用DriverWizard產生驅動程序,它通常使用類KunitizedName來構成設備的符號鏈。這意味著符號鏈名有一個附加的數字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應用程序需要被覆蓋的I/O,第六個參數(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設備信息集,該信息集包含了特殊類中的所有設備接口信息。應用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設備接口的抽象。它的成員函數DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設備中執行I/O操作一旦應用程序獲得一個有效的設備句柄,它就能使用Win32 APIs來產生到設備對象的IRPs。下面的表顯示了這種對應關系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設備類成員的Close和CleanUp:CreateFile使內核為設備創建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調用CleanUp。當沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調用Close。如果被打開的設備不支持指定的功能,則調用相應的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應用程序代碼中可能會在打開設備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導致沒有特權的用戶企圖打開這個設備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數轉換成IRP域的方法依賴于設備對象的屬性。當設備設置DO_DIRECT_IO標志,I/O管理器將buff鎖住在存儲器中,并且創建了一個存儲在IRP中的MDL域。一個設備可以通過調用Kirp::Mdl來存取MDL。當設備設置DO_BUFFERED_IO標志,設備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或寫操作獲得buff地址。當設備不設置DO_BUFFERED_IO標志也不設置DO_DIRECT_IO,內核設置IRP 的UserBuffer域來對應ReadFile或WriteFile中的buff參數。然而,存儲區并沒有被鎖住而且地址只對調用進程有效。驅動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調用,buffer參數的轉換依賴于特殊的I/O控制代碼,它不在設備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構造控制代碼。這個宏的其中一個參數指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統分配一個單一的緩沖來作為輸入與輸出。驅動程序必須在向輸出緩沖放數據之前拷貝輸入數據。驅動程序通過調用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統緩沖拷貝數據到提供給Ring 3級調用者使用的緩沖中。驅動程序必須在結束前存儲拷貝到IRP的Information成員中的數據個數。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數呈現不同的含義。參數InputBuffer被拷貝到一個系統緩沖,這個緩沖驅動程序可以通過調用KIrp::IoctlBuffer。參數OutputBuffer被映射到KMemory對象,驅動程序對這個對象的訪問通過調用KIrp::Mdl來實現。對于METHOD_OUT_DIRECT,調用者必須有對緩沖的寫訪問權限。注意,對METHOD_NEITHER,內核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調用進程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現在使用一個DeviceIoControl調用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設備拷貝串到里面并將拷貝的資結束設置到FirmwareRevSize中。在驅動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上傳時間: 2013-10-17
上傳用戶:gai928943
第一部分:硬件結構和安裝方法 將組裝好的編程器主板用串口電纜連接到計算機COM1口上,連接好電源線,電源使用的是15V交流電或12V直流電。具體連接方法可以參考裝配說明書。加電后指示燈閃爍,表明電路工作正常。如果能聯機成功,表明編程器已通過了自檢,可以開始編程操作了。注意:指示燈持續亮的時候,表明正在讀寫,這時不能插拔芯片。編程器使用中途不能斷電,如斷電再次加電時,不能聯機。需要重啟動計算機。再次啟動編程器軟件。第二部分:軟件的安裝設置將光盤上51PROG子目錄拷貝到計算機硬盤上,為使用方便,可以將PROFLASH.BAT命令建一個快捷方式在桌面上。然后需要設置計算機串口COM1通訊波特率,步驟如下:單擊鼠標左鍵,選擇“開始”---〉單擊“設置”---〉單擊“控制面板”---〉雙擊“系統”---〉單擊“設備管理器”---〉雙擊“端口(COM&LPT)--->選擇“通訊端口COM1”如下圖一所示
標簽: 51編程器
上傳時間: 2013-11-12
上傳用戶:zzbbqq99n
一個完整的微機系統是由硬件和軟件共同構成的。微機系統的硬件有CPU、存儲器和I/O口,外設組成。CPU與存儲器之間的信息交換比較簡單,而CPU與外設之間進行信息交換之前必須確定外設是否準備好,即選擇I/O傳送方式。I/O傳送方式有4種:無條件、查詢、中斷和DMA。本章學習中斷傳送方式的有關內容。 4.1 中斷概述 4.2 MCS-51中斷系統 1、中斷的定義: 中斷是指如下過程:CPU與外設同時工作,CPU執行主程序,外設做準備工作,當外設準備好時向CPU發中斷請求信號,若條件滿足,則CPU終止主程序的執行,轉去執行中斷服務程序,在中斷服務程序中CPU與外設交換信息,待中斷服務程序執行完后,CPU再返回剛才終止的主程序繼續執行。 2、中斷系統的定義:中斷系統是指為了實現中斷傳送過程在CPU內外設置的硬件和有關中斷的指令。3、中斷源:⑴中斷源的定義:中斷源是指引起中斷請求的來源。⑵中斷源的分類: ①軟中斷和 ②硬中斷4、中斷處理的全過程 中斷處理的全過程分成3個階段:中斷請求、中斷響應和中斷服務。5、多重中斷與中斷優先級 ⑴ 當系統中有多個設備提出中斷請求時,多個外設的中請信號要通過門電路送到CPU的中請輸入端,使CPU能收到多個外設提出的中請。 ⑵ CPU在收到多個外設的請求后,按中斷處理原則處理中斷。 ⑶ 確定優先級的方法解決優先級的問題一般可有三種方法:軟件查詢法、簡單硬件方法及專用硬件方法(采用可編程的中斷控制器芯片,如Intel8259A)。
標簽: 中斷技術
上傳時間: 2013-10-12
上傳用戶:ysjing
技術說明:線圈總長度應在20 ~ 30米左右,地感線應用橫截面大于等于0.5 平方毫米的耐高溫絕緣線;用切地機在堅硬水泥地面切槽,深度為 5~10 cm 左右,寬以切刻片厚度為準一般為5mm;然后將線一圈一圈放入槽中,再用水泥將槽封固,注意線不可浮出地面,在放入線圈時注意不要把線的絕緣層破壞,以免造成漏電或短路.引出線要雙絞在一起并行接入地感兩個LOOP 端,長度不能超過4米,每米中雙絞數不能少于30個.
上傳時間: 2013-11-04
上傳用戶:zhaoq123
AVR Studio 幫助文件中文翻譯,網友翻譯的AVR Studio軟件里面的幫助文件。轉自“我們的AVR”網站,在此表示感謝。 圖元文件(metafile) 以.emf為擴展名的文件。是下面各種結構的基本組成部分,可以用來讓AVR LCD編輯器設計軟件模擬顯示器。它可以是一個段或者一個圖像。您不能直接用AVR LCD編輯器生成一個這樣的圖元文件。但是可以使用第三方軟件。Companion Software的Metafile Companion和Microsoft Visio 就是兩個讓用戶自己定義圖元文件的軟件。在市場上有好多更簡單,更便宜的轉換軟件支持gif,jpeg,bmp等的文件轉換成.emf文件。 (例如:www.harmware.com 網站上的Batch Thumb 、和www.irfanview.com網站上的IrfanView). 段(segment)這是軟件模擬顯示器的一部分。用LCD編輯器您可以分配所有的段對應到實際的LCD寄存器的位上。段被存成.emf文件。圖像(image)被用作背景圖像和外圍圖像的圖元文件。充當所有段的布景。這些對象是“靜態”的,不對任何LCD寄存器值有反映。圖像也被存成.emf文件。 模擬顯示器(display)多層的元文件和圖像的組合。它包含LCD 寄存器的分配信息。用XML格式保存成.dis文件。組(group)為了簡化設計,需要頻繁的保存使用段。組就是同一層中一些段(圖元文件)的集合。它的設計沒有實際的限制,但是不能包括靜態圖像(背景/前景)。最典型的組就是7段碼數字字型。組只是理論的設計工具,在最終的模擬顯示器文件中是沒有組存在的。組用擴展名為.pri 的文件保存。 對象(object)對包括以上各個元件的各種事物的稱謂的術語。模擬顯示器文件(display file)以.dis為擴展名的XML類型的文件。包含了所有的關于顯示器的信息。
上傳時間: 2013-10-31
上傳用戶:paladin
AVR系統單片機C語言編程與應用實例針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有13章,其內容既涉及到了單片機的結構原理、指令系統、內容資源和外部功能擴展,又包含了單片機的編程工具——ICC AVR C編程器的數據類型、控制流、函數和指針等。本書的特點是:深入淺出,從最基本的概念開始,循序漸進地講解單片機的應用開發;列舉了大量實例,使讀者能從實際應用中掌握單片機的開發與應用技術。本書適合作為從事單片機開發人員的參考用書。
上傳時間: 2013-10-19
上傳用戶:xz85592677
九.輸入/輸出保護為了支持多任務,80386不僅要有效地實現任務隔離,而且還要有效地控制各任務的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護。 這里下載本文源代碼。 <一>輸入/輸出保護80386采用I/O特權級IPOL和I/O許可位圖的方法來控制輸入/輸出,實現輸入/輸出保護。 1.I/O敏感指令輸入輸出特權級(I/O Privilege Level)規定了可以執行所有與I/O相關的指令和訪問I/O空間中所有地址的最外層特權級。IOPL的值在如下圖所示的標志寄存器中。 標 志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規定了I/O空間中的哪些地址可以由在任何特權級執行的程序所訪問。I/O許可位圖在任務狀態段TSS中。 I/O敏感指令 指令 功能 保護方式下的執行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數據 CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫數據 CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關,并且只有在滿足所列條件時才可以執行,所以把它們稱為I/O敏感指令。從表中可見,當前特權級不在I/O特權級外層時,可以正常執行所列的全部I/O敏感指令;當特權級在I/O特權級外層時,執行CLI和STI指令將引起通用保護異常,而其它四條指令是否能夠被執行要根據訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執行,那么將引起出錯碼為0的通用保護異常。 由于每個任務使用各自的EFLAGS值和擁有自己的TSS,所以每個任務可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實模式下總是可執行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執行是很不方便的,不能滿足實際要求需要。因為這樣做會使得在特權級3執行的應用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實際需要與此剛好相反,只允許任務甲的應用程序訪問部分I/O地址,只允許任務乙的應用程序訪問另一部分I/O地址,以避免任務甲和任務乙在訪問I/O地址時發生沖突,從而避免任務甲和任務乙使用使用獨享設備時發生沖突。 因此,在IOPL的基礎上又采用了I/O許可位圖。I/O許可位圖由二進制位串組成。位串中的每一位依次對應一個I/O地址,位串的第0位對應I/O地址0,位串的第n位對應I/O地址n。如果位串中的第位為0,那么對應的I/O地址m可以由在任何特權級執行的程序訪問;否則對應的I/O地址m只能由在IOPL特權級或更內層特權級執行的程序訪問。如果在I/O外層特權級執行的程序訪問位串中位值為1的位所對應的I/O地址,那么將引起通用保護異常。 I/O地址空間按字節進行編址。一條I/O指令最多可涉及四個I/O地址。在需要根據I/O位圖決定是否可訪問I/O地址的情況下,當一條I/O指令涉及多個I/O地址時,只有這多個I/O地址所對應的I/O許可位圖中的位都為0時,該I/O指令才能被正常執行,如果對應位中任一位為1,就會引起通用保護異常。 80386支持的I/O地址空間大小是64K,所以構成I/O許可位圖的二進制位串最大長度是64K個位,即位圖的有效部分最大為8K字節。一個任務實際需要使用的I/O許可位圖大小通常要遠小于這個數目。 當前任務使用的I/O許可位圖存儲在當前任務TSS中低端的64K字節內。I/O許可位圖總以字節為單位存儲,所以位串所含的位數總被認為是8的倍數。從前文中所述的TSS格式可見,TSS內偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長可達8K字節,所以開始偏移應小于56K,但必須大于等于104,因為TSS中前104字節為TSS的固定格式,用于保存任務的狀態。 1.I/O訪問許可檢查細節保護模式下處理器在執行I/O指令時進行許可檢查的細節如下所示。 (1)若CPL<=IOPL,則直接轉步驟(8);(2)取得I/O位圖開始偏移;(3)計算I/O地址對應位所在字節在I/O許可位圖內的偏移;(4)計算位偏移以形成屏蔽碼值,即計算I/O地址對應位在字節中的第幾位;(5)把字節偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產生出錯碼為0的通用保護故障;(6)若不越界,則從位圖中讀對應字節及下一個字節;(7)把讀出的兩個字節與屏蔽碼進行與運算,若結果不為0表示檢查未通過,則產生出錯碼為0的通用保護故障;(8)進行I/O訪問。設某一任務的TSS段如下: TSSSEG SEGMENT PARA USE16 TSS <> ;TSS低端固定格式部分 DB 8 DUP(0) ;對應I/O端口00H—3FH DB 10000000B ;對應I/O端口40H—47H DB 01100000B ;對用I/O端口48H—4FH DB 8182 DUP(0ffH) ;對應I/O端口50H—0FFFFH DB 0FFH ;位圖結束字節TSSLen = $TSSSEG ENDS 再假設IOPL=1,CPL=3。那么如下I/O指令有些能正常執行,有些會引起通用保護異常: in al,21h ;(1)正常執行 in al,47h ;(2)引起異常 out 20h,al ;(3)正常實行 out 4eh,al ;(4)引起異常 in al,20h ;(5)正常執行 out 20h,eax ;(6)正常執行 out 4ch,ax ;(7)引起異常 in ax,46h ;(8)引起異常 in eax,42h ;(9)正常執行 由上述I/O許可檢查的細節可見,不論是否必要,當進行許可位檢查時,80386總是從I/O許可位圖中讀取兩個字節。目的是為了盡快地執行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個字節。例如,上面的第(8)條指令要對I/O位圖中的兩個位進行檢查,其低位是某個字節的最高位,高位是下一個字節的最低位。可見即使只要檢查兩個位,也可能需要讀取兩個字節。另一方面,最多檢查四個連續的位,即最多也只需讀取兩個字節。所以每次要讀取兩個字節。這也是在判別是否越界時再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節時產生越界,必須在I/O許可位圖的最后填加一個全1的字節,即0FFH。此全1的字節應填加在最后一個位圖字節之后,TSS界限范圍之前,即讓填加的全1字節在TSS界限之內。 I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當TSS的界限大于I/O許可位圖開始偏移加8K時,I/O許可位圖的有效部分就有8K字節,I/O許可檢查全部根據全部根據該位圖進行。當TSS的界限不大于I/O許可位圖開始偏移加8K時,I/O許可位圖有效部分就不到8K字節,于是對較小I/O地址訪問的許可檢查根據位圖進行,而對較大I/O地址訪問的許可檢查總被認為不可訪問而引起通用保護故障。因為這時會發生字節越界而引起通用保護異常,所以在這種情況下,可認為不足的I/O許可位圖的高端部分全為1。利用這個特點,可大大節約TSS中I/O許可位圖占用的存儲單元,也就大大減小了TSS段的長度。 <二>重要標志保護輸入輸出的保護與存儲在標志寄存器EFLAGS中的IOPL密切相關,顯然不能允許隨便地改變IOPL,否則就不能有效地實現輸入輸出保護。類似地,對EFLAGS中的IF位也必須加以保護,否則CLI和STI作為敏感指令對待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對EFLAGS中的這三個字段的處理比較特殊,只有在較高特權級執行的程序才能執行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權級下對這三個字段的處理情況。 不同特權級對標志寄存器特殊字段的處理 特權級 VM標志字段 IOPL標志字段 IF標志字段 CPL=0 可變(初POPF指令外) 可變 可變 0 不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見,只有在特權級0執行的程序才可以修改IOPL位及VM位;只能由相對于IOPL同級或更內層特權級執行的程序才可以修改IF位。與CLI和STI指令不同,在特權級不滿足上述條件的情況下,當執行POPF指令和IRET指令時,如果試圖修改這些字段中的任何一個字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標志中的VM位總為0。 <三>演示輸入輸出保護的實例(實例九)下面給出一個用于演示輸入輸出保護的實例。演示內容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權指令引起的異常;使用段間調用指令CALL通過任務門調用任務,實現任務嵌套。 1.演示步驟實例演示的內容比較豐富,具體演示步驟如下:(1)在實模式下做必要準備后,切換到保護模式;(2)進入保護模式的臨時代碼段后,把演示任務的TSS段描述符裝入TR,并設置演示任務的堆棧;(3)進入演示代碼段,演示代碼段的特權級是0;(4)通過任務門調用測試任務1。測試任務1能夠順利進行;(5)通過任務門調用測試任務2。測試任務2演示由于違反I/O許可位圖規定而導致通用保護異常;(6)通過任務門調用測試任務3。測試任務3演示I/O敏感指令如何引起通用保護異常;(7)通過任務門調用測試任務4。測試任務4演示特權指令如何引起通用保護異常;(8)從演示代碼轉臨時代碼,準備返回實模式;(9)返回實模式,并作結束處理。
上傳時間: 2013-12-11
上傳用戶:nunnzhy
如同今天的許多通用單片機(MCU)已經把USB、CAN和以太網作為標準外設集成在芯片內部一樣,越來越多的無線網絡芯片和無線網絡解決方案也在向集成SoC 方向發展,比如第一代產品,Nordic公司nRF905,Chipcon公司cc1010 他們集成了8051兼容的單片機.這些無線單片機適合一般的點對點和點對多點的私有網絡應用,如單一產品的遙控器和抄表裝置等。無線通訊技術給智能裝置的互連互通提供了便捷的途徑,工業無線網絡作為面向工業和家庭自動化的網絡技術也正在向著智能,標準和節能方向發展。 目前在工業控制和消費電子領域使用的無線網絡技術有ZigBee、無線局域網(Wi-Fi)、藍牙(Blutooth)、GPRS通用分組無線業務、 ISM、IrDA等, 未來還能有3G、超寬頻(UWB)、無線USB、Wimax等。 當然還有大量的私有和專用無線網絡在工業控制和消費電子裝置中使用,其中ZigBee、GPRS是在目前在國內工業控制中討論和使用比較多的兩種,藍牙和無線局域網是在消費電子產品如手機、耳機、打印機、照相機和家庭中小企業網絡中廣泛使用的無線協議(個別工業產品也有應用,如無線視頻監控和汽車音響系統),當然私有無線網絡技術和產品在工業也有很多的應用。 ZigBee是一個低功耗、短距離和低速的無線網絡技術,工作在2.4GHz國際免執照的頻率,在IEEE標準上它和無線局域網、藍牙同屬802家族中的無線個人區域網絡, ZigBee是有兩部分組成,物理和鏈路層符合IEEE802.15.4, 網絡和應用層符合ZigBee聯盟的規范。ZigBee聯盟是在2002年成立的非盈利組織,有包括TI、霍尼威爾、華為在內兩百多家成員, ZigBee聯盟致力推廣兼容802.15.4和ZigBee協議的平臺, 制定網絡層和應用架構的公共規范,希望在樓宇自動化、居家控制、家用電器、工業自動控制和電腦外設等多方面普及ZigBee標準。 GPRS是在現有的GSM 網絡發展出來的分組數據承載業務,它工作在標準的GSM頻率,由于是一個分組交換系統,它適合工業上的突發,少量的數據傳輸,還因為GSM網絡覆蓋廣泛,永遠在線的特點,GPRS特點適合工業控制中的遠程監控和測量系統。在工業控制應用中GPRS 芯片一般是以無線數傳模塊形式出現的,它通過RS232全雙工接口和單片機連接,軟件上這些模塊都內置了GPRS,PPP和TCP/IP協議,單片機側通過AT指令集向模塊發出測試,連接和數據收發指令,GPRS模塊通過中國移動cmnet進入互聯網和其他終端或者服務器通訊。目前市場常見的模塊有西門子G24TC45、TC35i,飛思卡爾G24,索愛GR47/48, 還有Wavecom 的集成了ARM9核的GPRS SoC模塊WMP50/100。GPRS模塊有區分自帶TCP/IP協議和不帶協議兩種,一般來講,如果是單片機側有嵌入式操作系統和TCP/IP協議支持的話或者應用的要求只是收發短信和語音功能的話,可以選擇不帶協議的模塊。 先進的SoC技術正在無線應用領域發揮重要的作用。德州儀器收購了Chipcon公司以后發布的CC2430 是市場上首款SoC的ZigBee單片機, 見圖1,它把協議棧z-stack集成在芯片內部的閃存里面, 具有穩定可靠的CC2420收發器,增強性的8051內核,8KRAM,外設有I/O 口,ADC,SPI,UART 和AES128 安全協處理器,三個版本分別是32/64/128K的閃存,以128K為例,扣除基本z-stack協議還有3/4的空間留給應用代碼,即使完整的ZigBee協議,還有近1/2的空間留給應用代碼,這樣的無線單片機除了處理通訊協議外,還可以完成一些監控和顯示任務。這樣無線單片機都支持通過SPI或者UART與通用單片機或者嵌入式CPU結合。 2008年4月發表CC2480新一代單片ZibBee認證處理器就展示出和TI MSP430 通用的低功耗單片機結合的例子。圖1 CC2430應用電路 工業控制領域的另一個芯片巨頭——飛思卡爾的單片ZigBee處理器MC1321X的方案也非常類似,集成了HC08單片機核心, 16/32/64K 閃存,外設有GPIO, I2C和ADC, 軟件是Beestack 協議,只是最多4K RAM 對于更多的任務顯得小了些。但是憑借32位單片機Coldfire和系統軟件方面經驗和優勢, 飛思卡爾在滿足用戶應用的彈性需求方面作的更有特色,它率先能夠提供從低-中-高各個層面的解決方案,見圖2。
上傳時間: 2013-11-02
上傳用戶:momofiona
近年來隨著科技的飛速發展,單片機的應用正在不斷深入,同時帶動傳統控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據具體硬件結構軟硬件結合,加以完善。 十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現這井然秩序呢?靠的就是交通信號燈的自動指揮系統。交通信號燈控制方式很多。本系統采用MSC-51系列單片機ATSC51和可編程并行I/O接口芯片8255A為中心器件來設計交通燈控制器,實現了能根據實際車流量通過8051芯片的P1口設置紅、綠燈燃亮時間的功能;紅綠燈循環點亮,倒計時剩5秒時黃燈閃爍警示(交通燈信號通過PA口輸出,顯示時間直接通過8255的PC口輸出至雙位數碼管);車輛闖紅燈報警;綠燈時間可檢測車流量并可通過雙位數碼管顯示。本系統實用性強、操作簡單、擴展功能強。 程序源代碼 ORG 0000H ;主程序的入口地址 LJMP MAIN ;跳轉到主程序的開始處 ORG 0003H ;外部中斷0的中斷程序入口地址 ORG 000BH ;定時器0的中斷程序入口地址
上傳時間: 2013-12-21
上傳用戶:1234321@q
想要學習單片機,建立一個單片機學習環境至關重要。為此既可以用傳統的方式,也可以借助于網絡,網絡上有很多有用的資源,利用這些資源,愛好者可以廉價和快速地建立自己的軟、硬件學習環境。網上學單片機的入門篇將帶領大家走遍“五湖四海”,搜尋有用的資源。 對于51單片機而言,不論是學習還是開發,編程器是必不可少的。編程器是網絡上最熱門的話題之一,有很多網站提供比較廉價的編程器,也有一些網站提供了自制編程器的各種資料。不過對初學者而言,自制編程器并非易事,雖然很多編程器的線路很簡單,但仍難以用手工焊接的方法完成電路板的制作,需要去印刷線路板廠制板,綜合考慮,幾乎不能省錢,況且這樣的制作對學單片機幫助不大,為此,這里不介紹關于自制編程器的詳細內容,而是介紹若干有特色的編程器成品。 如果讀者確實對自制編程器有興趣,可根據下面的提示去查找有關資料。
標簽: 單片機
上傳時間: 2013-11-08
上傳用戶:hhkpj