微型計(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è)簡單的樂曲評分程序?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ā)聲的原理,編寫演奏樂曲的程序。 在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端,分別對3個(gè)計(jì)數(shù)器和控制器尋址. 對8353/54編程時(shí),先要設(shè)定控制字,以選擇計(jì)數(shù)器,確定工作方式和計(jì)數(shù)值的格式.每計(jì)數(shù)器由三個(gè)引腳與外部聯(lián)系,見教材第320頁圖9-1.CLK為時(shí)鐘輸入端,GATE為門控信號輸入端,OUT為計(jì)數(shù)/定時(shí)信號輸入端.每個(gè)計(jì)數(shù)器中包含一個(gè)16位計(jì)數(shù)寄存器,這個(gè)計(jì)數(shù)器時(shí)以倒計(jì)數(shù)的方式計(jì)數(shù)的,也就是說,從計(jì)數(shù)初值逐次減1,直到減為0為止. 8253/54的三個(gè)計(jì)數(shù)器是分別編程的,在對任一個(gè)計(jì)數(shù)器編程時(shí),必須首先講控制字節(jié)寫入控制寄存器.控制字的作用是告訴8253/54選擇哪個(gè)計(jì)數(shù)器工作,要求輸出什么樣的脈沖波形.另外,對8253/54的初始化工作還包括,向選定的計(jì)數(shù)器輸入一個(gè)計(jì)數(shù)初值,因?yàn)檫@個(gè)計(jì)數(shù)值可以是8為的,也可以是16為的,而8253/5的數(shù)據(jù)總線是8位的,所以要用兩條輸出指令來寫入初值.下面給出8253/54初始化程序段的一個(gè)例子,將計(jì)數(shù)器2設(shè)定為方式3,(關(guān)于計(jì)數(shù)器的工作方式參閱教材第325—330頁)計(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頁.教材第364頁的”PC/XT機(jī)中的揚(yáng)聲器接口電路”一節(jié)介紹了揚(yáng)聲器的驅(qū)動(dòng)原理,并給出了通用發(fā)聲程序.本設(shè)計(jì)正是基于這個(gè)原理,通過編程,控制加到揚(yáng)聲器上的信號的頻率,奏出樂曲的.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
//------------------------------------------------------------------------------------//此程序?yàn)锳DC轉(zhuǎn)換程序,可以選擇向ADC0BUSY寫1或用定時(shí)器0,1,2,3作為ADC的啟動(dòng)信號。////------------------------------------------------------------------------------------//頭文件定義//------------------------------------------------------------------------------------//#include <c8051f330.h> #include <stdio.h> //-----------------------------------------------------------------------------// 定義16位特殊功能寄存器//----------------------------------------------------------------------------- sfr16 ADC0 = 0xbd; sfr16 TMR0RL = 0xca; sfr16 TMR1RL = 0xca; sfr16 TMR2RL =0xca; sfr16 TMR3RL =0xca; sfr16 TMR0 = 0xCC; sfr16 TMR1 = 0xCC; sfr16 TMR2 = 0xcc; sfr16 TMR3 = 0xcc; //-----------------------------------------------------------------------------// 全局變量定義//-----------------------------------------------------------------------------char i;int result; //-----------------------------------------------------------------------------//定義常量//-----------------------------------------------------------------------------#define SYSCLK 49000000 #define SAMPLE_RATE 50000 //------------------------------------------------------------------------------------// 定義函數(shù)//------------------------------------------------------------------------------------void SYSCLK_Init (void);void PORT_Init (void);void Timer0_Init (int counts);void Timer1_Init (int counts);void Timer2_Init (int counts);void Timer3_Init (int counts);void ADC0_Init(void);void ADC0_ISR (void);void ADC0_CNVS_ADC0h(void);//------------------------------------------------------------------------------------// 主程序//------------------------------------------------------------------------------------ void main (void) { int ADCRESULT[50] ; int k; PCA0MD &= ~0x40; // 禁止看門狗 SYSCLK_Init (); PORT_Init (); Timer0_Init (SYSCLK/SAMPLE_RATE); //Timer1_Init (SYSCLK/SAMPLE_RATE); //選擇相應(yīng)的啟動(dòng)方式 //Timer2_Init (SYSCLK/SAMPLE_RATE); //Timer3_Init (SYSCLK/SAMPLE_RATE); ADC0_Init(); EA=1; while(1) { //ADC0_CNVS_ADC0h(); k=ADC0; ADCRESULT[i]=result; //此處設(shè)斷點(diǎn),觀察ADCRESULT的結(jié)果 } }
上傳時(shí)間: 2013-10-13
上傳用戶:SimonQQ
本程序集是Allen I. Holub所寫的《Compiler Design in C》一書的附隨軟件,其中有作者自己編寫的詞法分析和語法分析工具LeX,occs和LLama,該軟件包還包括一個(gè)顯示C語言分析過程的程序
標(biāo)簽: I. Compiler Design Allen
上傳時(shí)間: 2014-01-08
上傳用戶:siguazgb
關(guān)于操作系統(tǒng):本程序可選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個(gè)進(jìn)程進(jìn)行調(diào)度。每個(gè)進(jìn)程處于運(yùn)行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假定起始狀態(tài)都是就緒狀態(tài)W。
標(biāo)簽: finish wait run 進(jìn)程
上傳時(shí)間: 2014-01-27
上傳用戶:1427796291
C程序優(yōu)化 I/O
標(biāo)簽: C程序
上傳時(shí)間: 2014-02-28
上傳用戶:duoshen1989
在Windows NT使用I/O端口,包括裝載,開始,卸載驅(qū)動(dòng)程序的函數(shù).
標(biāo)簽: Windows 端口 函數(shù) 驅(qū)動(dòng)程序
上傳時(shí)間: 2015-02-17
上傳用戶:小草123
本程序的要求是已知幾個(gè)節(jié)點(diǎn)x及節(jié)點(diǎn)函數(shù)f(x),要求近似函數(shù)!只要輸出每點(diǎn)函數(shù),對角線上的值,和最后一行的值,為繼續(xù)插值準(zhǔn)備! 例如:0.00 0.00000 0.20 0.20134 0.30 0.30452 0.50 0.52110 得到結(jié)果:0.00000 0.20134 1.006700 0.30452 0.083666 0.52110 1.082900 0.170333 0.173334 f(0.230000)=0.249337 Rx(0.230000)=-1.46917e-09f
標(biāo)簽: 節(jié)點(diǎn) 程序 函數(shù)
上傳時(shí)間: 2013-12-30
上傳用戶:王慶才
Visual Foxpro開發(fā)之<<學(xué)生管理系統(tǒng)>>,可做學(xué)習(xí)或?qū)W校教學(xué)參考使用
標(biāo)簽: Visual Foxpro 管理系統(tǒng)
上傳時(shí)間: 2013-12-28
上傳用戶:源碼3
程序存儲問題:設(shè)有n 個(gè)程序{1,2,…, n }要存放在長度為L的磁帶上。程序i存放在磁帶上的長度是Li ,1≤i≤n 程序存儲問題要求確定這n 個(gè)程序在磁帶上的一個(gè)存儲方案,使得能夠在磁帶上存儲盡可能多的程序。 編程任務(wù): 對于給定的n個(gè)程序存放在磁帶上的長度,編程計(jì)算磁帶上最多可以存儲的程序數(shù)。 數(shù)據(jù)輸入:由文件input.txt給出輸入數(shù)據(jù)。第一行是正整數(shù)n,表示文件個(gè)數(shù)。接下來的1 行中,有n 個(gè)正整數(shù),表示程序存放在磁帶上的長度。 結(jié)果輸出: input.txt output.txt 6 50 5 2 3 13 8 80 20
上傳時(shí)間: 2013-12-20
上傳用戶:dongqiangqiang
/*最大k乘積問題 問題描述: 設(shè)I是一個(gè)n位十進(jìn)制整數(shù)。如果將I劃分為k段,則可得到k個(gè)整數(shù)。這k個(gè)整數(shù)的乘積稱為I的一個(gè)k乘積 。 試設(shè)計(jì)一個(gè)算法,對于給定的I和k,求出I的最大k乘積(n<=10)。 示例:輸入為 : 4 3 結(jié)果:1234 */
上傳時(shí)間: 2013-12-14
上傳用戶:caixiaoxu26
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1