汇编课程设计.doc
- 文档编号:1896075
- 上传时间:2023-05-02
- 格式:DOC
- 页数:11
- 大小:188KB
汇编课程设计.doc
《汇编课程设计.doc》由会员分享,可在线阅读,更多相关《汇编课程设计.doc(11页珍藏版)》请在冰点文库上搜索。
实现音乐动态播放功能
姓名:
李利娟
学号:
201258501149
班级:
计121-1
学院:
计算机与控制工程学院
指导老师:
邱秀芹
时间:
2014.12.19
一、设计内容:
根据模拟量的变化控制音乐自动播放和彩灯功能。
二、设计要求:
①、通过模数转换电路实现模拟量的控制;
②、选择五个控制范围,不同的范围选择不同的歌曲;
③、歌曲和彩灯的闪烁频率对应。
三、程序流程图:
四、硬件接线图:
五、程序代码:
MY8254_COUNT0EQU06C0H;8254计数器0端口地址
MY8254_COUNT1EQU06C2H;8254计数器1端口地址
MY8254_COUNT2EQU06C4H;8254计数器2端口地址
MY8254_KONEQU06C6H;8254控制寄存器端口地址
STACK1SEGMENTSTACK ;设置堆栈段
DW256DUP(?
) ;定义256个字(512个字节)空间,偏移地址是000-511
STACK1ENDS
PUBLICVALUE;设置全局变量以便变量监视
PUBLICSONG;设置全局变量以便变量监视
DATASEGMENT ;数据段开始,DATA为数据名,表示该段的基址
FREQ_LIST1 DW371,495,495,495,624,556,495,556,624;频率表1《友谊天长地久》
DW495,495,624,742,833,833,833,742,624
DW624,495,556,495,556,624,495,416,416,371
DW495,833,742,624,624,495,556,495,556,833
DW742,624,624,742,833,990,742,624,624,495
DW556,495,556,624,495,416,416,371,495,0
TIME_LIST1DB4,6,2,4,4,6,2,4,4;时间表1
DB6,2,4,4,12,1,3,6,2
DB4,4,6,2,4,4,6,2,4,4
DB12,4,6,2,4,4,6,2,4,4
DB6,2,4,4,12,4,6,2,4,4
DB6,2,4,4,6,2,4,4,12
FREQ_LIST2DW294,330,371,294,294,330,371,294;频率表2《两只老虎》
DW371,393,441,371,393,441
DW441,495,441,393,371,294,441,495,441,393,371,294
DW330,221,294,330,221,294,294
DW294,330,371,294,294,330,371,294
DW371,393,441,371,393,441
DW441,495,441,393,371,294,441,495,441,393,371,294
DW330,221,294,330,221,294,294,0
TIME_LIST2DB2,2,2,2,2,2,2,2;时间表2
DB2,2,4,2,2,4
DB1,1,1,1,2,2,1,1,1,1,2,2
DB2,2,4,2,2,4
DB2,2,2,2,2,2,2,2
DB2,2,4,2,2,4
DB1,1,1,1,2,2,1,1,1,1,2,2
DB2,2,4,2,2,4,4
FREQ_LIST3DW221,165,262,165,262,165,262,165;《梦中的婚礼》
DW221,165,262,165,262,165,262,165
DW147,221,350,221,350,221
DW196,147,248,147,248,147,248,131,196,330,165
DW221,165,262,165,262,165,221,165,262,147,221,350
DW221,350,221,196,147,248,131,262,248
DW221,165,262,165,262,165,221,165,262,147,221,350
DW221,350,221,196,147,248,131,262,0
TIME_LIST3DB3,3,3,3,3,3,3,3
DB3,3,3,3,3,3,3,3
DB3,3,3,3,3,3
DB3,3,3,3,3,3,6,3,3,6,6
DB2,2,2,2,2,2,2,2,2,2,2,2
DB2,2,2,2,2,2,2,2,2
DB2,2,2,2,2,2,2,2,2,2,2,2
DB2,2,2,2,2,2,2,2,2
FREQ_LIST4 DW 1248,990,1112,833,1248,1112,990,1112 ;《小苹果》
DW 833,833,1248,990,1112,1112,1484,1248
DW 935,990,990,935,833,935,990,1112
DW 742,1665,1484,1248,1248,1112,990
DW 1112,1248,1112,1248,1112
DW 1484,1484,1484,1484,1484,1484
TIME_LIST4 DB 2,2,2,2,1,1,1,1
DB 1,2,2,2,2,1,1,2
DB 2,1,1,2,1,1,2,2
DB 1,1,2,4,1,2,1
DB 1,1,1,2,2
DB 2,1,1,1,1,2
FREQ_LIST5DW248,278,589,278,589,742,556,371,371;《天空之城》
DW495,441,495,589,441,371,371,393,371
DW393,589,371,589,589,589,556,786,786
DW556,556,495,556,589,556,589,742,556
DW371,371,495,441,495,589,441,371,393
DW589,556,556,589,661,661,742,0
TIME_LIST5DB3,3,3,3,3,3,4,3,3
DB3,3,3,3,4,3,3,3,3
DB3,3,4,3,3,3,3,3,3
DB4,3,3,3,3,3,3,4,3
DB3,3,3,3,3,4,3,3,3
DB3,3,3,4,3,3,3,3
VALUEDB?
;AD转换结果
LEDONHDB?
;LED灯全局开关,高
LEDONLDB?
;LED灯全局开关,低
SONGDB?
;歌曲编号
DATAENDS ;;数据段结束
CODESEGMENT ;CODE代码段开始
ASSUMECS:
CODE,DS:
DATA ;;段分配语句,
;入口程序
START:
MOVAX,DATA ;;定义DS:
DX
MOVDS,AX ;;DS数据段寄存器指向缓冲区首地址基地址
MOVDX,MY8254_KON ;初始化8254工作方式
MOVAL,36H;控制字:
36H=00110110B,通道0,先读写计数器低字节,后读写高字节,
;方式3,二进制计数,定时器0
OUTDX,AL
;计算value值,确定播放哪一首歌曲
MOVAX,DATA
MOVDS,AX
MOVDX,640H ;把端口地址给DX
OUTDX,AL ;启动AD采样
CALLDALLY2
INAL,DX;读AD采样结果
CALLGETSONG ;采样结果转换成歌曲编号,存在AL
MOVSONG,AL
CALLSELECT
JMPPLAY
SELECT:
;选择播放哪首歌
CMPSONG,1
JEBEGIN1 ;直接转移
CMPSONG,2
JEBEGIN2
CMPSONG,3
JEBEGIN3
CMPSONG,4
JEBEGIN4
JMPBEGIN5
BEGIN1:
MOVSI,OFFSETFREQ_LIST1;装入频率表起始地址
MOVDI,OFFSETTIME_LIST1;装入时间表起始地址
MOVLEDONH,80H
MOVLEDONL,00H
RET;在此处断点,观察变量窗口中的VALUE值
BEGIN2:
MOVSI,OFFSETFREQ_LIST2;装入频率表起始地址
MOVDI,OFFSETTIME_LIST2;装入时间表起始地址
MOVLEDONH,80H
MOVLEDONL,00H
RET;在此处设臵断点,观察变量窗口中的VALUE值
BEGIN3:
MOVSI,OFFSETFREQ_LIST3;装入频率表起始地址
MOVDI,OFFSETTIME_LIST3;装入时间表起始地址
MOVLEDONH,80H
MOVLEDONL,00H
RET;在此处设臵断点,观察变量窗口中的VALUE值
BEGIN4:
MOVSI,OFFSETFREQ_LIST4;装入频率表起始地址
MOVDI,OFFSETTIME_LIST4;装入时间表起始地址
MOVLEDONH,80H
MOVLEDONL,00H
RET;在此处设臵断点,观察变量窗口中的VALUE值
BEGIN5:
MOVSI,OFFSETFREQ_LIST5;装入频率表起始地址
MOVDI,OFFSETTIME_LIST5;装入时间表起始地址
MOVLEDONH,80H
MOVLEDONL,00H
RET;在此处设断点,观察变量窗口中的VALUE值
;播放歌曲
PLAY:
CALLLED ;流水灯显示程序
MOVDX,0FH;输入时钟为1MHz,1M=0F4240H
MOVAX,4240H
DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率
;SI寄存器用来指示数据段中一个源串操作数的位置
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,[DI];取出演奏相对时间,调用延时子程序
CALLDALLY
;判断一下当前应该播放那首歌
MOVDX,640H;启动AD采样
OUTDX,AL
CALLDALLY2
INAL,DX;读AD采样结果
CALLGETSONG ;采样结果转换成歌曲编号,存在AL
CMPAL,SONG
JEE1
MOVSONG,AL
CALLSELECT
JMPPLAY
E1:
ADDSI,2
INCDI
CMPWORDPTR[SI],0;判断是否到曲末?
;SI寄存器用来指示数据段中一个源串操作数的位置
JNEPLAY
CALLSELECT
JMPPLAY
;-------------函数定义start--------------
;-1.LED灯控制函数
;-2.延时函数1
;-3.延时函数2
;-4.电阻值转换成歌曲编号函数
;LED灯控制程序,每次右移一位
LEDPROC
INIT:
MOVDX,0686H ;8255:
cup与外设的数据传输,方式0,基本输入输出,A,B口8位端口;C口:
状态字
MOVAL,80H;先确定方式选择控制字
OUTDX,AL ;初始化8255
MOVBH,LEDONH
MOVBL,LEDONL
AA1:
MOVDX,0680H ;流水灯高8位,,,A口
MOVAL,BH
OUTDX,AL
MOVDX,0682H ;流水灯低8位,,,B口
MOVAL,BL
OUTDX,AL
RORBX,1 ;流水灯移位
MOVLEDONH,BH
MOVLEDONL,BL
RET
LEDENDP
;延时程序1
DALLYPROC
D0:
MOVCX,0010H
D1:
MOVAX,0F00H
D2:
DECAX
JNZD2
LOOPD1
DECDL
JNZD0
RET
DALLYENDP
;延时程序2
DALLY2PROC
PUSHCX
PUSHAX
;MOVCX,100H
MOVCX,60H ;控制延时时间
A5:
MOVAX,0800H
A6:
DECAX
JNZA6
LOOPA5
POPAX
POPCX
RET
DALLY2ENDP
;电阻值转换成歌曲编号函数
GETSONGPROC
CMPAL,30H ;转转换电阻值为歌曲编号
JNAS1
;AL<30H
CMPAL,60H
JNAS2
CMPAL,90H
JNAS3
CMPAL,0C0H
JNAS4
JMPS5
S1:
MOVAL,1
RET
S2:
MOVAL,2
RET
S3:
MOVAL,3
RET
S4:
MOVAL,4
RET
S5:
MOVAL,5
RET
GETSONGENDP
CODEENDS
ENDSTART
六、实验结果:
通过控制电阻值得范围,选择播放五首不同的歌曲,同时在歌曲播放的同时LED灯闪烁的频率会随着歌曲频率的变化而变化。
七、实验心得:
在本次实验过程中,对计算机接口与汇编无论是在编程方面还是在还是在设计方面都有很大的提高。
在设计方面,我们通过动手实践,得到了很多方案,使我们的思路更加清晰,目标更加明确。
我们通过实践与课本知识的结合,更加深刻的熟悉了硬件与软件的相互作用,以及不同芯片的功能。
在编程方面,编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序.另外,我们通过查阅课本,掌握了更多的指令语句及其作用。
最后,非常感谢老师和同学的耐心指导,你们的悉心指导让我对一些原理理解的更加透彻,才使得本次实验能够顺利圆满的完成。
11
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计