微型計(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)單的樂曲評(píng)分程序?yàn)橐?,分析程序設(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端,分別對(duì)3個(gè)計(jì)數(shù)器和控制器尋址. 對(duì)8353/54編程時(shí),先要設(shè)定控制字,以選擇計(jì)數(shù)器,確定工作方式和計(jì)數(shù)值的格式.每計(jì)數(shù)器由三個(gè)引腳與外部聯(lián)系,見教材第320頁圖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ù)的,也就是說,從計(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位的,所以要用兩條輸出指令來寫入初值.下面給出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)聲器上的信號(hào)的頻率,奏出樂曲的.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
樂曲發(fā)聲及動(dòng)畫程序 ;*********************************; 通用微機(jī)發(fā)聲程序及動(dòng)畫顯示; Power BY WJZ;; 編譯環(huán)境 : 未來匯編1.0 編譯內(nèi)核: TASM 4.1; COPYRIGHT (C) 2005;; 本程序?yàn)?004學(xué)年度,廣東工業(yè)大學(xué)2002屆工業(yè)工程2班; 伍健柱的微機(jī)課程設(shè)計(jì)作業(yè),引用須保留版權(quán)信息;**********************************
上傳時(shí)間: 2013-10-14
上傳用戶:名爵少年
T2作為波特率控制UART_RXD 是硬中斷0或1口,如果能進(jìn)入中斷,說明該線有一個(gè)起始位產(chǎn)生,進(jìn)入中斷后調(diào)用下面的接收程序。退出硬中斷之前還需要將硬中斷標(biāo)志重新復(fù)位。UART_TXD 是任何其它IO即可。UART_SEND: PUSH IE PUSH DPH PUSH DPL PUSH PSW PUSH 00H PUSH ACC CLR EA SETB UART_TXD ;START BIT MOV R0,A CLR TR2 ;TR2置1,計(jì)數(shù)器2啟動(dòng),時(shí)間計(jì)數(shù)啟動(dòng)。 MOV A,RCAP2L;計(jì)數(shù)器2重新裝載值 MOV TL2,A ;置計(jì)數(shù)器2初值 ;T2需要重新裝載 MOV A,DPH MOV A,RCAP2H MOV TH2,A MOV A,R0 SETB TR2 ;TR2置1,計(jì)數(shù)器 JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2
上傳時(shí)間: 2014-01-12
上傳用戶:二十八號(hào)
1、程序的基本格式先介紹二條偽指令:EQU ——標(biāo)號(hào)賦值偽指令ORG ——地址定義偽指令PIC16C5X在RESET后指令計(jì)算器PC被置為全“1”,所以PIC16C5X幾種型號(hào)芯片的復(fù)位地址為:PIC16C54/55:1FFHPIC16C56:3FFHPIC16C57/58:7FFH一般來說,PIC的源程序并沒有要求統(tǒng)一的格式,大家可以根據(jù)自己的風(fēng)格來編寫。但這里我們推薦一種清晰明了的格式TITLE This is ⋯⋯ ;程序標(biāo)題;--------------------------------------;名稱定義和變量定義;--------------------------------------F0 EQU 0RTCC EQU 1PC EQU 2STATUS EQU 3FSR EQU 4RA EQU 5RB EQU 6RC EQU 7┋PIC16C54 EQU 1FFH ;芯片復(fù)位地址PIC16C56 EQU 3FFHPIC16C57 EQU 7FFH;-----------------------------------------ORG PIC16C54 GOTO MAIN ;在復(fù)位地址處轉(zhuǎn)入主程序ORG 0 ;在0000H開始存放程序;-----------------------------------------;子程序區(qū);-----------------------------------------DELAY MOVLW 255┋RETLW 0;------------------------------------------;主程序區(qū);------------------------------------------MAINMOVLW B‘00000000’TRIS RB ;RB已由偽指令定義為6,即B口┋LOOPBSF RB,7 CALL DELAYBCF RB,7 CALL DELAY┋GOTO LOOP;-------------------------------------------END ;程序結(jié)束注:MAIN標(biāo)號(hào)一定要處在0頁面內(nèi)。2、程序設(shè)計(jì)基礎(chǔ)
標(biāo)簽: PIC 單片機(jī)程序設(shè)計(jì)
上傳時(shí)間: 2013-11-14
上傳用戶:cjf0304
24c16讀寫驅(qū)動(dòng)程序,//=-------------------------------------------------------------------------------/*模塊調(diào)用:讀數(shù)據(jù):read(unsigned int address)寫數(shù)據(jù):write(unsigned int address,unsigned char dd) dd為要寫的 數(shù)據(jù)字節(jié)*///------------------------------------------------------------------------------ sbit sda=P3^0;sbit scl=P3^1; sbit a0=ACC^0; //定義ACC的位,利用ACC操作速度最快sbit a1=ACC^1;sbit a2=ACC^2;sbit a3=ACC^3;sbit a4=ACC^4;sbit a5=ACC^5;sbit a6=ACC^6;sbit a7=ACC^7; //------------------------------------------------------------------------------#pragma disablevoid s24(void) //起始函數(shù){_nop_(); scl=0; sda=1; scl=1; _nop_(); sda=0; _nop_(); _nop_(); scl=0; _nop_(); _nop_(); sda=1;} //------------------------------------------------------------------------------#pragma disablevoid p24(void) //停止函數(shù){sda=0; scl=1; _nop_(); _nop_(); sda=1;} //-----------------------------------------------------------------------------#pragma disableunsigned char rd24(void) /////////////////從24c16讀一字節(jié)數(shù)據(jù){ ACC=0x00;sda=1;scl=1;a7=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a6=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a5=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a4=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a3=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a2=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a1=sda;_nop_();_nop_();_nop_();_nop_();scl=0;scl=1;a0=sda;_nop_();_nop_();_nop_();_nop_();scl=0;sda=1;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0; /// ///////////////24c16的一位回答位。return(ACC);}//------------------------------------------------------------------------------#pragma disablevoid wd24(unsigned char dd) ////////////////向24c16寫一字節(jié)數(shù)據(jù){ sda=1;ACC=dd;sda=a7;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a6;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a5;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a4;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a3;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a2;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a1;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=a0;scl=1;_nop_();_nop_();_nop_();_nop_();scl=0;sda=0;scl=1;//scl=0;(在下面程序中)}//---------------------------------------------------------------------------#pragma disableunsigned char read(unsigned int address){unsigned char dd; s24(); ////////////////////////開始條件 wd24(0xa0); /////////////////////////寫器件地址(寫命令) _nop_();_nop_();_nop_();_nop_(); scl=0; ///////////////////////////////////接收器件地址確認(rèn)信號(hào) wd24(address); //////////////////////////// 寫數(shù)據(jù)地址 _nop_();_nop_();_nop_();_nop_(); scl=0;s24(); ///////////////////////////////////開始條件 wd24(0xa1); /////////////////////////////寫器件地址(讀命令) scl=0; dd=rd24(); //////////////////////////////////讀 一字節(jié) p24(); ////////////////////////////////////停止條件 return(dd);}//------------------------------------------------------------------------------#pragma disablevoid write(unsigned int address,unsigned char dd){s24(); /////////////////開始條件 wd24(0xa0); ////////////////////////寫器件地址; scl=0; wd24(address); /////////////////////寫數(shù)據(jù)地址 scl=0; wd24(dd); //////////////////////////寫dd數(shù)據(jù) scl=0; p24(); /////////////////////////停止條件; }
標(biāo)簽: 24c16 讀寫 驅(qū)動(dòng)程序
上傳時(shí)間: 2013-11-18
上傳用戶:墻角有棵樹
單片機(jī)匯編語言程序庫內(nèi)容有運(yùn)算子程序,通訊子程序,擴(kuò)展接口程序,中斷服務(wù)子程序,代碼轉(zhuǎn)換,邏輯操作,數(shù)據(jù)結(jié)構(gòu),其他。
上傳時(shí)間: 2013-10-09
上傳用戶:libinxny
;片內(nèi)RAM初始化子程序 IBCLR :MOV A,R0 MOV R1,A CLR AIBC1 :MOV @R1,A INC R1 DJNZ R7,IBC1 RET ;片外RAM初始化子程序 EBCLR1 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A CLR CEBC11 :MOVX @DPTR,A INC DPTR DJNZ R7,EBC11 RET ;片外RAM初始化子程序(雙字節(jié)個(gè)單元) EBCLR2 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A MOV A,R7 JZ EBC21 INC R6EBC21 :CLR A MOVX @DPTR,A INC DPTR DJNZ R7,EBC21 DJNZ R6,EBC21 RET ;內(nèi)部RAM數(shù)據(jù)復(fù)制程序;入口 :R0,R7;占用資源:A;堆棧需求:2字節(jié);出口 :R1 IBMOV :MOV A,R0 ADD A,R7 MOV R0,A MOV A,R1 ADD A,R7 MOV R1,AIBM1 :DEC R0 DEC R1 MOV A,@R0 MOV @R1,A DJNZ R7,IBM1 RET ;外部RAM數(shù)據(jù)復(fù)制程序;入口 :ADDPH,ADDPL,R7;占用資源:ACC;堆棧需求:2字節(jié);出口 :R0,R1 EBMOV1 :MOV A,ADDPL ADD A,R7 MOV DPL,A CLR A ADDC A,ADDPH MOV DPH,A MOV A,R7 ADD A,R1 XCH A,R0 ADDC A,#00H MOV P2,AEBM11 :DEC R0 CJNE R0,#0FFH,EBM12 DEC P2EBM12 :DEC DPL MOV A,DPL CJNE A,#0FFH,EBM13 DEC DPHEBM13 :MOVX A,@R0 MOVX @DPTR,A DJNZ R7,EBM11 RET ;外部RAM數(shù)據(jù)復(fù)制程序
上傳時(shí)間: 2013-10-30
上傳用戶:bs2005
子程序庫的使用方法如下:1.將子程序庫全部?jī)?nèi)容鏈接在應(yīng)用程序之后,統(tǒng)一編譯即可。優(yōu)點(diǎn)是簡(jiǎn)單方便,缺點(diǎn)是程序太長,大量無關(guān)子程序也包含在其中。 2.僅將子程序庫中的有關(guān)部分內(nèi)容鏈接在應(yīng)用程序之后,統(tǒng)一編譯即可。有些子程序需要調(diào)用一些低級(jí)子程序,這些低級(jí)子程序也應(yīng)該包含在內(nèi)。優(yōu)點(diǎn)是程序緊湊,缺點(diǎn)是需要對(duì)子程序庫進(jìn)行仔細(xì)刪節(jié)。MCS-51 浮點(diǎn)運(yùn)算子程序庫及其使用說明本浮點(diǎn)子程序庫有三個(gè)不同層次的版本,以便適應(yīng)不同的應(yīng)用場(chǎng)合: 1.小型庫(FQ51A.ASM):只包含浮點(diǎn)加、減、乘、除子程序。 2.中型庫(FQ51B.ASM):在小型庫的基礎(chǔ)上再增加絕對(duì)值、倒數(shù)、比較、平方、開平方、 數(shù)制轉(zhuǎn)換等子程序。 3.大型庫(FQ51.ASM):包含本說明書中的全部子程序。 為便于讀者使用本程序庫,先將有關(guān)約定說明如下: 1.雙字節(jié)定點(diǎn)操作數(shù):用[R0]或[R1]來表示存放在由R0或R1指示的連續(xù)單元中的數(shù) 據(jù),地址小的單元存放高字節(jié)。如果[R0]=1234H,若(R0)=30H,則(30H)=12H,(31H)=34H。 2.二進(jìn)制浮點(diǎn)操作數(shù):用三個(gè)字節(jié)表示,第一個(gè)字節(jié)的最高位為數(shù)符,其余七位為 階碼(補(bǔ)碼形式),第二字節(jié)為尾數(shù)的高字節(jié),第三字節(jié)為尾數(shù)的低字節(jié),尾數(shù)用雙字節(jié) 純小數(shù)(原碼)來表示。
標(biāo)簽: 51單片機(jī) 浮點(diǎn) 程序庫
上傳時(shí)間: 2013-10-15
上傳用戶:wmwai1314
§4-1 程序設(shè)計(jì)語言計(jì)算機(jī)程序設(shè)計(jì)語言是指計(jì)算機(jī)能夠理解和執(zhí)行的語言。 程序設(shè)計(jì)語言的種類很多,歸納起來有三種: 機(jī)器語言、匯編語言和高級(jí)語言。 編程時(shí)采用哪種語言由程序設(shè)計(jì)語言的特點(diǎn)和適用場(chǎng)合決定。 機(jī)器語言、匯編語言和高級(jí)語言比較一覽表§4-2 匯編語言源程序格式匯編語言源程序格式如下:1、匯編語言源程序由一條一條匯編語句組成。2、每條匯編語句獨(dú)占一行,以CR—LF結(jié)束。3、典型的匯編語句由四部分組成: 標(biāo)號(hào):操作碼 操作數(shù);注釋§4-3 偽指令一、偽指令與指令的區(qū)別: 偽指令由匯編程序識(shí)別,用來對(duì)匯編過程進(jìn)行某種控制,或者對(duì)符號(hào)、標(biāo)號(hào)賦值。在匯編過程中, 偽指令不產(chǎn)生可執(zhí)行的目標(biāo)代碼;而指令由CPU執(zhí)行,在匯編過程中,產(chǎn)生可執(zhí)行的目標(biāo)代碼,完成對(duì)數(shù)據(jù)的運(yùn)算與處理。二、常用的偽指令:ORG END EQU DATA DB DW DS §4-4 匯編語言程序設(shè)計(jì)基礎(chǔ)一、匯編語言程序設(shè)計(jì)的一般步驟 分析課題 確定算法 畫流程圖 編寫程序 上機(jī)調(diào)試二、程序結(jié)構(gòu) 按程序的走向可以將程序分成4種結(jié)構(gòu): 簡(jiǎn)單程序 分支程序 循環(huán)程序 子程序
標(biāo)簽: 匯編語言 程序設(shè)計(jì)
上傳時(shí)間: 2013-10-15
上傳用戶:daoxiang126
微機(jī)原理與匯編語言程序設(shè)計(jì)課件為PPT文件,內(nèi)容有:第1章 基礎(chǔ)知識(shí) 4第2章 微型計(jì)算機(jī)系統(tǒng)結(jié)構(gòu) 6第3章 程序加載并執(zhí)行 4第4章 微處理器一般指令 6第5章 匯編語言程序設(shè)計(jì)基礎(chǔ) 4第6章 算術(shù)運(yùn)算與邏輯運(yùn)算 8第7章 基本輸入與輸出 4第8章 程序流程控制 10第9章 字符串處理 6第10章 宏 4第11章 過程 4第12章 文件處理 4第13章 模塊化程序設(shè)計(jì) 4
標(biāo)簽: 微機(jī)原理 匯編語言 程序設(shè)計(jì)
上傳時(shí)間: 2013-10-28
上傳用戶:yanming8525826
蟲蟲下載站版權(quán)所有 京ICP備2021023401號(hào)-1