2011年飛思卡爾智能汽車大賽B車的電機PID算法程序
上傳時間: 2013-06-25
上傳用戶:李彥東
·詳細說明:DTMF編碼芯片HT9200的51接口程序。輸入參數R2表示發送數據個數,輸入數據與發送數據與DTMF碼的關系:00H-0 01H-1 02H-2 03H-3 04H-4 05H-5 06H-6 07H-7 08H-8 09H-9 0AH-A 0BH-B 0CH-C 0DH-D 0EH-* 0FH-#。詳細說明參考文件內.
上傳時間: 2013-06-02
上傳用戶:jujiast99
蘇泊爾C21S02-B電磁爐電路圖,紅線標注,重點模塊說明!
上傳時間: 2013-06-22
上傳用戶:huangzr5
制作基于PIC Mcu 的ADS-B接收機的全套資料,包括SCH、PCB、源碼和PC端軟件。
上傳時間: 2013-04-24
上傳用戶:cx111111
2012TI杯陜西賽題H題,2012TI杯陜西賽題B題--頻率補償電路.
上傳時間: 2013-10-07
上傳用戶:ysystc670
本書分三部分介紹在美國廣泛應用的、高功能的M68HC11系列單片機(8位機 ,Motorola公司)。內容包括M68HC11的結構與其基本原理、開發工具EVB(性能評估板)以及開發和應用技術。本書在介紹單片機硬、軟件的基礎上,進一步介紹了在美國實驗室內,如何應用PC機及EVB來進行開發工作。通過本書的介紹,讀者可了解這種單片機的原理并學會開發和應用方法。本書可作為大專院校單片機及其實驗的教材(本科、短訓班)。亦可供開發、應用單片機的各專業(計算機、機電、化工、紡織、冶金、自控、航空、航海……)有關技術人員參考。 第一部分 M68HC11 結構與原理Motorola單片機 1 Motorla單片機 1.1 概述 1.1.1 Motorola 單片機發展概況(3) 1.1.2 Motorola 單片機結構特點(4) 1.2 M68HC11系列單片機(5) 1.2.1 M68HC11產品系列(5) 1.2.2 MC68HC11E9特性(6) 1.2.3 MC68HC11E9單片機引腳說明(8) 1.3 Motorola 32位單片機(14) 1.3.1中央處理器(CPU32)(15) 1.3.2 定時處理器(TPU)(16) 1.3.3 串行隊列模塊(QSM)(16) 1.3.4 系統集成模塊 (SIM)(16) 1.3.5 RAM(17) 2 系統配置與工作方式 2.1 系統配置(19) 2.1.1 配置寄存器CONFIG(19) 2.1.2 CONFIG寄存器的編程與擦除(20) 2?2 工作方式選擇(21) 2.3 M68HC11的工作方式(23) 2.3.1 普通單片工作方式(23) 2.3.2 普通擴展工作方式(23) 2.3.3 特殊自舉方式(27) 2.3.4 特殊測試方式(28) 3 中央處理器(CPU)與片上存儲器 3.1 CPU寄存器(31) 3?1?1 累加器A、B和雙累加器D(32) 3.1.2 變址寄存器X、Y(32) 3.1.3 棧指針SP(32) 3.1.4 程序計數器PC(33) 3.1.5 條件碼寄存器CCR(33) 3.2 片上存儲器(34) 3.2.1 存儲器分布(34) 3.2.2 RAM和INIT寄存器(35) 3.2.3 ROM(37) 3.2.4 EEPROM(37) 3.3 M68HC11 CPU的低功耗方式(39) 3.3.1 WAIT方式(39) 3.3.2 STOP方式(40) 4 復位和中斷 4.1 復位(41) 4.1.1 M68HC11的系統初始化條件(41) 4.1.2 復位形式(43) 4.2 中斷(48) 4.2.1 條件碼寄存器CCR中的中斷屏蔽位(48) 4.2.2 中斷優先級與中斷矢量(49) 4.2.3 非屏蔽中斷(52) 4.2.4 實時中斷(53) 4.2.5 中斷處理過程(56) 5 M68HC11指令系統 5.1 M68HC11尋址方式(59) 5.1.1 立即尋址(IMM)(59) 5.1.2 擴展尋址(EXT)(60) 5.1.3 直接尋址(DIR)(60) 5.1.4 變址尋址(INDX、INDY)(61) 5.1.5 固有尋址(INH)(62) 5.1.6 相對尋址(REL)(62) 5.1.7 前置字節(63) 5.2 M68HC11指令系統(63) 5.2.1 累加器和存儲器指令(63) 5.2.2 棧和變址寄存器指令(68) 5.2.3 條件碼寄存器指令(69) 5.2.4 程序控制指令(70) 6 輸入與輸出 6.1 概述(73) 6.2 并行I/O口(74) 6.2.1 并行I/O寄存器(74) 6.2.2 應答I/O子系統(76) 6?3 串行通信接口SCI(82) 6.3.1 基本特性(83) 6.3.2 數據格式(83) 6.3.3 SCI硬件結構(84) 6.3.4 SCI寄存器(86) 6.4 串行外圍接口SPI(92) 6.4.1 SPI特性(92) 6.4.2 SPI引腳信號(92) 6.4.3 SPI結構(93) 6.4.4 SPI寄存器(95) 6.4.5 SPI系統與外部設備進行串行數據傳輸(99) 7 定時器系統與脈沖累加器 7.1 概述(105) 7.2 循環計數器(107) 7.2.1 時鐘分頻器(107) 7.2.2 計算機正常工作監視功能(110) 7.2.3 定時器標志的清除(110) 7.3 輸入捕捉功能(111) 7.3.1 概述(111) 7.3.2 定時器輸入捕捉鎖存器(TIC1、TIC2、TIC3) 7.3.3 輸入信號沿檢測邏輯(113) 7.3.4 輸入捕捉中斷(113) 7.4 輸出比較功能(114) 7.4.1 概述(114) 7.4.2 輸出比較功能使用的寄存器(116) 7.4.3 輸出比較示例(118) 7.5 脈沖累加器(119) 7.5.1 概述(119) 7.5.2 脈沖累加器控制和狀態寄存器(121) 8 A/D轉換系統 8.1 電荷重新分布技術與逐次逼近算法(125) 8.1.1 基本電路(125) 8.1.2 A/D轉換逐次逼近算法原理(130) 8.2 M68HC11中A/D轉換的實現方法(131) 8.2.1 逐次逼近A/D轉換器(131) 8.2.2 控制寄存器(132) 8.2.3 系統控制邏輯(135)? 9 單片機的內部操作 9.1 用立即> 圖書前言 美國Motorola公司從80年代中期開始推出的M68HC11系列單片機是當今功能最強、性能/價格比最好的八位單片微計算機之一。在美國,它已被廣泛地應用于教學和各種工業控制系統中。? 該單片機有豐富的I/O功能,完善的系統保護功能和軟件控制的節電工作方式 。它的指令系統與早期Motorola單片機MC6801等兼容,同時增加了91條新指令。其中包含16位乘法、除法運算指令等。 為便于用戶開發和應用M68HC11單片機,Motorola公司提供了多種開發工具。M68HC11 EVB (Evaluation Board)性能評估板就是一種M68HC11系列單片機的廉價開發工具。它既可用來 調試用戶程序,又可在仿真方式下運行。為方便用戶,M68HC11 EVB可與IBM?PC連接 ,借助于交叉匯編、通信程序等軟件,在IBM?PC上調試程序。? 本書分三部分(共15章)介紹了M68HC11的結構和基本原理、開發工具-EVB及開發應用實例等。第一部分(1~9章),介紹M68HC11的結構和基本原理。包括概述,系統配置與工作方式、CPU和存儲器、復位和中斷、指令系統、I/O、定時器系統和脈沖累加器、A/D轉換系統、單片機的內部操作等。第二部分(10~11章),介紹M68HC11 EVB的原理和技術特性以及EVB的應用。第三部分(12~15章),介紹M68HC11的開發與應用技術。包括基本的編程練習、應用程序設計、接口實驗、接口設計及應用等。 讀者通過學習本書,不僅可了解M68HC11的硬件、軟件,而且可了解使用EVB開發和應用M68HC11單片機的方法。在本書的第三部分專門提供了一部分實驗和應用程序。? 本書系作者張寧作為高級訪問學者,應邀在美國馬薩諸塞州洛厄爾大學(University of Massachusetts Lowell)工作期間完成的。全書由張寧執筆。在編著過程中,美國洛厄爾大學的R·代克曼教授?(Professor Robert J. Dirkman)多次與張寧一起討論、研究,并提供部分資料及實驗數據。參加編寫和審校等工作的還有王云霞、孫曉芳、劉安魯、張籍、來安德、張楊等同志。? 為將M68HC11系列單片機盡快介紹給我國,美國Motorola公司的Terrence M.S.Heng先生曾大力支持本書的編著和出版。在此表示衷心感謝。
上傳時間: 2013-10-27
上傳用戶:rlgl123
PSHLY-B回路電阻測試儀介紹
上傳時間: 2013-11-05
上傳用戶:木子葉1
假定從8位AD中讀取數據(如果是更高位的AD可定義數據類型為int),子程序為get_ad(); 1、限幅濾波法(又稱程序判斷濾波法) A、方法: 根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A) 每次檢測到新值時判斷: 如果本次值與上次值之差<=A,則本次值有效 如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值 B、優點: 能有效克服因偶然因素引起的脈沖干擾 C、缺點 無法抑制那種周期性的干擾 平滑度差 /* A值可根據實際情況調整 value為有效值,new_value為當前采樣值 濾波程序返回有效的實際值 */ #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A ) return value; return new_value; } 2、中位值濾波法 A、方法: 連續采樣N次(N取奇數) 把N次采樣值按大小排列 取中間值為本次有效值 B、優點: 能有效克服因偶然因素引起的波動干擾 對溫度、液位的變化緩慢的被測參數有良好的濾波效果 C、缺點: 對流量、速度等快速變化的參數不宜 /* N值可根據實際情況調整 排序采用冒泡法*/
上傳時間: 2014-12-26
上傳用戶:nanshan
單片機C語言應用程序設計針對目前最通用的單片機8051和最流行的程序設計語言——C語言,以KEII。公司8051單片機開發套件講解單片機的C語言應用程序設計。該套件的編譯器有支持經典8051及8051派生產品的版本,統稱為Cx51。Windows集成開發環境μVision2把μVisionl用的模擬調試器dScope與集成環境無縫結合起來,使用更方便,支持的單片機品種更多。 本書的特點是取材于原文資料,總結實際教學和應用經驗,實例較多,實用性強。本書中C語言是針對8051特有結構描述的,這樣,即使無編程基礎的人,也可通過本書學習單片機的c編程。單片機C語言應用程序設計目錄第1章 單片機基礎知識 1.1 8051單片機的特點 1.2 8051的內部知識 1.3 8051的系統擴展 習題一第2章 C與8051 2.1 8051的編程語言 2.2 Cx51編譯器 2.3 KEIL 8051開發工具 2.4 KEIL Cx51編程實例 2.5 Cx51程序結構 習題二第3章 Cx51 數據與運算 3.1 數據與數據類型 3.2 常量與變量 3.3 Cx51數據存儲類型與8051存儲器結構 3.4 8051特殊功能寄存器(SFR)及其Cx51定義 3.5 8051并行接口及其Cx51定義 3.6 位變量(BIT)及其Cx51定義 3.7 Cx51運算符、表達式及其規則 習題三第4章 Cx51 流程控制語句 4.1 C語言程序的基本結構及其流程圖 4.2 選擇語句 4.3 循環語句 習題四第5章 Cx51 構造數據類型 5.1 數組 5.2 指針 5.3 結構 5.4 共用體 5.5 枚舉 習題五第6章 Cx51 函數第7章 模塊化程序設計第8章 8051內部資源的C編輯第9章 8051擴展資源的C編輯第10章 8051輸出控制的C編程第11章 8051數據采集的C編程第12章 8051機間通信的C編程第13章 8051人機交互的C編程附錄A μVision2集成開發環境使用附錄B KEIL Cx51 上機制南
上傳時間: 2013-10-21
上傳用戶:行者Xin
有兩種方式可以讓設備和應用程序之間聯系: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