針對(duì)目前使用的RS232接口數(shù)字化B超鍵盤存在PC主機(jī)啟動(dòng)時(shí)不能設(shè)置BIOS,提出一種PS2鍵盤的設(shè)計(jì)方法。基于W78E052D單片機(jī),采用8通道串行A/D轉(zhuǎn)換器設(shè)計(jì)了8個(gè)TGC電位器信息采集電路,電位器位置信息以鍵盤掃描碼序列形式發(fā)送,正交編碼器信號(hào)通過(guò)XC9536XL轉(zhuǎn)換為單片機(jī)可接收的中斷信號(hào),軟件接收到中斷信息后等效處理成按鍵。結(jié)果表明,在滿足開機(jī)可設(shè)置BIOS同時(shí),又可實(shí)現(xiàn)超聲特有功能,不需要專門設(shè)計(jì)驅(qū)動(dòng)程序,接口簡(jiǎn)單,成本低。 Abstract: Aiming at the problem of the digital ultrasonic diagnostic imaging system keyboard with RS232 interface currently used couldn?蒺t set the BIOS when the PC boot, this paper proposed a design method of PS2 keyboards. Based on W78E052D microcontroller,designed eight TGC potentiometers information acquisition circuit with 8-channel serial A/D converter, potentiometer position information sent out with keyboard scan code sequentially.The control circuit based on XC9536 CPLD is used for converting the mechanical actions of the encoders into the signals that can be identified by the MCU, software received interrupt information and equivalently treatmented as key. The results show that the BIOS can be set to meet the boot, ultrasound specific functionality can be achieved at the same time, it does not require specially designed driver,the interface is simple and low cost.
標(biāo)簽: 單片機(jī) B超 數(shù)字化 鍵盤設(shè)計(jì)
上傳時(shí)間: 2013-10-10
上傳用戶:asdfasdfd
摘要:設(shè)計(jì)以ATmega16單片機(jī)為核心的自動(dòng)對(duì)靶控制系統(tǒng)。該系統(tǒng)利用PC機(jī)作為上位機(jī),控制攝像頭定時(shí)攝取圖像,利用2g-r-b顏色特征分割該彩色圖像,當(dāng)綠色顏色分量大于預(yù)設(shè)閥值時(shí),便判定攝像頭下有靶標(biāo),用PC機(jī)的串口通信系統(tǒng)發(fā)送指令到單片機(jī),延遲預(yù)設(shè)的時(shí)間后,控制執(zhí)行機(jī)構(gòu)進(jìn)行噴霧,實(shí)現(xiàn)自動(dòng)對(duì)靶噴霧,并且可以設(shè)定延遲時(shí)間,從而實(shí)現(xiàn)在不同行走速度下的自動(dòng)對(duì)靶噴霧。關(guān)鍵詞:自動(dòng)對(duì)靶;AVR;串口通信;顏色分割
標(biāo)簽: AVR 單片機(jī) 自動(dòng) 控制系統(tǒng)設(shè)計(jì)
上傳時(shí)間: 2014-12-27
上傳用戶:redmoons
MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用TI公司的MSP430系列微控制器是一個(gè)近期推出的單片機(jī)品種。它在超低功耗和功能集成上都有一定的特色,尤其適合應(yīng)用在自動(dòng)信號(hào)采集系統(tǒng)、液晶顯示智能化儀器、電池供電便攜式裝置、超長(zhǎng)時(shí)間連續(xù)工作設(shè)備等領(lǐng)域。《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》對(duì)這一系列產(chǎn)品的原理、結(jié)構(gòu)及內(nèi)部各功能模塊作了詳細(xì)的說(shuō)明,并以方便工程師及程序員使用的方式提供軟件和硬件資料。由于MSP430系列的各個(gè)不同型號(hào)基本上是這些功能模塊的不同組合,因此,掌握《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》的內(nèi)容對(duì)于MSP430系列的原理理解和應(yīng)用開發(fā)都有較大的幫助。《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》的內(nèi)容主要根據(jù)TI公司的《MSP430 Family Architecture Guide and Module Library》一書及其他相關(guān)技術(shù)資料編寫。 《MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用》供高等院校自動(dòng)化、計(jì)算機(jī)、電子等專業(yè)的教學(xué)參考及工程技術(shù)人員的實(shí)用參考,亦可做為應(yīng)用技術(shù)的培訓(xùn)教材。MSP430系列超低功耗16位單片機(jī)原理與應(yīng)用 目錄 第1章 MSP430系列1.1 特性與功能1.2 系統(tǒng)關(guān)鍵特性1.3 MSP430系列的各種型號(hào)??第2章 結(jié)構(gòu)概述2.1 CPU2.2 代碼存儲(chǔ)器?2.3 數(shù)據(jù)存儲(chǔ)器2.4 運(yùn)行控制?2.5 外圍模塊2.6 振蕩器、倍頻器和時(shí)鐘發(fā)生器??第3章 系統(tǒng)復(fù)位、中斷和工作模式?3.1 系統(tǒng)復(fù)位和初始化3.2 中斷系統(tǒng)結(jié)構(gòu)3.3 中斷處理3.3.1 SFR中的中斷控制位3.3.2 外部中斷3.4 工作模式3.5 低功耗模式3.5.1 低功耗模式0和模式13.5.2 低功耗模式2和模式33.5.3 低功耗模式43.6 低功耗應(yīng)用要點(diǎn)??第4章 存儲(chǔ)器組織4.1 存儲(chǔ)器中的數(shù)據(jù)4.2 片內(nèi)ROM組織4.2.1 ROM表的處理4.2.2 計(jì)算分支跳轉(zhuǎn)和子程序調(diào)用4.3 RAM與外圍模塊組織4.3.1 RAM4.3.2 外圍模塊--地址定位4.3.3 外圍模塊--SFR??第5章 16位CPU?5.1 CPU寄存器5.1.1 程序計(jì)數(shù)器PC5.1.2 系統(tǒng)堆棧指針SP5.1.3 狀態(tài)寄存器SR5.1.4 常數(shù)發(fā)生寄存器CG1和CG2?5.2 尋址模式5.2.1 寄存器模式5.2.2 變址模式5.2.3 符號(hào)模式5.2.4 絕對(duì)模式5.2.5 間接模式5.2.6 間接增量模式5.2.7 立即模式5.2.8 指令的時(shí)鐘周期與長(zhǎng)度5.3 指令集概述5.3.1 雙操作數(shù)指令5.3.2 單操作數(shù)指令5.3.3 條件跳轉(zhuǎn)5.3.4 模擬指令的簡(jiǎn)短格式5.3.5 其他指令5.4 指令分布??第6章 硬件乘法器?6.1 硬件乘法器的操作6.2 硬件乘法器的寄存器6.3 硬件乘法器的SFR位6.4 硬件乘法器的軟件限制6.4.1 硬件乘法器的軟件限制--尋址模式6.4.2 硬件乘法器的軟件限制--中斷程序??第7章 振蕩器與系統(tǒng)時(shí)鐘發(fā)生器?7.1 晶體振蕩器7.2 處理機(jī)時(shí)鐘發(fā)生器7.3 系統(tǒng)時(shí)鐘工作模式7.4 系統(tǒng)時(shí)鐘控制寄存器7.4.1 模塊寄存器7.4.2 與系統(tǒng)時(shí)鐘發(fā)生器相關(guān)的SFR位7.5 DCO典型特性??第8章 數(shù)字I/O配置?8.1 通用端口P08.1.1 P0的控制寄存器8.1.2 P0的原理圖8.1.3 P0的中斷控制功能8.2 通用端口P1、P28.2.1 P1、P2的控制寄存器8.2.2 P1、P2的原理圖8.2.3 P1、P2的中斷控制功能8.3 通用端口P3、P48.3.1 P3、P4的控制寄存器8.3.2 P3、P4的原理圖8.4 LCD端口8.5 LCD端口--定時(shí)器/端口比較器??第9章 通用定時(shí)器/端口模塊?9.1 定時(shí)器/端口模塊操作9.1.1 定時(shí)器/端口計(jì)數(shù)器TPCNT1--8位操作9.1.2 定時(shí)器/端口計(jì)數(shù)器TPCNT2--8位操作9.1.3 定時(shí)器/端口計(jì)數(shù)器--16位操作9.2 定時(shí)器/端口寄存器9.3 定時(shí)器/端口SFR位9.4 定時(shí)器/端口在A/D中的應(yīng)用9.4.1 R/D轉(zhuǎn)換原理9.4.2 分辨率高于8位的轉(zhuǎn)換??第10章 定時(shí)器?10.1 Basic Timer110.1.1 Basic Timer1寄存器10.1.2 SFR位10.1.3 Basic Timer1的操作10.1.4 Basic Timer1的操作--LCD時(shí)鐘信號(hào)fLCD?10.2 8位間隔定時(shí)器/計(jì)數(shù)器10.2.1 8位定時(shí)器/計(jì)數(shù)器的操作10.2.2 8位定時(shí)器/計(jì)數(shù)器的寄存器10.2.3 與8位定時(shí)器/計(jì)數(shù)器有關(guān)的SFR位10.2.4 8位定時(shí)器/計(jì)數(shù)器在UART中的應(yīng)用10.3 看門狗定時(shí)器11.1.3 比較模式11.1.4 輸出單元11.2 TimerA的寄存器11.2.1 TimerA控制寄存器TACTL11.2.2 捕獲/比較控制寄存器CCTL11.2.3 TimerA中斷向量寄存器11.3 TimerA的應(yīng)用11.3.1 TimerA增計(jì)數(shù)模式應(yīng)用11.3.2 TimerA連續(xù)模式應(yīng)用11.3.3 TimerA增/減計(jì)數(shù)模式應(yīng)用11.3.4 TimerA軟件捕獲應(yīng)用11.3.5 TimerA處理異步串行通信協(xié)議11.4 TimerA的特殊情況11.4.1 CCR0用做周期寄存器11.4.2 定時(shí)器寄存器的啟/停11.4.3 輸出單元Unit0??第12章 USART外圍接口--UART模式?12.1 異步操作12.1.1 異步幀格式12.1.2 異步通信的波特率發(fā)生器12.1.3 異步通信格式12.1.4 線路空閑多處理機(jī)模式12.1.5 地址位格式12.2 中斷與控制功能12.2.1 USART接收允許12.2.2 USART發(fā)送允許12.2.3 USART接收中斷操作12.2.4 USART發(fā)送中斷操作12.3 控制與狀態(tài)寄存器12.3.1 USART控制寄存器UCTL12.3.2 發(fā)送控制寄存器UTCTL12.3.3 接收控制寄存器URCTL12.3.4 波特率選擇和調(diào)制控制寄存器12.3.5 USART接收數(shù)據(jù)緩存URXBUF12.3.6 USART發(fā)送數(shù)據(jù)緩存UTXBUF12.4 UART模式--低功耗模式應(yīng)用特性12.4.1 由UART幀啟動(dòng)接收操作12.4.2 時(shí)鐘頻率的充分利用與UART模式的波特率12.4.3 節(jié)約MSP430資源的多處理機(jī)模式12.5 波特率的計(jì)算??第13章 USART外圍接口--SPI模式?13.1 USART的同步操作13.1.1 SPI模式中的主模式--MM=1、SYNC=113.1.2 SPI模式中的從模式--MM=0、SYNC=113.2 中斷與控制功能13.2.1 USART接收允許13.2.2 USART發(fā)送允許13.2.3 USART接收中斷操作13.2.4 USART發(fā)送中斷操作13.3 控制與狀態(tài)寄存器13.3.1 USART控制寄存器13.3.2 發(fā)送控制寄存器UTCTL13.3.3 接收控制寄存器URCTL13.3.4 波特率選擇和調(diào)制控制寄存器13.3.5 USART接收數(shù)據(jù)緩存URXBUF13.3.6 USART發(fā)送數(shù)據(jù)緩存UTXBUF??第14章 液晶顯示驅(qū)動(dòng)?14.1 LCD驅(qū)動(dòng)基本原理14.2 LCD控制器/驅(qū)動(dòng)器14.2.1 LCD控制器/驅(qū)動(dòng)器功能14.2.2 LCD控制與模式寄存器14.2.3 LCD顯示內(nèi)存14.2.4 LCD操作軟件例程14.3 LCD端口功能14.4 LCD與端口模式混合應(yīng)用實(shí)例??第15章 A/D轉(zhuǎn)換器?15.1 概述15.2 A/D轉(zhuǎn)換操作15.2.1 A/D轉(zhuǎn)換15.2.2 A/D中斷15.2.3 A/D量程15.2.4 A/D電流源15.2.5 A/D輸入端與多路切換15.2.6 A/D接地與降噪15.2.7 A/D輸入與輸出引腳15.3 A/D控制寄存器??第16章 其他模塊16.1 晶體振蕩器16.2 上電電路16.3 晶振緩沖輸出??附錄A 外圍模塊地址分配?附錄B 指令集描述?B1 指令匯總B2 指令格式B3 不增加ROM開銷的指令模擬B4 指令說(shuō)明B5 用幾條指令模擬的宏指令??附錄C EPROM編程?C1 EPROM操作C2 快速編程算法C3 通過(guò)串行數(shù)據(jù)鏈路應(yīng)用\"JTAG\"特性的EPROM模塊編程C4 通過(guò)微控制器軟件實(shí)現(xiàn)對(duì)EPROM模塊編程??附錄D MSP430系列單片機(jī)參數(shù)表?附錄E MSP430系列單片機(jī)產(chǎn)品編碼?附錄F MSP430系列單片機(jī)封裝形式?
標(biāo)簽: MSP 430 超低功耗 位單片機(jī)
上傳時(shí)間: 2014-05-07
上傳用戶:lwq11
EZ-USB FX系列單片機(jī)USB外圍設(shè)備設(shè)計(jì)與應(yīng)用:PART 1 USB的基本概念第1章 USB的基本特性1.1 USB簡(jiǎn)介21.2 USB的發(fā)展歷程31.2.1 USB 1.131.2.2 USB 2.041.2.3 USB與IEEE 1394的比較41.3 USB基本架構(gòu)與總線架構(gòu)61.4 USB的總線結(jié)構(gòu)81.5 USB數(shù)據(jù)流的模式與管線的概念91.6 USB硬件規(guī)范101.6.1 USB的硬件特性111.6.2 USB接口的電氣特性121.6.3USB的電源管理141.7 USB的編碼方式141.8 結(jié)論161.9 問(wèn)題與討論16第2章 USB通信協(xié)議2.1 USB通信協(xié)議172.2 USB封包中的數(shù)據(jù)域類型182.2.1 數(shù)據(jù)域位的格式182.3 封包格式192.4 USB傳輸?shù)念愋?32.4.1 控制傳輸242.4.2 中斷傳輸292.4.3 批量傳輸292.4.4 等時(shí)傳輸292.5 USB數(shù)據(jù)交換格式302.6 USB描述符342.7 USB設(shè)備請(qǐng)求422.8 USB設(shè)備群組442.9 結(jié)論462.10 問(wèn)題與討論46第3章 設(shè)備列舉3.1注冊(cè)表編輯器473.2設(shè)備列舉的步驟493.3設(shè)備列舉步驟的實(shí)現(xiàn)--使用CATC分析工具513.4結(jié)論613.5問(wèn)題與討論61第4章 USB芯片與EZUSB4.1USB芯片的簡(jiǎn)介624.2USB接口芯片644.2.1Philips接口芯片644.2.2National Semiconductor接口芯片664.3內(nèi)含USB單元的微處理器684.3.1Motorola694.3.2Microchip694.3.3SIEMENS704.3.4Cypress714.4USB芯片總攬介紹734.5USB芯片的選擇與評(píng)估744.6問(wèn)題與討論80第5章 設(shè)備與驅(qū)動(dòng)程序5.1階層式的驅(qū)動(dòng)程序815.2主機(jī)的驅(qū)動(dòng)程序835.3驅(qū)動(dòng)程序的選擇865.4結(jié)論865.5問(wèn)題與討論87第6章 HID群組6.1HID簡(jiǎn)介886.2HID群組的傳輸速率886.3HID描述符906.3.1報(bào)告描述符936.3.2主要 main 項(xiàng)目類型966.3.3整體 global 項(xiàng)目卷標(biāo)976.3.4區(qū)域 local 項(xiàng)目卷標(biāo)986.3.5簡(jiǎn)易的報(bào)告描述符996.3.6Descriptor Tool 描述符工具 1006.3.7兼容測(cè)試程序1016.4HID設(shè)備的基本請(qǐng)求1026.5Windows通信程序1036.6問(wèn)題與討論106PART 2 硬件技術(shù)篇第7章 EZUSB FX簡(jiǎn)介7.1簡(jiǎn)介1097.2EZUSB FX硬件框圖1097.3封包與PID碼1117.4主機(jī)是個(gè)主控者1137.4.1從主機(jī)接收數(shù)據(jù)1137.4.2傳送數(shù)據(jù)至主機(jī)1137.5USB方向1137.6幀1147.7EZUSB FX傳輸類型1147.7.1批量傳輸1147.7.2中斷傳輸1147.7.3等時(shí)傳輸1157.7.4控制傳輸1157.8設(shè)備列舉1167.9USB核心1167.10EZUSB FX單片機(jī)1177.11重新設(shè)備列舉1177.12EZUSB FX端點(diǎn)1187.12.1EZUSB FX批量端點(diǎn)1187.12.2EZUSB FX控制端點(diǎn)01187.12.3EZUSB FX中斷端點(diǎn)1197.12.4EZUSB FX等時(shí)端點(diǎn)1197.13快速傳送模式1197.14中斷1207.15重置與電源管理1207.16EZUSB 2100系列1207.17FX系列--從FIFO1227.18FX系列--GPIF 通用型可程序化的接口 1227.19AN2122/26各種特性的摘要1227.20修訂ID1237.21引腳描述123第8章 EZUSB FX CPU8.1簡(jiǎn)介1308.28051增強(qiáng)模式1308.3EZUSB FX所增強(qiáng)的部分1318.4EZUSB FX寄存器接口1318.5EZUSB FX內(nèi)部RAM1318.6I/O端口1328.7中斷1328.8電源控制1338.9特殊功能寄存器 SFR 1348.10內(nèi)部總線1358.11重置136第9章 EZUSB FX內(nèi)存9.1簡(jiǎn)介1379.28051內(nèi)存1389.3擴(kuò)充的EZUSB FX內(nèi)存1399.4CS#與OE#信號(hào)1409.5EZUSB FX ROM版本141第10章 EZUSB FX輸入/輸出端口10.1簡(jiǎn)介14310.2I/O端口14310.3EZUSB輸入/輸出端口寄存器14610.3.1端口配置寄存器14710.3.2I/O端口寄存器14710.4EZUSB FX輸入/輸出端口寄存器14910.5EZUSB FX端口配置表15110.6I2C控制器15610.78051 I2C控制器15610.8控制位15810.8.1START位15810.8.2STOP位15810.8.3LASTRD位15810.9狀態(tài)位15910.9.1DONE位15910.9.2ACK位15910.9.3BERR位15910.9.4ID1, ID015910.10送出 WRITE I2C數(shù)據(jù)16010.11接收 READ I2C數(shù)據(jù)16010.12I2C激活加載器16010.13SFR尋址 FX 16210.14端口A~E的SFR控制165第11章 EZUSB FX設(shè)備列舉與重新設(shè)備列舉11.1簡(jiǎn)介16711.2預(yù)設(shè)的USB設(shè)備16911.3USB核心對(duì)于EP0設(shè)備請(qǐng)求的響應(yīng)17011.4固件下載17111.5設(shè)備列舉模式17211.6沒(méi)有存在EEPROM17311.7存在著EEPROM, 第一個(gè)字節(jié)是0xB0 0xB4, FX系列11.8存在著EEPROM, 第一個(gè)字節(jié)是0xB2 0xB6, FX系列11.9配置字節(jié)0,FX系列17711.10重新設(shè)備列舉 ReNumerationTM 17811.11多重重新設(shè)備列舉 ReNumerationTM 17911.12預(yù)設(shè)描述符179第12章 EZUSB FX批量傳輸12.1簡(jiǎn)介18812.2批量輸入傳輸18912.3中斷傳輸19112.4EZUSB FX批量IN的例子19112.5批量OUT傳輸19212.6端點(diǎn)對(duì)19412.7IN端點(diǎn)對(duì)的狀態(tài)19412.8OUT端點(diǎn)對(duì)的狀態(tài)19512.9使用批量緩沖區(qū)內(nèi)存19512.10Data Toggle控制19612.11輪詢的批量傳輸?shù)姆独?9712.12設(shè)備列舉說(shuō)明19912.13批量端點(diǎn)中斷19912.14中斷批量傳輸?shù)姆独?0112.15設(shè)備列舉說(shuō)明20512.16自動(dòng)指針器205第13章 EZUSB控制端點(diǎn)013.1簡(jiǎn)介20913.2控制端點(diǎn)EP021013.3USB請(qǐng)求21213.3.1取得狀態(tài) Get_Status 21413.3.2設(shè)置特性(Set_Feature)21713.3.3清除特性(Clear_Feature)21813.3.4取得描述符(Get_Descriptor)21913.3.5設(shè)置描述符(Set Descriptor)22313.3.6設(shè)置配置(Set_Configuration)22513.3.7取得配置(Get_Configuration)22513.3.8設(shè)置接口(Set_Interface)22513.3.9取得接口(Get_Interface)22613.3.10設(shè)置地址(Set_Address)22713.3.11同步幀22713.3.12固件加載228第14章 EZUSB FX等時(shí)傳輸14.1簡(jiǎn)介22914.2等時(shí)IN傳輸23014.2.1初始化設(shè)置23014.2.2IN數(shù)據(jù)傳輸23014.3等時(shí)OUT傳輸23114.3.1初始化設(shè)置23114.3.2數(shù)據(jù)傳輸23214.4設(shè)置等時(shí)FIFO的大小23214.5等時(shí)傳輸速度23414.5.1EZUSB 2100系列23414.5.2EZUSB FX系列23514.6快速傳輸 僅存于2100系列 23614.6.1快速寫入23614.6.2快速讀取23714.7快速傳輸?shù)臅r(shí)序 僅存于2100系列 23714.7.1快速寫入波形23814.7.2快速讀取波形23914.8快速傳輸速度(僅存于2100系列)23914.9其余的等時(shí)寄存器24014.9.1除能等時(shí)寄存器24014.9.20字節(jié)計(jì)數(shù)位24114.10以無(wú)數(shù)據(jù)來(lái)響應(yīng)等時(shí)IN令牌24214.11使用等時(shí)FIFO242第15章 EZUSB FX中斷15.1簡(jiǎn)介24315.2USB核心中斷24415.3喚醒中斷24415.4USB中斷信號(hào)源24515.5SUTOK與SUDAV中斷24815.6SOF中斷24915.7中止 suspend 中斷24915.8USB重置中斷24915.9批量端點(diǎn)中斷25015.10USB自動(dòng)向量25015.11USB自動(dòng)向量譯碼25115.12I2C中斷25215.13IN批量NAK中斷 僅存于AN2122/26與FX系列 25315.14I2C STOP反相中斷 僅存于AN2122/26與FX系列 25415.15從FIFO中斷 INT4 255第16章 EZUSB FX重置16.1簡(jiǎn)介25716.2EZUSB FX打開電源重置 POR 25716.38051重置的釋放25916.3.1RAM的下載26016.3.2下載EEPROM26016.3.3外部ROM26016.48051重置所產(chǎn)生的影響26016.5USB總線重置26116.6EZUSB脫離26216.7各種重置狀態(tài)的總結(jié)263第17章 EZUSB FX電源管理17.1簡(jiǎn)介26517.2中止 suspend 26617.3回復(fù) resume 26717.4遠(yuǎn)程喚醒 remote wakeup 269第18章 EZUSB FX系統(tǒng)18.1簡(jiǎn)介27118.2DMA寄存器描述27218.2.1來(lái)源. 目的. 傳輸長(zhǎng)度地址寄存器27218.2.2DMA起始與狀態(tài)寄存器27518.2.3DMA同步突發(fā)使能寄存器27518.2.4虛擬寄存器27818.3RD/FRD與WR/FWR DMA閃控的選擇27818.4DMA閃控波形與延伸位的交互影響27918.4.1DMA外部寫入27918.4.2DMA外部讀取280第19章 EZUSB FX寄存器19.1簡(jiǎn)介28219.2批量數(shù)據(jù)緩沖區(qū)寄存器28319.3等時(shí)數(shù)據(jù)FIFO寄存器28419.4等時(shí)字節(jié)計(jì)數(shù)寄存器28519.5CPU寄存器28719.6I/O端口配置寄存器28819.7I/O端口A~C輸入/輸出寄存器28919.8230 Kbaud UART操作--AN2122/26寄存器29119.9等時(shí)控制/狀態(tài)寄存器29119.10I2C寄存器29219.11中斷29419.12端點(diǎn)0控制與狀態(tài)寄存器29919.13端點(diǎn)1~7的控制與狀態(tài)寄存器30019.14整體USB寄存器30519.15快速傳輸30919.16SETUP數(shù)據(jù)31119.17等時(shí)FIFO的容量大小31119.18通用I/F中斷使能31219.19通用中斷請(qǐng)求31219.20輸入/輸出端口寄存器D與E31319.20.1端口D輸出31319.20.2輸入端口D腳位31319.20.3端口D輸出使能31319.20.4端口E輸出31319.20.5輸入端口E腳位31419.20.6端口E輸出使能31419.21端口設(shè)置31419.22接口配置31419.23端口A與端口C切換配置31619.23.1端口A切換配置#231619.23.2端口C切換配置#231719.24DMA寄存器31919.24.1來(lái)源. 目的. 傳輸長(zhǎng)度地址寄存器31919.24.2DMA起始與狀態(tài)寄存器32019.24.3DMA同步突發(fā)使能寄存器32019.24.4選擇8051 A/D總線作為外部FIFO321PART 3 固件技術(shù)篇第20章 EZUSB FX固件架構(gòu)與函數(shù)庫(kù)20.1固件架構(gòu)總覽32320.2固件架構(gòu)的建立32520.3固件架構(gòu)的副函數(shù)鉤子32520.3.1工作分配器32620.3.2設(shè)備請(qǐng)求 device request 32620.3.3USB中斷服務(wù)例程32920.4固件架構(gòu)整體變量33220.5描述符表33320.5.1設(shè)備描述符33320.5.2配置描述符33420.5.3接口描述符33420.5.4端點(diǎn)描述符33520.5.5字符串描述符33520.5.6群組描述符33520.6EZUSB FX固件的函數(shù)庫(kù)33620.6.1包含文件 *.H 33620.6.2子程序33620.6.3整體變量33820.7固件架構(gòu)的原始程序代碼338第21章 EZUSB FX固件范例程序21.1范例程序的簡(jiǎn)介34621.2外圍I/O測(cè)試程序34721.3端點(diǎn)對(duì), EP_PAIR范例35221.4批量測(cè)試, BulkTest范例36221.5等時(shí)傳輸, ISOstrm范例36821.6問(wèn)題與討論373PART 4 實(shí)驗(yàn)篇第22章 EZUSB FX仿真器22?1簡(jiǎn)介37522?2所需的工具37622?3EZUSB FX框圖37722.4EZUSB最終版本的系統(tǒng)框圖37822?5第一次下載程序37822.6EZUSB FX開發(fā)系統(tǒng)框圖37922.7設(shè)置開發(fā)環(huán)境38022.8EZUSB FX開發(fā)工具組的內(nèi)容38122.9EZUSB FX開發(fā)工具組軟件38222.9.1初步安裝程序38222.9.2確認(rèn)主機(jī) 個(gè)人計(jì)算機(jī) 是否支持USB38222.10安裝EZUSB控制平臺(tái). 驅(qū)動(dòng)程序以及文件38322.11EZUSB FX開發(fā)電路板38522.11.1簡(jiǎn)介38522.11.2開發(fā)電路板的瀏覽38522.11.3所使用的8051資源38622.11.4詳細(xì)電路38622.11.5LED的顯示38722.11.6Jumper38722.11.7連接器39122.11.8內(nèi)存映象圖39222.11.9PLD信號(hào)39422.11.10PLD源文件文件39522.11.11雛形板的擴(kuò)充連接器P1~P639722.11.12Philips PCF8574 I/O擴(kuò)充IC40022.12DMA USB FX I/O LAB開發(fā)工具介紹40122.12.1USBFX簡(jiǎn)介40122.12.2USBFX及外圍整體環(huán)境介紹40322?12?3USBFX與PC連接軟件介紹40422.12.4USBFX硬件功能介紹404第23章 LED顯示器輸出實(shí)驗(yàn)23.1硬件設(shè)計(jì)與基本概念40923.2固件設(shè)計(jì)41023.3.1固件架構(gòu)文件FW.C41123.3.2描述符文件DESCR.A5141223.3.3外圍接口文件PERIPH.C41723.4固件程序代碼的編譯與鏈接42123.5Windows程序, VB設(shè)計(jì)42323.6INF文件的編寫設(shè)計(jì)42423.7結(jié)論42623.8問(wèn)題與討論427第24章 七段顯示器與鍵盤的輸入/輸出實(shí)驗(yàn)24.1硬件設(shè)計(jì)與基本概念42824.2固件設(shè)計(jì)43124.2.1七段顯示器43124.2.24×4鍵盤掃描43324.3固件程序代碼的編譯與鏈接43424.4Windows程序, VB設(shè)計(jì)43624.5問(wèn)題與討論437第25章 LCD文字型液晶顯示器輸出實(shí)驗(yàn)25.1硬件設(shè)計(jì)與基本概念43825.1.1液晶顯示器LCD43825.2固件設(shè)計(jì)45225.3固件程序代碼的編譯與鏈接45625.4Windows程序, VB設(shè)計(jì)45725.5問(wèn)題與討論458第26章 LED點(diǎn)陣輸出實(shí)驗(yàn)26.1硬件設(shè)計(jì)與基本概念45926.2固件設(shè)計(jì)46326.3固件程序代碼的編譯與鏈接46326.4Windows程序, VB設(shè)計(jì)46526.5問(wèn)題與討論465第27章 步進(jìn)電機(jī)輸出實(shí)驗(yàn)27.1硬件設(shè)計(jì)與基本概念46627.1.11相激磁46727.1.22相激磁46727.1.31-2相激磁46827?1?4PMM8713介紹46927.2固件設(shè)計(jì)47327.3固件程序代碼的編譯與鏈接47427.4Windows程序, VB設(shè)計(jì)47627.5問(wèn)題與討論477第28章 I2C接口輸入/輸出實(shí)驗(yàn)28.1硬件設(shè)計(jì)與基本概念47828.2固件設(shè)計(jì)48128.3固件程序代碼的編譯與鏈接48328.4Windows程序, VB設(shè)計(jì)48428.5問(wèn)題與討論485第29章 A/D轉(zhuǎn)換器與D/A轉(zhuǎn)換器的輸入/輸出實(shí)驗(yàn)29.1硬件設(shè)計(jì)與基本概念48629.1.1A/D轉(zhuǎn)換器48629.1.2D/A轉(zhuǎn)換器49029.2固件設(shè)計(jì)49329.2.1A/D轉(zhuǎn)換器的固件設(shè)計(jì)49329.2.2D/A轉(zhuǎn)換器的固件設(shè)計(jì)49629.3固件程序代碼的編譯與鏈接49729.4Windows程序, VB設(shè)計(jì)49829.5問(wèn)題與討論499第30章 LCG繪圖型液晶顯示器輸出實(shí)驗(yàn)30.1硬件設(shè)計(jì)與基本概念50030.1.1繪圖型LCD50030.1.2繪圖型LCD控制指令集50330.1.3繪圖型LCD讀取與寫入時(shí)序圖50530.2固件設(shè)計(jì)50630.2.1LCG驅(qū)動(dòng)程序50630.2.2USB固件碼51330.3固件程序代碼的編譯與鏈接51630.4Windows程序, VB設(shè)計(jì)51730.5問(wèn)題與討論518附錄A Cypress控制平臺(tái)的操作A.1EZUSB控制平臺(tái)總覽519A.2主畫面520A.3熱插拔新的USB設(shè)備521A.4各種工具欄的使用524A.5故障排除526A.6控制平臺(tái)的進(jìn)階操作527A.7測(cè)試Unary Op工具欄上的按鈕功能528A.8測(cè)試制造商請(qǐng)求的工具欄 2100 系列的開發(fā)電路板 529A.9測(cè)試等時(shí)傳輸工具欄532A.10測(cè)試批量傳輸工具欄533A.11測(cè)試重置管線工具欄535A.12測(cè)試設(shè)置接口工具欄537A.13測(cè)試制造商請(qǐng)求工具欄 FX系列開發(fā)電路板A.14執(zhí)行Get Device Descriptor 操作來(lái)驗(yàn)證開發(fā)板的功能是否正確539A.15從EZUSB控制平臺(tái)中, 加載dev_io的范例并且加以執(zhí)行540A.16從Keil偵錯(cuò)應(yīng)用程序中, 加載dev_io范例程序代碼, 然后再加以執(zhí)行542A.17將dev_io 目標(biāo)文件移開, 且使用Keil IDE 集成開發(fā)環(huán)境 來(lái)重建545A.18在偵錯(cuò)器下執(zhí)行dev_io目標(biāo)文件, 并且使用具有偵錯(cuò)能力的IDE547A.19在EZUSB控制平臺(tái)下, 執(zhí)行ep_pair目標(biāo)文件A.20如何修改fw范例, 并在開發(fā)電路板上產(chǎn)生等時(shí)傳輸550附錄BEZUSB 2100系列及EZUSB FX系列引腳表B.1EZUSB 2100系列引腳表555B?2EZUSB FX系列引腳圖表561附錄C EZUSB FX寄存器總覽附錄D EEPROM燒錄方式
標(biāo)簽: EZ-USB USB 單片機(jī) 外圍設(shè)備
上傳時(shí)間: 2013-11-21
上傳用戶:努力努力再努力
單片機(jī)語(yǔ)言C51應(yīng)用實(shí)戰(zhàn)集錦使用C語(yǔ)言開發(fā)速度快,代碼可重復(fù)使用,程序結(jié)構(gòu)清晰、易懂、易維護(hù),易開發(fā)一些比較大型的項(xiàng)目。目前,許多編譯器都已經(jīng)支持了C51,而且是Windows視窗界面。Kelic51是目前單片機(jī)開發(fā)最為流行的軟件。本書收集并整理了許多實(shí)用的采用C51單片機(jī)開發(fā)的程序,這些程序既可以給讀者以開拓思路,參考的用途又是實(shí)際的開發(fā)程序,可以直接作為程序應(yīng)用在相同的開發(fā)系統(tǒng)上。通過(guò)本書的學(xué)習(xí),讀者可以進(jìn)一步了解和掌握C51編程的思路和方法。單片機(jī)語(yǔ)言C51應(yīng)用實(shí)戰(zhàn)集錦目錄:程序一 實(shí)時(shí)時(shí)鐘芯片DS1302的C51程序例子程序二 C430與CSI的一點(diǎn)區(qū)別程序三 一個(gè)菜單的例子程序四 DS1820單芯片溫度測(cè)量程序五 keilc 6.20c版直接嵌入?yún)R編的方法程序六 用計(jì)算機(jī)并口模擬SPI通信的C源程序程序七 CRC 16-SIANDARD的快速算法程序八 在PC上用并行口模擬I(平方)C總線的C源代碼程序九 一種在C51中寫二進(jìn)制的方法程序十 CRC算法原理及C語(yǔ)言實(shí)現(xiàn)程序十一 軟件陷階程序十二 一個(gè)簡(jiǎn)單的VB串口發(fā)送程序程序十三 12864漢字液晶顯示驅(qū)動(dòng)程序程序十四 12232點(diǎn)陣液晶基本驅(qū)動(dòng)程序程序十五 串口中斷服務(wù)函數(shù)集程序十六 93C46讀寫程序程序十七 20045讀寫程序程序十八 一組小程序集錦程序十九 AVR asm源程序程序二十 AVR單片機(jī)一個(gè)簡(jiǎn)單的通信程序程序二十一 TG19264A接口程序程序二十二 TG19264A接口程序(AVR模擬方式)程序二十三 常用的幾種碼制轉(zhuǎn)換BCD,HEX,BIN程序二十四 16x2字符液晶屏驅(qū)動(dòng)演示程序一程序二十五 16x2字符液晶屏驅(qū)動(dòng)演示程序二程序二十六 PS7219代碼程序二十七 2051的AD代碼程序二十八 ARV19264型液晶顯示字庫(kù)程序二十九 液晶CKW19264A型接口程序(模擬方式)程序三十 I(平方)C總線驅(qū)動(dòng)程序程序三十一 240128型液晶代碼程序三十二 飛機(jī)游戲程序三十三 PC鍵代碼程序三十四 拼音輸入法模塊程序三十五 串行口代碼程序三十六 蛇游戲代碼程序三十七 與液晶模塊T6963C連接代碼程序三十八 鍵盤輸入法設(shè)計(jì)草案程序三十九 16*4液晶漢字代碼程序四十 智能化家電控制附錄C 單片機(jī)C51編程幾個(gè)有用的模塊附錄D 頭文件W77E58.h附錄A MCS-51單片機(jī)定點(diǎn)運(yùn)算子程序庫(kù)附錄B MCS-51單片機(jī)浮點(diǎn)運(yùn)算子程序庫(kù)
標(biāo)簽: C51 單片機(jī)語(yǔ)言 集錦
上傳時(shí)間: 2013-11-02
上傳用戶:kbnswdifs
含原理圖+電路圖+程序的波形發(fā)生器:在工作中,我們常常會(huì)用到波形發(fā)生器,它是使用頻度很高的電子儀器。現(xiàn)在的波形發(fā)生器都采用單片機(jī)來(lái)構(gòu)成。單片機(jī)波形發(fā)生器是以單片機(jī)核心,配相應(yīng)的外圍電路和功能軟件,能實(shí)現(xiàn)各種波形發(fā)生的應(yīng)用系統(tǒng),它由硬件部分和軟件部分組成,硬件是系統(tǒng)的基礎(chǔ),軟件則是在硬件的基礎(chǔ)上,對(duì)其合理的調(diào)配和使用,從而完成波形發(fā)生的任務(wù)。 波形發(fā)生器的技術(shù)指標(biāo):(1) 波形類型:方型、正弦波、三角波、鋸齒波;(2) 幅值電壓:1V、2V、3V、4V、5V;(3) 頻率值:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;(4) 輸出極性:雙極性操作設(shè)計(jì)1、 機(jī)器通電后,系統(tǒng)進(jìn)行初始化,LED在面板上顯示6個(gè)0,表示系統(tǒng)處于初始狀態(tài),等待用戶輸入設(shè)置命令,此時(shí),無(wú)任何波形信號(hào)輸出。2、 用戶按下“F”、“V”、“W”,可以分別進(jìn)入頻率,幅值波形設(shè)置,使系統(tǒng)進(jìn)入設(shè)置狀態(tài),相應(yīng)的數(shù)碼管顯示“一”,此時(shí),按其它鍵,無(wú)效;3、 在進(jìn)入某一設(shè)置狀態(tài)后,輸入0~9等數(shù)字鍵,(數(shù)字鍵僅在設(shè)置狀態(tài)時(shí),有效)為欲輸出的波形設(shè)置相應(yīng)參數(shù),LED將參數(shù)顯示在面板上;4、 如果在設(shè)置中,要改變已設(shè)定的參數(shù),可按下“CL”鍵,清除所有已設(shè)定參數(shù),系統(tǒng)恢復(fù)初始狀態(tài),LED顯示6個(gè)0,等待重新輸入命令;5、 當(dāng)必要的參數(shù)設(shè)定完畢后,所有參數(shù)顯示于LED上,用戶按下“EN”鍵,系統(tǒng)會(huì)將各波形參數(shù)傳遞到波形產(chǎn)生模塊中,以便控制波形發(fā)生,實(shí)現(xiàn)不同頻率,不同電壓幅值,不同類型波形的輸出;6、 用戶按下“EN”鍵后,波形發(fā)生器開始輸出滿足參數(shù)的波形信號(hào),面板上相應(yīng)類型的運(yùn)行指示燈閃爍,表示波形正在輸出,LED顯示波形類型編號(hào),頻率值、電壓幅值等波形參數(shù);7、 波形發(fā)生器在輸出信號(hào)時(shí),按下任意一個(gè)鍵,就停止波形信號(hào)輸出,等待重新設(shè)置參數(shù),設(shè)置過(guò)程如上所述,如果不改變參數(shù),可按下“EN”鍵,繼續(xù)輸出原波形信號(hào);8、 要停止波形發(fā)生器的使用,可按下復(fù)位按鈕,將系統(tǒng)復(fù)位,然后關(guān)閉電源。硬件組成部分通過(guò)綜合比較,決定選用獲得廣泛應(yīng)用,性能價(jià)格高的常用芯片來(lái)構(gòu)成硬件電路。單片機(jī)采用MCS-51系列的89C51(一塊),74LS244和74LS373(各一塊),反相驅(qū)動(dòng)器 ULN2803A(一塊),運(yùn)算放大器 LM324(一塊) 波形發(fā)生器的硬件電路由單片機(jī)、鍵盤顯示器接口電路、波形轉(zhuǎn)換(D/ A)電路和電源線路等四部分構(gòu)成。1.單片機(jī)電路功能:形成掃描碼,鍵值識(shí)別,鍵功能處理,完成參數(shù)設(shè)置;形成顯示段碼,向LED顯示接口電路輸出;產(chǎn)生定時(shí)中斷;形成波形的數(shù)字編碼,并輸出到D/A接口電路;如電路原理圖所示: 89C51的P0口和P2口作為擴(kuò)展I/O口,與8255、0832、74LS373相連接,可尋址片外的寄存器。單片機(jī)尋址外設(shè),采用存儲(chǔ)器映像方式,外部接口芯片與內(nèi)部存儲(chǔ)器統(tǒng)一編址,89C51提供16根地址線P0(分時(shí)復(fù)用)和P2,P2口提供高8位地址線,P0口提供低8位地址線。P0口同時(shí)還要負(fù)責(zé)與8255,0832的數(shù)據(jù)傳遞。P2.7是8255的片選信號(hào),P2.6是0832(1)的片選,P2.5是0832(2)的片選,低電平有效,P0.0、P0.1經(jīng)過(guò)74LS373鎖存后,送到8255的A1、A2作,片內(nèi)A口,B口,C口,控制口等寄存器的字選。89C51的P1口的低4位連接4只發(fā)光三極管,作為波形類型指示燈,表示正在輸出的波形是什么類型。單片機(jī)89C51內(nèi)部有兩個(gè)定時(shí)器/計(jì)數(shù)器,在波形發(fā)生器中使用T0作為中斷源。不同的頻率值對(duì)應(yīng)不同的定時(shí)初值,定時(shí)器的溢出信號(hào)作為中斷請(qǐng)求。控制定時(shí)器中斷的特殊功能寄存器設(shè)置如下:定時(shí)控制寄存器TCON=(00010000)工作方式選擇寄存器(TMOD)=(00000000)中斷允許控制寄存器(IE)=(10000010)2、鍵盤顯示器接口電路功能:驅(qū)動(dòng)6位數(shù)碼管動(dòng)態(tài)顯示; 提供響應(yīng)界面; 掃面鍵盤; 提供輸入按鍵。由并口芯片8255,鎖存器74LS273,74LS244,反向驅(qū)動(dòng)器ULN2803A,6位共陰極數(shù)碼管(LED)和4×4行列式鍵盤組成。8255的C口作為鍵盤的I/O接口,C口的低4位輸出到掃描碼,高4位作為輸入行狀態(tài),按鍵的分布如圖所示。8255的A口作為L(zhǎng)ED段碼輸出口,與74LS244相連接,B口作為L(zhǎng)ED的位選信號(hào)輸出口,與ULN2803A相連接。8255內(nèi)部的4個(gè)寄存器地址分配如下:控制口:7FFFH , A口:7FFFCH , B口:7FFDH , C口:7FFEH 3、D/A電路功能:將波形樣值的數(shù)字編碼轉(zhuǎn)換成模擬值;完成單極性向雙極性的波形輸出;構(gòu)成由兩片0832和一塊LM324運(yùn)放組成。0832(1)是參考電壓提供者,單片機(jī)向0832(1)內(nèi)的鎖存器送數(shù)字編碼,不同的編碼會(huì)產(chǎn)生不同的輸出值,在本發(fā)生器中,可輸出1V、2V、3V、4V、5V等五個(gè)模擬值,這些值作為0832(2)的參考電壓,使0832(2)輸出波形信號(hào)時(shí),其幅度是可調(diào)的。0832(2)用于產(chǎn)生各種波形信號(hào),單片機(jī)在波形產(chǎn)生程序的控制下,生成波形樣值編碼,并送到0832(2)中的鎖存器,經(jīng)過(guò)D/A轉(zhuǎn)換,得到波形的模擬樣值點(diǎn),假如N個(gè)點(diǎn)就構(gòu)成波形的一個(gè)周期,那么0832(2)輸出N個(gè)樣值點(diǎn)后,樣值點(diǎn)形成運(yùn)動(dòng)軌跡,就是波形信號(hào)的一個(gè)周期。重復(fù)輸出N個(gè)點(diǎn)后,由此成第二個(gè)周期,第三個(gè)周期……。這樣0832(2)就能連續(xù)的輸出周期變化的波形信號(hào)。運(yùn)放A1是直流放大器,運(yùn)放A2是單極性電壓放大器,運(yùn)放A3是雙極性驅(qū)動(dòng)放大器,使波形信號(hào)能帶得起負(fù)載。地址分配:0832(1):DFFFH ,0832(2):BFFFH4、電源電路:功能:為波形發(fā)生器提供直流能量;構(gòu)成由變壓器、整流硅堆,穩(wěn)壓塊7805組成。220V的交流電,經(jīng)過(guò)開關(guān),保險(xiǎn)管(1.5A/250V),到變壓器降壓,由220V降為10V,通過(guò)硅堆將交流電變成直流電,對(duì)于諧波,用4700μF的電解電容給予濾除。為保證直流電壓穩(wěn)定,使用7805進(jìn)行穩(wěn)壓。最后,+5V電源配送到各用電負(fù)載。
標(biāo)簽: 波形發(fā)生器 原理圖 電路圖 源程序
上傳時(shí)間: 2013-11-08
上傳用戶:685
82C55A是高性能,工業(yè)標(biāo)準(zhǔn),并行I/O的LSI外圍芯片;提供24條I/O腳線。 在三種主要的操作方式下分組進(jìn)行程序設(shè)計(jì)82C88A的幾個(gè)特點(diǎn):(1)與所有Intel系列微處理器兼容;(2)有較高的操作速度;(3)24條可編程I/O腳線;(4)底功耗的CHMOS;(5)與TTL兼容;(6)擁有控制字讀回功能;(7)擁有直接置位/復(fù)位功能;(8)在所有I/O輸出端口有2.5mA DC驅(qū)動(dòng)能力;(9)適應(yīng)性強(qiáng)。方式0操作稱為簡(jiǎn)單I/O操作,是指端口的信號(hào)線可工作在電平敏感輸入方式或鎖存輸出。所以,須將控制寄存器設(shè)計(jì)為:控制寄存器中:D7=1; D6 D5=00; D2=0。D7位為1代表一個(gè)有效的方式。通過(guò)對(duì)D4 D3 D1和D0的置位/復(fù)位來(lái)實(shí)現(xiàn)端口A及端口B是輸入或輸出。P56表2-1列出了操作方式0端口管腳功能。
上傳時(shí)間: 2013-10-26
上傳用戶:brilliantchen
單片機(jī)音樂(lè)中音調(diào)和節(jié)拍的確定方法:調(diào)號(hào)-音樂(lè)上指用以確定樂(lè)曲主音高度的符號(hào)。很明顯一個(gè)八度就有12個(gè)半音。A、B、C、D、E、F、G。經(jīng)過(guò)聲學(xué)家的研究,全世界都用這些字母來(lái)表示固定的音高。比如,A這個(gè)音,標(biāo)準(zhǔn)的音高為每秒鐘振動(dòng)440周。 升C調(diào):1=#C,也就是降D調(diào):1=BD;277(頻率)升D調(diào):1=#D,也就是降E調(diào):1=BE;311升F調(diào):1=#F,也就是降G調(diào):1=BG;369升G調(diào):1=#G,也就是降A(chǔ)調(diào):1=BA;415升A調(diào):1=#A,也就是降B調(diào):1=BB。466,C 262 #C277 D 294 #D(bE)311 E 330 F 349 #F369 G 392 #G415A 440. #A466 B 494 所謂1=A,就是說(shuō),這首歌曲的“導(dǎo)”要唱得同A一樣高,人們也把這首歌曲叫做A調(diào)歌曲,或叫“唱A調(diào)”。1=C,就是說(shuō),這首歌曲的“導(dǎo)”要唱得同C一樣高,或者說(shuō)“這歌曲唱C調(diào)”。同樣是“導(dǎo)”,不同的調(diào)唱起來(lái)的高低是不一樣的。各調(diào)的對(duì)應(yīng)的標(biāo)準(zhǔn)頻率為: 單片機(jī)演奏音樂(lè)時(shí)音調(diào)和節(jié)拍的確定方法 經(jīng)常看到一些剛學(xué)單片機(jī)的朋友對(duì)單片機(jī)演奏音樂(lè)比較有興趣,本人也曾是這樣。在此,本人將就這方面的知識(shí)做一些簡(jiǎn)介,但愿能對(duì)單片機(jī)演奏音樂(lè)比較有興趣而又不知其解的朋友能有所啟迪。 一般說(shuō)來(lái),單片機(jī)演奏音樂(lè)基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說(shuō)不能象電子琴那樣能奏出多種音色的聲音。因此單片機(jī)奏樂(lè)只需弄清楚兩個(gè)概念即可,也就是“音調(diào)”和“節(jié)拍”。音調(diào)表示一個(gè)音符唱多高的頻率,節(jié)拍表示一個(gè)音符唱多長(zhǎng)的時(shí)間。 在音樂(lè)中所謂“音調(diào)”,其實(shí)就是我們常說(shuō)的“音高”。在音樂(lè)中常把中央C上方的A音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz。當(dāng)兩個(gè)聲音信號(hào)的頻率相差一倍時(shí),也即f2=2f1時(shí),則稱f2比f(wàn)1高一個(gè)倍頻程, 在音樂(lè)中1(do)與 ,2(來(lái))與 ……正好相差一個(gè)倍頻程,在音樂(lè)學(xué)中稱它相差一個(gè)八度音。在一個(gè)八度音內(nèi),有12個(gè)半音。以1—i八音區(qū)為例, 12個(gè)半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。這12個(gè)音階的分度基本上是以對(duì)數(shù)關(guān)系來(lái)劃分的。如果我們只要知道了這十二個(gè)音符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。 知道了一個(gè)音符的頻率后,怎樣讓單片機(jī)發(fā)出相應(yīng)頻率的聲音呢?一般說(shuō)來(lái),常采用的方法就是通過(guò)單片機(jī)的定時(shí)器定時(shí)中斷,將單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O口來(lái)回取反,或者說(shuō)來(lái)回清零,置位,從而讓蜂鳴器發(fā)出聲音,為了讓單片機(jī)發(fā)出不同頻率的聲音,我們只需將定時(shí)器予置不同的定時(shí)值就可實(shí)現(xiàn)。那么怎樣確定一個(gè)頻率所對(duì)應(yīng)的定時(shí)器的定時(shí)值呢?以標(biāo)準(zhǔn)音高A為例: A的頻率f = 440 Hz,其對(duì)應(yīng)的周期為:T = 1/ f = 1/440 =2272μs 由上圖可知,單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O口來(lái)回取反的時(shí)間應(yīng)為:t = T/2 = 2272/2 = 1136μs這個(gè)時(shí)間t也就是單片機(jī)上定時(shí)器應(yīng)有的中斷觸發(fā)時(shí)間。一般情況下,單片機(jī)奏樂(lè)時(shí),其定時(shí)器為工作方式1,它以振蕩器的十二分頻信號(hào)為計(jì)數(shù)脈沖。設(shè)振蕩器頻率為f0,則定時(shí)器的予置初值由下式來(lái)確定: t = 12 *(TALL – THL)/ f0 式中TALL = 216 = 65536,THL為定時(shí)器待確定的計(jì)數(shù)初值。因此定時(shí)器的高低計(jì)數(shù)器的初值為: TH = THL / 256 = ( TALL – t* f0/12) / 256 TL = THL % 256 = ( TALL – t* f0/12) %256 將t=1136μs代入上面兩式(注意:計(jì)算時(shí)應(yīng)將時(shí)間和頻率的單位換算一致),即可求出標(biāo)準(zhǔn)音高A在單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)器高低計(jì)數(shù)器的予置初值為 : TH440Hz = (65536 – 1136 * 12/12) /256 = FBH TL440Hz = (65536 – 1136 * 12/12)%256 = 90H根據(jù)上面的求解方法,我們就可求出其他音調(diào)相應(yīng)的計(jì)數(shù)器的予置初值。 音符的節(jié)拍我們可以舉例來(lái)說(shuō)明。在一張樂(lè)譜中,我們經(jīng)常會(huì)看到這樣的表達(dá)式,如1=C 、1=G …… 等等,這里1=C,1=G表示樂(lè)譜的曲調(diào),和我們前面所談的音調(diào)有很大的關(guān)聯(lián), 、 就是用來(lái)表示節(jié)拍的。以 為例加以說(shuō)明,它表示樂(lè)譜中以四分音符為節(jié)拍,每一小結(jié)有三拍。比如: 其中1 、2 為一拍,3、4、5為一拍,6為一拍共三拍。1 、2的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),3、4的時(shí)長(zhǎng)為八分音符的一半,即為十六分音符長(zhǎng),5的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),6的時(shí)長(zhǎng)為四分音符長(zhǎng)。那么一拍到底該唱多長(zhǎng)呢?一般說(shuō)來(lái),如果樂(lè)曲沒(méi)有特殊說(shuō)明,一拍的時(shí)長(zhǎng)大約為400—500ms 。我們以一拍的時(shí)長(zhǎng)為400ms為例,則當(dāng)以四分音符為節(jié)拍時(shí),四分音符的時(shí)長(zhǎng)就為400ms,八分音符的時(shí)長(zhǎng)就為200ms,十六分音符的時(shí)長(zhǎng)就為100ms。可見,在單片機(jī)上控制一個(gè)音符唱多長(zhǎng)可采用循環(huán)延時(shí)的方法來(lái)實(shí)現(xiàn)。首先,我們確定一個(gè)基本時(shí)長(zhǎng)的延時(shí)程序,比如說(shuō)以十六分音符的時(shí)長(zhǎng)為基本延時(shí)時(shí)間,那么,對(duì)于一個(gè)音符,如果它為十六分音符,則只需調(diào)用一次延時(shí)程序,如果它為八分音符,則只需調(diào)用二次延時(shí)程序,如果它為四分音符,則只需調(diào)用四次延時(shí)程序,依次類推。通過(guò)上面關(guān)于一個(gè)音符音調(diào)和節(jié)拍的確定方法,我們就可以在單片機(jī)上實(shí)現(xiàn)演奏音樂(lè)了。具體的實(shí)現(xiàn)方法為:將樂(lè)譜中的每個(gè)音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲(chǔ)器中,通過(guò)程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù)……,如此直到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂(lè)曲。另外,對(duì)于樂(lè)曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為FFH,F(xiàn)FH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂(lè)曲結(jié)束用節(jié)拍參數(shù)為00H來(lái)表示。下面給出部分音符(三個(gè)八度音)的頻率以及以單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)器高低計(jì)數(shù)器的予置初值 : C調(diào)音符 頻率Hz 262 277 293 311 329 349 370 392 415 440 466 494TH/TL F88B F8F2 F95B F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FC0BC調(diào)音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7頻率Hz 523 553 586 621 658 697 739 783 830 879 931 987TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05C調(diào)音符 頻率Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1971TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02
上傳時(shí)間: 2013-10-20
上傳用戶:哈哈haha
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過(guò)為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過(guò)輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問(wèn)的第一步就是打開一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開一個(gè)設(shè)備的句柄為了打開一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對(duì)象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類KunitizedName來(lái)構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開句柄用這種方式打開一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫(kù)提供兩個(gè)助手類來(lái)使獲得對(duì)該接口的訪問(wèn)容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來(lái)打開設(shè)備。下面用一個(gè)小例子來(lái)顯示這些類最基本的使用方法: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;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來(lái)產(chǎn)生到設(shè)備對(duì)象的IRPs。下面的表顯示了這種對(duì)應(yīng)關(guān)系。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 需要解釋一下設(shè)備類成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對(duì)象。這使得多個(gè)句柄可以映射同一個(gè)文件對(duì)象。當(dāng)這個(gè)文件對(duì)象的最后一個(gè)用戶級(jí)句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒(méi)有任何用戶級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪問(wèn)的時(shí)候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無(wú)效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會(huì)在打開設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒(méi)有特權(quán)的用戶企圖打開這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對(duì)象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過(guò)調(diào)用Kirp::Mdl來(lái)存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過(guò)KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來(lái)對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒(méi)有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來(lái)存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來(lái)構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對(duì)應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):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,系統(tǒng)分配一個(gè)單一的緩沖來(lái)作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過(guò)調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過(guò)調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪問(wèn)通過(guò)調(diào)用KIrp::Mdl來(lái)實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫訪問(wèn)權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來(lái)配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來(lái)定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執(zhí)行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅(qū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來(lái)如下所示: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 . . . } }
標(biāo)簽: 驅(qū)動(dòng)程序 應(yīng)用程序 接口
上傳時(shí)間: 2013-10-17
上傳用戶:gai928943
微型計(jì)算機(jī)課程設(shè)計(jì)論文—通用微機(jī)發(fā)聲程序的匯編設(shè)計(jì) 本文講述了在微型計(jì)算機(jī)中利用可編程時(shí)間間隔定時(shí)器的通用發(fā)聲程序設(shè)計(jì),重點(diǎn)講述了程序的發(fā)聲原理,節(jié)拍的產(chǎn)生,按節(jié)拍改變的動(dòng)畫程序原理,并以設(shè)計(jì)一個(gè)簡(jiǎn)單的樂(lè)曲評(píng)分程序?yàn)橐樱治龀绦蛟O(shè)計(jì)的細(xì)節(jié)。關(guān)鍵字:微機(jī) 8253 通用發(fā)聲程序 動(dòng)畫技術(shù) 直接寫屏 1. 可編程時(shí)間間隔定時(shí)器8253在通用個(gè)人計(jì)算機(jī)中,有一個(gè)可編程時(shí)間間隔定時(shí)器8253,它能夠根據(jù)程序提供的計(jì)數(shù)值和工作方式,產(chǎn)生各種形狀和各種頻率的計(jì)數(shù)/定時(shí)脈沖,提供給系統(tǒng)各個(gè)部件使用。本設(shè)計(jì)是利用計(jì)算機(jī)控制發(fā)聲的原理,編寫演奏樂(lè)曲的程序。 在8253/54定時(shí)器內(nèi)部有3個(gè)獨(dú)立工作的計(jì)數(shù)器:計(jì)數(shù)器0,計(jì)數(shù)器1和計(jì)數(shù)器2,每個(gè)計(jì)數(shù)器都分配有一個(gè)斷口地址,分別為40H,41H和42H.8253/54內(nèi)部還有一個(gè)公用的控制寄存器,端地址為43H.端口地址輸入到8253/54的CS,AL,A0端,分別對(duì)3個(gè)計(jì)數(shù)器和控制器尋址. 對(duì)8353/54編程時(shí),先要設(shè)定控制字,以選擇計(jì)數(shù)器,確定工作方式和計(jì)數(shù)值的格式.每計(jì)數(shù)器由三個(gè)引腳與外部聯(lián)系,見教材第320頁(yè)圖9-1.CLK為時(shí)鐘輸入端,GATE為門控信號(hào)輸入端,OUT為計(jì)數(shù)/定時(shí)信號(hào)輸入端.每個(gè)計(jì)數(shù)器中包含一個(gè)16位計(jì)數(shù)寄存器,這個(gè)計(jì)數(shù)器時(shí)以倒計(jì)數(shù)的方式計(jì)數(shù)的,也就是說(shuō),從計(jì)數(shù)初值逐次減1,直到減為0為止. 8253/54的三個(gè)計(jì)數(shù)器是分別編程的,在對(duì)任一個(gè)計(jì)數(shù)器編程時(shí),必須首先講控制字節(jié)寫入控制寄存器.控制字的作用是告訴8253/54選擇哪個(gè)計(jì)數(shù)器工作,要求輸出什么樣的脈沖波形.另外,對(duì)8253/54的初始化工作還包括,向選定的計(jì)數(shù)器輸入一個(gè)計(jì)數(shù)初值,因?yàn)檫@個(gè)計(jì)數(shù)值可以是8為的,也可以是16為的,而8253/5的數(shù)據(jù)總線是8位的,所以要用兩條輸出指令來(lái)寫入初值.下面給出8253/54初始化程序段的一個(gè)例子,將計(jì)數(shù)器2設(shè)定為方式3,(關(guān)于計(jì)數(shù)器的工作方式參閱教材第325—330頁(yè))計(jì)數(shù)初值為65536. MOV AL,10110110B ;選擇計(jì)數(shù)器2,按方式3工作,計(jì)數(shù)值是二進(jìn)制格式 OUT 43H,AL ; j將控制字送入控制寄存器 MOV AL,0 ;計(jì)數(shù)初值為0 OUT 42H,AL ;將計(jì)數(shù)初值的低字節(jié)送入計(jì)數(shù)器2 OUT 42H,AL ;將計(jì)數(shù)初值的高字節(jié)送入計(jì)數(shù)器2 在IBM PC中8253/54的三個(gè)時(shí)鐘端CLK0,CLK1和CLK2的輸入頻率都是1.1931817MHZ. PC機(jī)上的大多數(shù)I/O都是由主板上的8255(或8255A)可編程序外圍接口芯片(PPI)管理的.關(guān)于8255A的結(jié)構(gòu)和工作原理及應(yīng)用舉例參閱教材第340—373頁(yè).教材第364頁(yè)的”PC/XT機(jī)中的揚(yáng)聲器接口電路”一節(jié)介紹了揚(yáng)聲器的驅(qū)動(dòng)原理,并給出了通用發(fā)聲程序.本設(shè)計(jì)正是基于這個(gè)原理,通過(guò)編程,控制加到揚(yáng)聲器上的信號(hào)的頻率,奏出樂(lè)曲的.2.發(fā)聲程序的設(shè)計(jì)下面是能產(chǎn)生頻率為f的通用發(fā)聲程序:MOV AL, 10110110B ;8253控制字:通道2,先寫低字節(jié),后寫高字節(jié) ;方式3,二進(jìn)制計(jì)數(shù)OUT 43H, AL ;寫入控制字MOV DX, 0012H ;被除數(shù)高位MOV AX, 35DEH ;被除數(shù)低位 DIV ID ;求計(jì)數(shù)初值n,結(jié)果在AX中OUT 42H, AL ;送出低8位MOV AL, AHOUT 42H,AL ;送出高8位IN AL, 61H ;讀入8255A端口B的內(nèi)容MOV AH, AL ;保護(hù)B口的原狀態(tài)OR AL, 03H ;使B口后兩位置1,其余位保留OUT 61H,AL ;接通揚(yáng)聲器,使它發(fā)聲
標(biāo)簽: 微型計(jì)算機(jī) 發(fā)聲程序 論文 微機(jī)
上傳時(shí)間: 2013-10-17
上傳用戶:sunjet
蟲蟲下載站版權(quán)所有 京ICP備2021023401號(hào)-1