第一篇:微機原理課程設(shè)計音樂跑馬燈程序
dseg segment numdw 0
num1dw 0
data1db 0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,7Fh data2db 7Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEh data3db 7Eh,0BDh,0DBh,0E7h,0E7h,0DBh,0BDh,7Eh
data4db 0fch,0f9h,0f3h,0e7h,0e7h,0cfh,09fh,03fh data5db 03fh,09fh,0cfh,0e7h,0e7h,0f3h,0f9h,0fch
dseg ends
code segment assumecs:code,ds:dseg start:
movax,dseg movds,ax mov dx,406h mov al,36h outdx,al mov ax,20000 mov dx,400h outdx,al moval,ah mov dx,400h out dx,al;初始化8253 mov dx,0206h
;取8255A的控制端口的地址
mov al,8bh
;初始化8255A的A口為輸出模式,B口為輸入模式,c輸入 outdx,al mov dx,0200h
;取8255的端口A的地址 mov al,0FFh
;使8255的PA0-PA7全為1 outdx,al mov dx,0202h
;取8255的端口B的地址 in al,dx
;檢測B口輸入信號 mov dx,0200h
;取8255的端口A的地址 mov al,0FFh
;使8255的PA0-PA7全為1 out dx,al
;使所有的燈LED全滅
ledflashproc
;檢測開關(guān)閉合,以便確定哪種閃爍方式
mov dx,0202h
;取8255A的端口B的地址
in al,dx
;檢測B口輸入信號 choice1:
incnum
;改變數(shù)字變量的值 cmp num,09h je exit
call delay jmpledflash exit:
mov num,0 jmpledflash ret ledflashendp
delayproc near dl4: mov dx,0204h inal,dx and al,01h cmp al,1
jz dl4
ret
delay endp
code ends end start
第二篇:微機原理課程設(shè)計跑馬燈
微機原理課程設(shè)計走馬燈
運用8086最小模式和8255等芯片設(shè)計出一個跑馬燈電路,要求至少有5中花式,在ISIS 7 Professional軟件中運行。
設(shè)計電路圖如圖所示:
源代碼
DATA SEGMENT DATA ENDS CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START :MOV AX,DATA
MOV DS,AX
MOV AL,10010000B
OUT 96H,AL
A0:
IN AL,90H
NOT AL
MOV BL,AL
OUT 92H,AL
CMP AL,1
JNZ A3
A2:
MOV DL,AL
;第一個開關(guān)實現(xiàn)從上至下的流水
OUT 92H,AL
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
MOV CX,50000
A1:
LOOP A1
MOV AL,DL
ROL AL,1
JMP A2
A3:
CMP AL,2
JNZ A6
MOV AL,80H
A5:
MOV DL,AL
OUT 92H,AL
MOV CX,50000
A4:
LOOP A4
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
;實現(xiàn)第二個開關(guān)從下至上的流水
MOV AL,DL
ROR AL,1
JMP A5
A6:
CMP AL,4
;第三個開關(guān)實現(xiàn)相隔的兩個燈自上而下流水
JNZ A9
MOV AL, 05H
A8:
MOV DL,AL
OUT 92H,AL
MOV CX,20000
A7:
LOOP A7
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
MOV AL,DL
ROL AL,1
JMP A8
A9:
CMP AL,8
;第四個開關(guān)實現(xiàn)相隔的兩個燈從下而上流水
JNZ A12
MOV AL,0A0H
A11: MOV DL,AL
OUT 92H,AL
MOV CX,20000
A10: LOOP A10
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
MOV AL,DL
ROR AL,1
JMP A11
A12:
CMP AL,10H
JNZ A17 A16:
MOV AL,18H;第五個開關(guān)實現(xiàn)從中間向兩邊流水
A14:
MOV DL,AL
OUT 92H,AL
MOV CX,20000 A13:
LOOP A13
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
MOV AL,DL
CMP AL,81H
JZ A16
AND AL,0F0H
MOV CX,0
MOV CH,AL
ROL CH,1
MOV AL,DL
AND AL,0FH
MOV CL,AL
ROR CL,1
ADD CH,CL
MOV AL,CH
JMP A14 A17:
CMP AL,20H;第六個開關(guān)實現(xiàn)從兩邊向中間流水
JNZ A0 A19:
MOV AL,81H A20:
MOV DL,AL
OUT 92H,AL
MOV CX,20000 A18:
LOOP A18
IN AL,90H
NOT AL
CMP AL,BL
JNZ A0
MOV AL,DL
CMP AL,18H
JZ A19
AND AL,0F0H
MOV CX,0
MOV CH,AL
ROR CH,1
MOV AL,DL
AND AL,0FH
MOV CL,AL
ROL CL,1
ADD CH,CL
MOV AL,CH
JMP A20
RET
CODE ENDS
END START 運行后程序如圖所示:
第三篇:微機原理微機原理課程設(shè)計程序.asm
微機原理課程設(shè)計程序
CODE
SEGMENT
ASSUME
CS:CODE;初始化8255A,A口工作方式0,輸出 START: MOV
DX,63H
MOV
AL,08BH
MOV
BL,OAH
OUT
DX,AL DY:
MOV
CX,30C4H;置定時外循環(huán)初始值 MM:
MOV
BH,0AH;置定時內(nèi)循環(huán)初始值
DEC
LP:
MOV
IN
DEC
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
JMP
LP1:
MOV
MOV
JMP
LP2:
MOV
MOV
JMP
LP3:
MOV
MOV
CX DX,62H AL,DX;讀取C口值 BH BH,00H MM CX,0000H XD;轉(zhuǎn)向剩余時間顯示程序 AL,00H;判斷是否有鍵按下 LP AL,01H;判斷是否是1號鍵按下 LP1 AL,02H;判斷是否是2號鍵按下 LP2 AL,04H;判斷是否是3號鍵按下 LP3 AL,08H;判斷是否是4號鍵按下 LP4 AL,10H;判斷是否是5號鍵按下 LP5 AL,20H;判斷是否是6號鍵按下 LP6 AL,40H;判斷是否是7號鍵按下 LP7 AL,80H;判斷是否是8號鍵按下 LP8 LP AL,86H AH,01H EN
;顯示1號搶答成功者并鋒鳴
AL,0CBH AL,02H EN
;顯示2號搶答成功者并鋒鳴
AL,0CFH AH,0CFH
JMP
EN
;顯示3號搶答成功者并鋒鳴 LP4:
MOV
AL,0E6H
MOV
AH,08H
JMP
EN
;顯示4號搶答成功者并鋒鳴 LP5:
MOV
AL,0EDH
MOV
AH,10H
JMP
EN
;顯示5號搶答成功者并鋒鳴 LP6:
MOV
AL,0FDH
MOV
AH,20H
JMP
LP7:
MOV
MOV
JMP
LP8:
MOV
MOV
JMP
EN:
MOV
OUT
MOV
MOV
OUT
JMP
XD:
DEC
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
CMP
JZ
XD9:
MOV EN
;顯示6號搶答成功者并鋒鳴 AL,87H AH,40H EN
;顯示7號搶答成功者并鋒鳴 AL,0FFH AH,80H EN
;顯示8號搶答成功者并鋒鳴 DX,60H DX,AL DX,61H AL,AH DX,AL MD BL
;判斷剩余時間并轉(zhuǎn)向顯示程序 BL,09H XD9 BL,08H XD8 BL,07H XD7 BL,06H XD6 BL,05H XD5 BL,04H XD4 BL,03H XD3 BL,02H XD2 BL,01H XD1 BL,00H XD0 AL,6FH;顯示剩余9秒
JMP
EN1 XD8:
MOV
AL,7FH;顯示剩余8秒
JMP
EN1 XD7:
MOV
AL,07FH;顯示剩余7秒
JMP
EN1 XD6:
MOV
AL,7DH;顯示剩余6秒
JMP
EN1 XD5:
MOV
AL,6DH;顯示剩余5秒
JMP
EN1 XD4:
MOV
JMP
XD3:
MOV
JMP
XD2:
MOV
JMP
XD1:
MOV
JMP
XD0:
MOV
JMP
EN1:
MOV
OUT
CMP
JZ
JMP
MD:
MOV
IN
CMP
JZ
JMP
MOV
INT
CODE
ENDS
END
AL,66H;顯示剩余4秒
EN1 AL,4FH;顯示剩余3秒
EN1 AL,4BH;顯示剩余2秒
EN1 AL,06H;顯示剩余1秒
EN1 AL,3FH;顯示剩余0秒,結(jié)束。
EN1 DX,60H DX,AL AL,3FH MD DY DX,61H;一定時間后,若再有輸入,則轉(zhuǎn)向某剩余時間AL,DX AL,00H MD DY AH,4CH 21H START
第四篇:微機原理課程設(shè)計——音樂播放器
一. 課程設(shè)計目的
1.通過D/A裝換器產(chǎn)生模擬信號,使PC機作為簡易音樂播放器。2.了解利用數(shù)模轉(zhuǎn)換器產(chǎn)生音樂的基本方法。
二.課程設(shè)計任務(wù)
設(shè)計并實現(xiàn)一個鍵控音樂播放器。要求:
(1)自己選用合適的芯片,不少于兩種。
(2)自行設(shè)計電路并使用匯編語言編寫程序完成鍵控音樂播放器功能。
(3)該播放器有若干首歌曲可以選擇,開始時輸出說明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進(jìn)行播放、退出或出錯提示。
三、總體設(shè)計方案
1、總體設(shè)計方案一
所有音樂都是由各個不同頻率的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。而我們學(xué)過的有計數(shù)器可以產(chǎn)生各種頻率,所以我們主要采用計數(shù)器8253產(chǎn)生各音符,用8255并行接口來控制揚聲器的開關(guān),達(dá)到播放音樂的功能。
2、總體設(shè)計方案二
可以使用0832(數(shù)模轉(zhuǎn)換器)來產(chǎn)生頻率,原理圖:
更連續(xù),效果更好點。
提出這個方案是因為我想產(chǎn)生模擬信號,來驅(qū)動揚聲器,這樣產(chǎn)生的聲音更加圓潤感覺我們想把一個周期的波形分成32份,然后每份給8253一個值讓他轉(zhuǎn)換成模擬信號,不同的頻率可以用8253計數(shù)器控制,比如要產(chǎn)生261Hz的頻率,使用1MHz的話,周期就為1/261=3.83ms,分成32份,每份間隔時間就是3.83ms/32=0.12ms,換句話說就是送計數(shù)器0的初值為1M/261/32=120次。
3、各個音符的對應(yīng)頻率表:
音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253
四.部分電路設(shè)計及功能解說
1、頻率發(fā)生電路
使用8253產(chǎn)生音符頻率。8253采用方式3,產(chǎn)生方波信號,根據(jù)輸入計數(shù)初值的不同產(chǎn)生不同頻率的方波信號來驅(qū)動揚聲器。
2、揚聲器開關(guān)控制電路
使用8255并行接口芯片來控制揚聲器的開和關(guān),PC0始終接低電平,PA0和8253的OUT0接在與門上,這樣只有PA0=1時揚聲器才有可能開通,否則不發(fā)聲。關(guān)閉的方法是,從PC口讀入數(shù)據(jù)再從PA口輸出;而開揚聲器時只要在輸出PA口數(shù)據(jù)前對數(shù)據(jù)進(jìn)行一個取反操作就可以了。
設(shè)某音符頻率為fHz,而CLK脈沖是1MHz,則計數(shù)初值N=1M/f。8253的控制端口為28BH,控制字為36H。五.硬件接線圖
六.軟件設(shè)計流程圖
1、總流程圖
開始輸出說明讀取按鍵是‘1’?N是‘2’?Y播放曲1Y播放曲2N是‘3’?Y播放曲3N是‘0’?Y結(jié)束Y選擇無效程序總流程圖
2、音樂播放子程序流程圖
開始保護(hù)現(xiàn)場曲N各音符頻率設(shè)置曲N各音符時間設(shè)置讀取頻率F頻率是-1 ?Y恢復(fù)現(xiàn)場N讀取時間T結(jié)束返回計算機計數(shù)次數(shù)送計數(shù)器,產(chǎn)生該頻率F信號啟動喇叭延時T關(guān)閉喇叭音符間延時播音流程圖
七.程序段功能匯總
1、MAIN程序
MAIN程序是總程序,輸出說明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。
2、PLAY子程序
PLAY子程序是播音子程序,SI指向音節(jié)表中的頻率,BP指向音節(jié)表中的時間。從SI的指向的音節(jié)表中取一個頻率,只要不是-1,即有效就再讀取時間,然后計算計數(shù)初值送入計數(shù)器,產(chǎn)生各種頻率。開啟揚聲器,根據(jù)所取的時間調(diào)用若干次延時子程序。這段時間揚聲器就發(fā)出該頻率的聲音,延時結(jié)束,就關(guān)閉揚聲器,調(diào)用音節(jié)之間的小延時程序。最后修改SI和BP,指向下一個頻率,重復(fù)上面的工作。
3、DELAY子程序和DELAY_OFF子程序
兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。八.程序清單
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0);Resize the stack by changing the number '100' SSEG ENDS
DSEG SEGMENT
;TO DO: Add your program's data here INFO1 DB 0DH,0AH,'--------------------------',0DH,0AH,'THERE ARE 3 SONGS:',0DH,0AH,0DH,0AH,'$' INFO2 DB '1.HAPPY BIRTHDAY',0DH,0AH,'$' INFO3 DB '2.SHEEP',0DH,0AH,'$' INFO4 DB '3.RIVER',0DH,0AH,'$' INFO5 DB '0.EXIT',0DH,0AH,'$' INFO6 DB 'YOU HAVE CHOSEN :$'
INFO7 DB 'THANK YOU FOR YOUR USE',0DH,0AH,'$' INFO8 DB '---------------------------',0DH,0AH,'PRESS THE KEY TO SELECT SONG!',0DH,0AH,'$' INFO9 DB 0DH,0AH,'-------------------',0DH,0AH,'|INVALID SELECTION|',0DH,0AH,'-------------------',0DH,0AH,'$' FREG1 DW 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349
;曲1的頻率
DW 330,294,466,266,440,349,392,349,-1 TIME1 DW
1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4
;曲1的時間 FREG2 DW 330,294,262,294,3 DUP(330)
;曲2的頻率
DW 3 DUP(294),330,392,392 DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262,-1 TIME2 DW 6 DUP(1),2
;曲2的時間
DW 2 DUP(1,1,2)DW 12 DUP(1),4 FREG3 DW 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294 ;曲3的頻率
DW 262,262,220,196,220,262,294,332,262,-1 TIME3 DW 3 DUP(2),1,1,2,1,1,4
;曲3的時間
DW 2 DUP(2,2,1,1),4 DW 3 DUP(2,1,1,1),4 DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG
INIT PROC;Initialize procedure
mov ax, dseg mov ds, ax
mov es, ax;TO DO: Add your initialize code here(as your requirement)ret
;return to the MAIN procedure
INIT ENDP
MAIN PROC
;Here is your program entry point
call INIT;call the INIT procedure to initialize the program
;**TO DO: Add your main code here**
RE: MOV DX,28BH
;關(guān)閉揚聲器
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
LEA DX,INFO1 MOV AH,09H INT 21H LEA DX,INFO2 INT 21H LEA DX,INFO3 INT 21H LEA DX,INFO4 INT 21H LEA DX,INFO5 INT 21H LEA DX,INFO8 INT 21H
MOV AH,01H
INT 21H CMP AL,'1'
JE MUSIC1 CMP AL,'2' JE MUSIC2 CMP AL,'3' JE MUSIC3 CMP AL,'0' JE EXIT
LEA DX,INFO9 MOV AH,09H INT 21H JMP RE
;輸出說明信息
;讀取按鍵
;根據(jù)不同的按鍵播放不同的曲子
;無效選擇,輸出錯誤提示
MUSIC1: MOV SI,OFFSET FREG1
;指向曲1的表
MOV BP,OFFSET TIME1 CALL PLAY JMP RE MUSIC2: MOV SI,OFFSET FREG2
;指向曲2的表
MOV BP,OFFSET TIME2 CALL PLAY JMP RE MUSIC3: MOV SI,OFFSET FREG3
;指向曲3的表
MOV BP,OFFSET TIME3 CALL PLAY JMP RE EXIT: MOV DX,28BH
;關(guān)閉揚聲器
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL LEA DX,INFO7
;輸出歡迎使用信息,增加界面友好度 MOV AH,09H INT 21H mov ax, 4c00h;The end of the program, return to the system MOV AL,89H OUT DX,AL
int 21h
MAIN ENDP
;TO DO: Add other procedures(PROC)here(as your requirement)
;THE PROGRAMME OF PLAYING THE MUSIC
PLAY PROC
;PLAY子程序,功能上面介紹過
L1: MOV BX,DS:[SI]
;取頻率
CMP BX,-1
;看是否有效
JE L0
;無效就退出
MOV CX,DS:[BP]
;讀取時間
MOV DL,CL
;保存時間
ADD DL,30H
MOV AH,02H
INT 21H
MOV DX,0FH
;計算計數(shù)初值,1M的十六進(jìn)制為0F4240H
MOV AX,4240H
DIV BX
MOV BX,AX
MOV DX,283H
;設(shè)置計數(shù)器工作方式
MOV AL,36H
OUT DX,AL
MOV DX,280H
;輸入計數(shù)初值
MOV AX,BX
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX NOT AL MOV DX,288H OUT DX,AL
ROD:CALL DELAY
LOOP ROD
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL CALL DELAY_OFF
ADD SI,2
ADD BP,2
JMP L1
L0: RET
PLAY ENDP
DELAY PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,09FH LL1:MOV CX,0FFFFH
;開揚聲器 ;延時
;關(guān)揚聲器
;延時子程序
;循環(huán)這么多次
;音節(jié)間延時
LOP: LOOP LOP DEC BX JNZ LL1 POP DX
POP CX
POP BX
POP AX
RET
DELAY ENDP
DELAY_OFF PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0FH LL2:MOV CX,0CFFFH LOP2: LOOP LOP2 DEC BX JNZ LL2 POP DX
POP CX
POP BX
POP AX
RET DELAY_OFF ENDP CSEG ENDS;TO DO: Add other segments here(as your requirement)
END MAIN
九.試驗結(jié)果和分析
1、試驗結(jié)果:
程序初始運行界面
如果按錯了鍵,會出現(xiàn)如下界面
如果選擇正確,將出現(xiàn)如下界面:
2、分析
這是按照方案一做的結(jié)果,按1~3分別播放“生日快樂”等歌,但由于本組人對音樂都是外行,各音階頻率的排序和延時時間搭配不好,導(dǎo)致音樂嚴(yán)重走調(diào),但基本能聽出不是噪音。
按照方案二做的電路和程序,無論怎么樣都不出聲,后來我們直接送數(shù)據(jù)到0832產(chǎn)生三角波信號(程序在我們的一次作業(yè)中寫的)。還是無法讓揚聲器發(fā)出聲音,因此按這個方案失敗了。
十.課程設(shè)計總結(jié)和體會
1.實驗過程中碰到了很多的難題和障礙,我認(rèn)識到平時基礎(chǔ)知識的重要性,只有能夠熟練的掌握才能在實驗過程中得心應(yīng)手,否則一步錯則整個試驗都會陷入困境,因而,嚴(yán)謹(jǐn)?shù)膽B(tài)度是試驗成功的重要保障!
2.通過這次課程設(shè)計,我們對各個芯片有了進(jìn)一步的了解,對各個芯片的功能有了更深刻的認(rèn)識和體會,平時上課的理論知識只是停留在理論的層面,只有通過了這樣的試驗才能更好的體會到,做到了理論和實際的相結(jié)合,使理論知識真正運用到了實踐中去。在課程設(shè)計過程中,同組人員之間相互合作,共同研究使我更加堅信了團(tuán)體的力量。在團(tuán)體的共同協(xié)作和努力下,任何的難題都可以被解決!
3.我們大家在實驗的時候都團(tuán)結(jié)合作,遇到問題時候一起探討,增強了我們的合作精神。
十一.參考文獻(xiàn)
1、《〈微機原理與接口技術(shù)〉學(xué)生實驗指導(dǎo)書》 揚州大學(xué) 羅加奇
2、《微機原理及應(yīng)用》 機械工業(yè)出版社 胡鋼 主編
第五篇:微機原理課程設(shè)計音樂播放器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
一、課程設(shè)計的任務(wù)和目的
課程設(shè)計題目:音樂播放器
課程設(shè)計的實現(xiàn)目的:本課程設(shè)計主要是通過匯編語言用軟件編程的方法實現(xiàn)簡單的音樂播放功能。通過在《微機原理與接口技術(shù)》課程上所學(xué)的匯編知識和8253/8254芯片相關(guān)知識,來完成本課程設(shè)計;用匯編程序完成鍵控音樂播放器的,用8253/8254定時器來產(chǎn)生聲音。該播放器有若干首歌曲可以選擇,開始時輸出說明,要用戶選擇要播放的歌曲,然后根據(jù)用戶按鍵進(jìn)行播放、退出或出錯提示。通過課程設(shè)計環(huán)節(jié)來加強對所學(xué)知識的理解和應(yīng)用。
二、課程設(shè)計相關(guān)知識
2.1 定時/計數(shù)器8253/58254
在微機及控制系統(tǒng)中,經(jīng)常要用到定時信號。如系統(tǒng)的日歷時鐘,動態(tài)存儲器刷新。對外部執(zhí)行機構(gòu)控制時也需要定時中斷、定時檢測、定時查詢等。定時的方法主要是兩種:
軟件定時:利用指令的執(zhí)行時間設(shè)計循環(huán)程序,使CPU 執(zhí)行延遲子程序的時間就是定時時間。缺點:執(zhí)行延遲時,CPU 一直被占用,降低了CPU 的效率。
硬件定時:用計數(shù)器/定時器作為主要硬件,在軟件簡單指令的控制下產(chǎn)生精確的時間延遲。突出優(yōu)點為計數(shù)時不占用CPU 時間,如利用定時器/計數(shù)器產(chǎn)生中斷信號,可建立多作業(yè)環(huán)境,提高了CPU 效率。
作為定時器可用8253或者8254,二者功能基本相同,知識工作的最高頻率不一樣。本實驗就采用了8254,其主要功能為:
(1)每片上有3 個獨立的16 位的減計數(shù)器通道。
(2)對于每個計數(shù)器,都可以單獨作為定時器或計數(shù)器使用,并且都可以按照二進(jìn)制或十進(jìn)制來計數(shù)。
(3)每個通道都有6 種工作方式,都可以通過程序設(shè)置或改變。(4)每個計數(shù)器的速率可高達(dá)10MHz。
主要部分有:數(shù)據(jù)總線緩沖器、讀/寫控制邏輯、控制字寄存器、計數(shù)通道0#、1#、2#: 內(nèi)部結(jié)構(gòu)如下圖:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
8254內(nèi)部結(jié)構(gòu)
2.2 8254外部引腳
8254芯片是具有24個引腳的雙列直插式集成電路芯片,其引腳分布如圖所示。8254芯片的24個引腳分為兩組,一組面向CPU,另一組面向外部設(shè)備,各個引腳及其所傳送信號的情況,介紹如下:
8254的引腳
(1)D7~D0:雙向、三態(tài)數(shù)據(jù)線引腳,與系統(tǒng)的數(shù)據(jù)線連接,傳送控制、數(shù)據(jù)及狀態(tài)信息。
(2)RD:來自于CPU的讀控制信號輸入引腳,低電平有效。(3)WR:來自于CPU的寫控制信號輸入引腳,低電平有效。(4)CS:芯片選擇信號輸入引腳,低電平有效。
(5)A1、A0:地址信號輸入引腳,用以選擇8254芯片的通道及控制字寄存器。(6).VCC及GND:+5V電源及接地引腳。
(7)CLKi: i=0,1,2,第i個通道的計數(shù)脈沖輸入引腳,8254規(guī)定,加在CLK引腳的輸入時鐘信號的頻率不得高于2.6MHZ,即時鐘周期不能小于380ns。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
(8)GATEi: i=0,1,2,第i個通道的門控信號輸入引腳,門控信號的作用與通道的工作方式有關(guān)。
(9)OUTi:i=0,1,2,第i個通道的定時/計數(shù)到信號輸出引腳,輸出信號的形式由通道的工作方式確定,此輸出信號可用于觸發(fā)其它電路工作,或作為向CPU發(fā)出的中斷請求信號。
2.3 8254端口地址
8254控制字
說明 :(1)8254每個通道對輸入CLK按二進(jìn)制或二十進(jìn)制從預(yù)置值開始減1計數(shù),減到0時從OUT輸出一個信號。
(2)8254編程時先寫控制字,再寫時間常數(shù)。
2.4 8254工作方式
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
(1)方式0:計數(shù)結(jié)束產(chǎn)生中斷方式
當(dāng)寫入控制字后,OUT變?yōu)榈碗娖?,?dāng)寫入初值后立即開始計數(shù),當(dāng)計數(shù)結(jié)束時,變成高電平。
(2)方式1:可編程單次脈沖方式
當(dāng)初值裝入后且GATE由低變高時,OUT變?yōu)榈碗娖?,計?shù)結(jié)束變?yōu)楦唠娖健?3)方式2:頻率發(fā)生器方式
當(dāng)初值裝入時,OUT變?yōu)楦?;計?shù)結(jié)束,OUT變?yōu)榈?。該方式下如果計?shù)未結(jié)束,但GATE為低時,立即停止計數(shù),強制OUT變高,當(dāng)GATE再變高時,便啟動一次新的計數(shù)周期。
(4)方式3:方波發(fā)生器
當(dāng)裝入初值后,在GATE上升沿啟動計數(shù),OUT 輸出高電平; 當(dāng)計數(shù)完成一半時,OUT輸出低電平。方式3與方式2的工作方式類似,也是在初始化完成后能重復(fù)循環(huán)計數(shù),只是輸出的波形不同。
(5)方式4:軟件出發(fā)選通方式
進(jìn)入工作方式4,OUTi輸出高電平。裝入計數(shù)值n后,如果GATE為高電平,則立即開始減“1”計數(shù),直到計數(shù)值減到“0”為止,OUTi輸出寬度為一個CLKi周期的負(fù)脈沖。由軟件裝入的計數(shù)值只有一次有效,如果要繼續(xù)操作,必須重新置入計數(shù)初值n。如果在操作的過程中,GATE變?yōu)闊o效,則停止減“1”計數(shù),到GATE再次有效時,重新從初值開始減“1”計數(shù)。
(6)方式5:硬件觸發(fā)方式計數(shù)
進(jìn)入工作方式5,OUTi輸出高電平,硬件觸發(fā)信號由GATE端引入。因此,開始時GATE應(yīng)輸入為0,裝入計數(shù)初值n后,減“1”計數(shù)并不工作,一定要等到硬件觸發(fā)信號由GATE端引入一個正階躍信號,減“1”計數(shù)才會開始,待計數(shù)值計到“0”,OUTi將輸出負(fù)脈沖,其寬度固定為一個CLKi周期,表示定時時間到或計數(shù)次數(shù)到。
三、程序設(shè)計思路
所有音樂都是由各個不同頻率的音階和其延續(xù)時間的長短來實現(xiàn)的。不同的音樂是由各個音階按某種排列各自播放一定時間形成的,將各音樂音階和其延續(xù)時間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時間表,再使用計數(shù)器產(chǎn)生該音階頻率。
CPU通過對定時器的通道2(端口地址為42)進(jìn)行編程,使其I/O寄存器接收一個控制聲音頻率的16位計數(shù)值,端口61H的最低控制通道2門控的開斷。以產(chǎn)生特殊的音響。當(dāng)定時器接收的計數(shù)值為533H時,能產(chǎn)生896Hz的聲音,因此產(chǎn)生其他頻率的計數(shù)值就可算出來:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
533Hz×896÷頻率=1234DC÷頻率
在送出頻率計數(shù)值之前,還要給方式寄存器送一個方式值,該數(shù)決定對哪一個通道編程,采用什么模式,送入通道的計數(shù)值是一字節(jié)還是兩字節(jié),是二進(jìn)制碼還是BCD碼。其位組合的格式如下:
當(dāng)通道2用于發(fā)聲時,采用的是模式3,在模式3下,輸出線為“1”和為“0”的時間各占計數(shù)時間的一半,因而產(chǎn)生一系列間隔均勻的脈沖。
產(chǎn)生指定頻率聲音的程序段如下:
MOV AL,0B6H OUT 43H,AL ;43H為8254的控制字端口 MOV DX,12H MOV AX,34DCH DIV DI ;(DI)=頻率
OUT 42H,AL ;42H為8254的通道2端口 MOV AL,AH MOV 42H,AL 從定時器輸出的方波信號,經(jīng)功率放大和濾波后驅(qū)動揚聲器。送到揚聲器的信號還受到了從并行接口芯片8255(端口地址為61H)來的雙重控制,端口61H的最低位控制通道2的門控開斷,以產(chǎn)生特殊的音頻信號,端口61H的PA1位和定時器的輸出信號同時作為與門的輸入,PA0和PA1位可由程序決定為0還是為1。顯然只有PA0和PA1都是1時,才能使揚聲器發(fā)出聲音??刂埔糸L的時間可以簡單地通過反復(fù)執(zhí)行指令來得到。我們知道執(zhí)行2801次LOOP指令約需要10MS的時間。因此用10MS的倍數(shù)值來控制揚聲器開關(guān)的時間間隔,就可控制發(fā)聲的音長了。實現(xiàn)程序如下:
IN AL,61H MOV AH,AL OR AL,3 OUT 61H,AL;開揚聲器 L: MOV CX,2801 DY:LOOP DY DEC BX JNZ L MOV AL,AH OUT 61H,AL;關(guān)揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
四、功能流程圖及子程序說明
1、總流程圖
MAIN程序:MAIN程序是總程序,輸出說明,等待用戶按鍵并讀取鍵值。根據(jù)不同的按鍵選擇調(diào)用播音子程序播放不同的歌曲。
開始輸出說明讀取按鍵是‘1’?N是‘2’?Y播放曲1Y播放曲2N是‘3’?Y播放曲3N是‘0’?Y結(jié)束Y選擇無效程序總流程圖
2、音樂播放子程序流程圖
PLAY子程序:PLAY子程序是播音子程序,SI指向音節(jié)表中的頻率,BP指向音節(jié)表中的時間。從SI的指向的音節(jié)表中取一個頻率,只要不是-1,即有效就再讀取時間,然后計算計數(shù)初值送入計數(shù)器,產(chǎn)生各種頻率。開啟揚聲器,根據(jù)所取的時間調(diào)用若干次延時子程序。這段時間揚聲器就發(fā)出該頻率的聲音,延時結(jié)束,就關(guān)閉揚聲器,調(diào)用音節(jié)之間的小延時程序。最后修改SI和BP,指向下一個頻率,重復(fù)上面的工作
DELAY子程序和DELAY_OFF子程序:兩個都是子程序,采用空操作循環(huán)多次的方法,只是第二個延時時間較短,大概為5ms。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
開始保護(hù)現(xiàn)場曲N各音符頻率設(shè)置曲N各音符時間設(shè)置讀取頻率F頻率是-1 ?Y恢復(fù)現(xiàn)場N讀取時間T結(jié)束返回計算機計數(shù)次數(shù)送計數(shù)器,產(chǎn)生該頻率F信號啟動喇叭延時T關(guān)閉喇叭音符間延時播音流程圖
五、試驗結(jié)果截屏:
初始界面:
如果按錯了鍵,會出現(xiàn)如下界面:
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
如果選擇正確,將出現(xiàn)如下界面:
六、參考文獻(xiàn)
【1】李長青.微機原理與接口技術(shù).徐州:中國礦業(yè)大學(xué)出版社,2006 【2】沈美明.匯編語言程序設(shè)計實驗教程.北京:清華大學(xué)出版社,2002年 【3】周明德.微機原理與接口技術(shù).北京:人民郵電出版社,2002年
七、總結(jié)
在本次設(shè)計中,可以說是一次成功的經(jīng)驗。在我們學(xué)完了《微型計算機原理與接口技術(shù)》這門課的基礎(chǔ)上來做這個設(shè)計,通過設(shè)計后,使我們對這門課的理論知識的理解有很大程度上的加強。微機原理這門課程本身是一門實驗性和工程性很強的專業(yè)技術(shù)課,因此不僅要重視理論教學(xué),更應(yīng)注意實踐技能的培養(yǎng)和訓(xùn)練。課程設(shè)計是這門課程的一個重要環(huán)節(jié),通過課程設(shè)計,鞏固、加深和拓寬了學(xué)習(xí)的理解,本課程設(shè)計的重點目標(biāo)是使用匯編語言,而不過多涉及硬件方面的太多知識。
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
在編程方面我通過本次課程設(shè)計學(xué)到了很多。一開始面對很長的程序往往有畏難情緒,感覺無法下手,沒辦法只能硬著頭皮啃下去,多看幾個和音樂播放有關(guān)的匯編程序,然后我就能慢慢看懂了并理解了別的作者的設(shè)計思路。然后再根據(jù)自己的思路,對照本人在圖書館借的匯編語言指導(dǎo)書慢慢編寫符合自己思路的程序。一次寫出來的程序肯定不會是正確的,還需要進(jìn)一步調(diào)試它。檢查程序過程中,在充分思考的基礎(chǔ)上多次實驗是檢查改正程序的良方。編寫程序的過程中,體會最深的是子程序的調(diào)用和程序的條理問題,一個程序就算功能實現(xiàn)了,但是也要使主程序和子程序的條理分明,易讀性高,才能算一個比較好的程序。調(diào)試程序中,學(xué)習(xí)了DEBUG 的使用,DEBUG對檢查程序的錯誤作用很大。同時,也要靈活使用各種調(diào)試方法,來縮小尋找錯誤的范圍。
書到用時方恨少。在課程設(shè)計過程中,我才體會到這句話的深意。課堂上學(xué)的8254的知識和匯編語言都太少,還不足以完成本次課設(shè),為此我經(jīng)常跑圖書館借了各種各樣的工具書。有的書用處較大,有的書僅能用到一小塊知識,就是這樣,一步步在知識的海洋里我尋覓著自己需要的東西,確實克服了不少困難,解決了不少問題?;蛟S坎坷才能更好的使人成長。在這次的課程設(shè)計中,我的收獲是不但做出了一個符合要求的音樂播放器,而且為自己積累了一些寶貴的經(jīng)驗。同時我也對音樂方面的頻率知識有了一些認(rèn)識,我想如果不是本次課程設(shè)計中用到這方面知識,我這輩子可能沒有機會去接觸這方面的知識了。這,或許也是我比別的同學(xué)多出的一點收獲吧!
六、附錄
1、源程序代碼:
SSEG SEGMENT PARA STACK 'stack'
dw 100h dup(0);Resize the stack by changing the number '100' SSEG ENDS
DSEG SEGMENT INFO1 DB 0DH,0AH,'--------------------------',0DH,0AH,'THERE ARE 3 SONGS:',0DH,0AH,0DH,0AH,'$' INFO2 DB '1.HAPPY BIRTHDAY',0DH,0AH,'$' INFO3 DB '2.SHEEP',0DH,0AH,'$' INFO4 DB '3.RIVER',0DH,0AH,'$' INFO5 DB '0.EXIT',0DH,0AH,'$' INFO6 DB 'YOU HAVE CHOSEN :$' INFO7 DB 'THANK YOU FOR YOUR USE',0DH,0AH,'$' INFO8 DB '---------------------------',0DH,0AH,'PRESS THE KEY TO SELECT SONG!',0DH,0AH,'$' INFO9 DB 0DH,0AH,'-------------------',0DH,0AH,'|INVALID
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
SELECTION|',0DH,0AH,'-------------------',0DH,0AH,'$' FREG1 DW 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349
;曲1的頻率
DW 330,294,466,266,440,349,392,349,-1 TIME1 DW
1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4
;曲1的時間 FREG2 DW 330,294,262,294,3 DUP(330)
;曲2的頻率
DW 3 DUP(294),330,392,392 DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262,-1 TIME2 DW 6 DUP(1),2
;曲2的時間
DW 2 DUP(1,1,2)DW 12 DUP(1),4 FREG3 DW 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294;曲3的頻率
DW 262,262,220,196,220,262,294,332,262,-1 TIME3 DW 3 DUP(2),1,1,2,1,1,4
;曲3的時間
DW 2 DUP(2,2,1,1),4 DW 3 DUP(2,1,1,1),4 DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG
INIT PROC
;初始化程序
mov ax, dseg mov ds, ax mov es, ax
INIT ENDP
MAIN PROC
;程序入口
call INIT
RE: MOV DX,28BH
;關(guān)閉揚聲器
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
LEA DX,INFO1
;輸出說明信息
MOV AH,09H INT 21H LEA DX,INFO2 INT 21H LEA DX,INFO3 INT 21H
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
LEA DX,INFO4 INT 21H LEA DX,INFO5 INT 21H LEA DX,INFO8 INT 21H
MOV AH,01H
;讀取按鍵
INT 21H CMP AL,'1'
;根據(jù)不同的按鍵播放不同的曲子
JE MUSIC1 CMP AL,'2' JE MUSIC2 CMP AL,'3' JE MUSIC3 CMP AL,'0' JE EXIT
LEA DX,INFO9
MOV AH,09H INT 21H JMP RE
MUSIC1: MOV SI,OFFSET FREG1
MOV BP,OFFSET TIME1 CALL PLAY JMP RE MUSIC2: MOV SI,OFFSET FREG2
MOV BP,OFFSET TIME2 CALL PLAY JMP RE MUSIC3: MOV SI,OFFSET FREG3
MOV BP,OFFSET TIME3 CALL PLAY JMP RE EXIT: MOV DX,28BH
MOV AL,89H OUT DX,AL
MOV DX,28AH IN AL,DX
;無效選擇,輸出錯誤提示
;指向曲1的表;指向曲2的表;指向曲3的表;關(guān)閉揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
MOV DX,288H OUT DX,AL
LEA DX,INFO7
;輸出歡迎使用信息,增加界面友好度
MOV AH,09H INT 21H mov ax, 4c00h;The end of the program, return to the system
int 21h
MAIN ENDP
PLAY PROC
L1: MOV BX,DS:[SI]
CMP BX,-1
JE L0
MOV CX,DS:[BP]
MOV DL,CL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DX,0FH
MOV AX,4240H
DIV BX
MOV BX,AX
MOV DX,283H
MOV AL,36H
OUT DX,AL
MOV DX,280H
MOV AX,BX
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,28BH
MOV AL,89H OUT DX,AL MOV DX,28AH IN AL,DX NOT AL MOV DX,288H OUT DX,AL
ROD:CALL DELAY
LOOP ROD
MOV DX,28BH
MOV AL,89H
;PLAY子程序,功能上面介紹過
;取頻率
;看是否有效
;無效就退出
;讀取時間
;保存時間
;計算計數(shù)初值,1M的十六進(jìn)制為0F4240H
;設(shè)置計數(shù)器工作方式
;輸入計數(shù)初值
;開揚聲器
;延時
;關(guān)揚聲器
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
OUT DX,AL MOV DX,28AH IN AL,DX MOV DX,288H OUT DX,AL
CALL DELAY_OFF
;音節(jié)間延時
ADD SI,2
ADD BP,2
JMP L1
L0: RET
PLAY ENDP
DELAY PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,09FH LL1:MOV CX,0FFFFH
LOP: LOOP LOP DEC BX JNZ LL1 POP DX
POP CX
POP BX
POP AX
RET
DELAY ENDP
DELAY_OFF PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0FH LL2:MOV CX,0CFFFH LOP2: LOOP LOP2 DEC BX JNZ LL2 POP DX
POP CX
POP BX
POP AX
RET
;延時子程序
;循環(huán)這么多次
《微機原理與接口技術(shù)》課程設(shè)計
關(guān)智杰
DELAY_OFF ENDP CSEG ENDS END MAIN
2、各個音符的對應(yīng)頻率表:
音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO 262 1908 #4FA# 740 0676 #1DO# 277 1805 中5SO 784 0638 低2RE 294 1700 #5SO# 831 0602 #2RE# 311 1608 中6LA 880 0568 低3M 330 1516 #6LA# 932 0536 低4FA 349 1433 中7SI 988 0506 #4FA# 370 1350 高1DO 1046 0478 低5SO 392 1276 #DO# 1109 0451 #5SO# 415 1205 高2RE 1175 0426 低6LA 440 1136 #2RE# 1245 0402 #6LA# 466 1072 高3M 1318 0372 低7SI 494 1012 高4FA 1397 0358 中1DO 523 0956 #4FA# 1480 0338 #1DO# 554 0903 高5SO 1568 0319 中2RE 578 0842 #5S0# 1661 0292 #2RE# 622 0804 高6LA 1760 0284 中3M 659 0759 #6LA# 1865 0268 中4FA 698 0716 高7SI 1976 0253