版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、燕山大学汇编语言课程设计说明书题目: 计算机钢琴程序 交通灯控制系统 学院(系): 信息科学与工程学院 年级专业: 10级计算机科学2班 学 号: 3 学生姓名: 马强 学 号: 6 学生姓名: 夏洋 指导教师: 何海涛、邹晓红 完成日期: 2013年7月3日 目录1.课程设计的目的和意义- 2 -1.1课程设计目的- 2 -1.2课程设计的意义- 2 -2.题目一:计算机钢琴程序- 2 -2.1系统的主要功能- 2 -2.2总体设计方案- 2 -2.2.1扬声器驱动方式- 2 -2.2.2延时原理- 3 -2.2.3键盘控制发声程序- 4 -2.2.4设计总结- 5 -2.3作品使用说明-
2、6 -3.题目二:交通灯控制系统- 6 -3.1系统的主要功能- 6 -3.2 系统工作原理- 6 -3.2.1 8259的工作原理- 6 -3.2.2 8255A的工作原理:- 7 -3.2.3 8253的工作原理:- 7 -3.3总体设计方案- 7 -3.3.1程序流程图- 8 -3.3.2接口电路图- 11 -3.4交通灯的设计总结- 11 -4.课程设计心得体会- 12 -5.参考文献- 12 -6.附录:程序代码- 12 -6.1计算机钢琴程序代码- 12 -6.2交通灯控制系统代码- 14 -1.课程设计的目的和意义1.1课程设计目的1.进一步了解汇编语言指令的功能和用法。2.进一
3、步了解汇编接口的功能和用法。3.了解用汇编语言实现声音、图像的编程。4.锻炼团队协作完成程序设计的能力。1.2课程设计的意义本次课程设计,给同学们一个把理论知识转化为实际动手能力的机会,使同学们能够更深入的理解汇编语言,掌握汇编语言指令的用法,掌握8259A、8255、8253接口的功能和控制方法。本次课程设计的题目难度适中,既可以培养同学们的自信心又可以锻炼同学们解决困难的能力。本次课程设计的形式为两人一组共同完成两个任务,既培养同学们的团队精神又提升了每个人的能力。2.题目一:计算机钢琴程序2.1系统的主要功能编写程序,程序运行时使PC机成为一架可弹奏的钢琴,当按下数字键1-8时,依次发出
4、8个音调。按CTRL-C则退出钢琴状态。2.2总体设计方案2.2.1扬声器驱动方式1.直接控制扬声器发声程序通过I/O指令使设备控制寄存器(I/O端口地址为61H)的第一位交替为0和1,而端口61H的第一位和扬声器的脉冲门相连,当第一位由0变为1,延迟一会又由1变为0时,脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。 1/0 07 6 5 4 3 2 1 0端口61H &放大器 图1 设备控制寄存器2.利用8253驱动扬声器PC机上的大多数I/O都是由主板上的8255可编程程序外围接口芯片(PPI)管理的。由PPI输出寄存器中的0和1两位来控制扬声器的
5、驱动方式。将8253的定时器2连接到扬声器上。GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。7 6 5 4 3 2 1 0 8255 PPICLK0 OUT0GATE0CLK1 OUT1GATE1CLK2 OUT2GATE2&VCCHZ8254 PITVCC74L500图2 利用8253驱动扬声器发声2.2.2延时原理1.利用CPU来产生延迟利用CPU来产生延迟时间是最常用的一种方法,但对8086,80286,
6、80386等,它们产生的延迟时间是不一样的。对于基于8088的PC/XT,PS/2等PC机,可用下面的程序来产生时间延迟:MOV CX,NDELAY:LOOP DELAY在8088CPU中,执行一条LOOP指令需要17个时钟周期,因此,执行上面的指令大约需要N*17*T时钟周期。例如,N=2800,系统频率为4.7MHZ,那么可得到的延迟时间为10ms。2.80x86PC的时间延迟80x86的各种处理器采用666MHz的工作频率,LOOP指令的执行时间在这些处理器上也不相同。为了建立一个与处理器无关的实践延迟,IBM采用了一种利用硬件产生时间延迟的方法,即通过监控端口61H的PB4,使PB4每
7、18.08us触发一次,以产生一个固定不变的时间基准。在IBM PC AT BIOS 中的WAITF子程序,就是一个产生N*15.08us时间延迟的程序。调用WAITF子程序时,CX寄存器必须装入15.08us的倍数N。;(CX)=Count of 15.08usWAITF PROC NEAR PUSH AXWAITF1: IN AL,61H AND AL,10H CMP AL,AH JE WAITF1MOV AH,ALLOOP WAITF1POP AXRETWAITF ENDP利用WAITF子程序能获得任意的延迟时间,而再不必考虑CPU的型号和工作频率。2.2.3键盘控制发声程序音符和频率之
8、间有一定的对应关系,如果计算机键盘上的某些键和音符、频率也形成一种对应关系,则可通过键盘控制扬声器发出各种音符声音,这时计算机键盘就变成了钢琴键盘,就可以用它弹奏出简单的音乐。钢琴有88个音符,为了简单起见,下面通过编写一个八度音程的钢琴程序来了解键盘控制发声的原理。为了弹奏方便,让数字18对应一个音阶的八个音符。采用的频率为524,588,660,698,784,880,988,1048。程序框图如下:图3 PIANO程序框图2.2.4设计总结选择本题目时,不了解如何用软件驱动扬声器发音,更不用说如何发出不同的音阶。通过查阅书籍了解到软件驱动扬声器发音的方式,在程序设计过程中遇到一个问题:常
9、按一个键时期望扬声器发出一个连续的长音而不是连续的重复发出该音。为了解决这个问题,最初设想运用中断的方式来判断键盘的输入状态,但是没有成功。通过在网上查阅资料,找到一种方法,即wait:in al,60h test al,80h jz wait2.3作品使用说明在TDDBUG中编译并连接piano.asm文件生成piano.exe可执行文件。双击piano.exe文件进入程序运行状态。键盘上的18分别代表八个不同的音阶。按照简谱可以模拟钢琴弹奏出乐曲。3.题目二:交通灯控制系统3.1系统的主要功能(1)利用8254定时,8259中断及8255输出实现交通灯模拟控制。(2) 实现能自动控制和手动
10、控制。(3) 实现能随时可以调整自动模式的绿灯和红灯时间。(4)南北方向红灯亮时东西方向绿灯亮,7段数码显示管显示倒计时,最后三秒红灯闪烁。3.2 系统工作原理3.2.1 8259的工作原理(1)数据总线缓冲器:8259A与系统数据总线的接口,是8位双向三态缓冲器。CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过缓冲器传送的。(2)读/写控制逻辑:CPU通过它实现对8259A的读/写操作。(3)级连缓冲器:用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。(4)控制逻辑电路:对整个芯片内部各部件的工作进行协调和控制。(5)中断请求寄存器IRR:8位,用
11、以分别保存8个中断请求信号,当响应的中断请求输入引脚有中断请求时,该寄存器的相应位置1。(6)中断屏蔽寄存器IMR:8位,相应位用以对8个中断源的中断请求信号进行屏蔽控制。当其中某位置“0“时,则相应的中断请求可以向CPU提出;否则,相应的中断请求被屏蔽,即不允许向CPU提出中断请求。该寄存器的内容为8259A的操作命令字OCW1,可以由程序设置或改变。(7)中断服务寄存器ISR:8位,当CPU正在处理某个中断源的中断请求时,ISR寄存器中的相应位置1。(8)用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。3.2.2 8255A的工作原理:(1)82
12、55A的内部结构:1)、数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。2)、三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。3)、A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出
13、的一字节方式控制字或对C口按位复位字命令。方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。对C口按位复位命令字可对C口的每一位实现置位或复位。A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。4)、读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。(2)8255A的 工作方式:方式0-基本输入输出方式;方式1-选通输入输出方式;方式2-双向选通输入输出方式。3.2.3 8253的工作原理:8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不
14、同的方式工作,并且都可以按二进制或十进制计数。其CLK0CLK2是计数器02的时钟脉冲输入端, GATE0GATE2是门控脉冲输入端, OUT0OUT2是输出端。 3.3总体设计方案设计中使用了8259中断控制器、8255A可编程并行接口实现了,对南北、东西方向交通的分别计时、分别控制,设计采用定时加中断控制的方式进行,对两个方向车辆的通行时间分别计时,可随意进行更改双向的通行时间。城市十字交叉路口红绿灯控制系统主要负责控制东西走向和南北走向的红绿灯的状态和转换顺序,关键是各个状态之间的转换和进行适当的时间延时,正是基于以上考虑,采用如下设计:1东西方向车辆放行5秒钟。即东西方向绿灯和南北方向
15、的红灯同时点亮5秒钟;24秒钟后,东西方向绿灯保持不动,南北方向的红灯闪烁1秒钟,以警示车辆将切换红绿灯。此时南北方向仍维持红灯点亮。3南北方向的红灯闪烁1秒钟后,转为南北方向放行5秒钟。即东西方向的红灯和南北方向的绿灯同时点亮5秒钟;4南北方向放行4秒钟后,转为东西方向的红灯闪烁1秒钟,以警示将切换红绿灯。此时东西方向仍维持红灯点亮。5东西方向的红灯闪烁1秒钟后转为东西方向放行5秒钟。如此循环重复。3.3.1程序流程图图4 交通灯控制程序图5 交通灯数码管显示模块图6 交通灯手动控制模块3.3.2接口电路图8254 D0 D7CLK0 A0 A1GATE0 WR RDOUT0 CSXD0 系
16、XD7 统 总XA1 线XA2 IOW#IOR# IOY1IOY3MIR7 MIR6D0 PA0 D7 PA7 A0 PB0A2 PB7WRRD PC0CS PC78255D0 K0 D7 K7D8 K8 D15 K11 K0 开关 及K7 LEDADPX3X6键盘及数码管184.32KHzKK1图7 交通灯电路3.4交通灯的设计总结在交通灯的设计中我们学会了给8259设置控制字,控制中断的方式中断的优先级等,初步了解了CPU是如何管理终端的。我们自己设计了交通灯的硬件电路,从而进一步了解了各个芯片的工作原理。但是在设计中我们也犯了一些错误需要进一步的改进。首先,在交通灯的闪烁方面我们没有使用
17、定时器来定时,而是使用8259的B4定时触发的方式写了一个延时子程序来实现灯的延时;而在数码管显示数字方面我们却使用了8254定时器中断方式,每0.1秒发出一次中断请求来刷新数码管。这样在灯和数码管显示的同步方面就发生了问题,我们只好一点一点调试使得它们看起来是同步的。但是这样的程序是没有可扩展性的,如果想要改进的话我想应该将灯和数码管使用同一个定时器使他们同步,这样可扩展性非常强。我们可以随时改动交通灯亮和闪的时间,只要改变一下参数即可。其次,我们在设计时将A口和B口全都用来给灯输出高低电平,造成最后8255的端口不够用了,其实我们完全可以只用一个端口来模拟交通灯的情况。由于端口不够用,我们
18、只好复用C端口来同时执行数码管显示和接收手动输入的数据这两个任务,这样势必会牵涉到设置C端口的输入输出方式和还原C口的输入输出方式,这样反而影响了数码管的显示效果。最后,我们将手动方式设置为中断的方式,我们不得不这样设计因为在中断中我们才可以将C端口的输入输出方式重新设计,这是一个重大的失误。因为手动和自动控制应当是主程序的两个循环的子程序。 总之,我们收获了很多也发现了很多需要进一步改进的地方。4.课程设计心得体会两周的课程设计结束了,在这次的课程设计中不仅检验了我们所学的知识,也培养了我们如何去把握一件事情,如何去做一件事情,又如何去完成一件事情。在设计过程中,与同学分工设计,和同学相互探
19、讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了理解。课程设计使我们专业知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不可少的过程。“千里之行始于足下”,通过这次课程设计,我深深体会到这句名言的真正含义,我们今天认真的进行课程设计,学会脚踏实地迈出第一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。通过这次课程设计,我们在多方面有所提高。学会综合运用汇编语言与接口技术的理论直射来设计课题。学会了独立思考,学会了协作。体会了学以致用、突出自己劳动成果的喜悦心情,从中发现了自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的任大伟、邹晓红、何海涛老师,在我们提出
20、问题后耐心的给我们解答,鼓励我们完成更好的作品。由于我们的水平有限,所以在设计中难免有错误,恳请老师们多多指教,我们十分乐意接受你们的批评与指正。5.参考文献1.汇编语言与接口技术(第2版)王让定、朱莹 清华大学出版社2.IBM-PC汇编语言程序设计(第2版)沈美明、温冬婵 清华大学出版社3.汇编语言与接口技术叶继华、甘登文 机械工业出版社6.附录:程序代码6.1计算机钢琴程序代码data segment para datatable dw 524 ;程序用频率 dw 588 dw 660 dw 698 dw 784 dw 880 dw 988 dw 1048 data endscode se
21、gment para code assume cs:code,ds:datastart: mov ax,data mov ds,axcheck:mov ah,1 ;从键盘输入字符 int 21h cmp al,0dh je exit mov bx,offset table cmp al,1 ;检查是否越界 jb check cmp al,8 ja check and ax,0fh shl ax,1 sub ax,2 mov si,ax mov di,bxsi call soundf ;调用子程序 jmp check exit:mov ah,4ch int 21hsoundf proc push
22、 ax push bx push cx push dx push di mov al,0b6h out 43h,al mov dx,12h mov ax,348ch div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al wait:in al,60h test al,80h jz wait mov al,ah out 61h,al pop di pop dx pop cx pop bx pop ax retsoundf endpcode endsend start6.2交通灯控制系统代码data
23、 segmentbls db ?led db 60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h ;数码管显示码data endsdatastack segmentstack db 100 dup(?)datastack endsCODE SEGMENTASSUME CS:CODE, ds:data,ss:datastackSTART:mov ax,datamov ds,axcli ;关中断push dsmov ax,0000hmov ds,axlea ax,leddisplaymov si,003chmov si,axmov ax,csmov si,003e
24、hmov si,ax ;设置F号中断向量lea ax,shoudongmov si,0038hmov si,axmov ax,csmov si,003ahmov si,ax ;设置E号中断向量pop dsmov al,13hout 20h,al ;设置ICW1,中断边沿触发不设置级联mov al,08h ;设置ICW2out 21h,almov al,01h ;设置ICW4out 21h,almov al,00h ;设置OCW1out 21h,almov dx,06c6h ;设置定时器mov al,34hout dx,almov dx,06c0h ;给定时器0装入计数值mov al,00hou
25、t dx,almov al,48hout dx,almov cx,50 ;CX用于辅助记时,50代表5秒MOV DX,0646H ;设置8255输入输出方式MOV AL,80HOUT DX,ALmov dx,0644h ;向C口写B6H,即5mov al,0b6hout dx,alsti ;开中断MOV DX,0640HMOV AL,07HOUT DX,AL ;向A口写入数据灯亮MOV DX,0642HMOV AL,61H OUT DX,AL ;B口连接的灯亮CALL DELAY1 ;延时MOV BL,5A:MOV DX,0640HMOV AL,07HOUT DX,ALMOV DX,0642H
26、MOV AL,01HOUT DX,ALCALL DELAY2MOV DX,0640HMOV AL,07HOUT DX,ALMOV DX,0642HMOV AL,61HOUT DX,AL CALL DELAY2DEC BLJNZ Amov cx,50mov dx,0644hmov al,0b6hout dx,alMOV DX,0640HMOV AL,61HOUT DX,ALMOV DX,0642HMOV AL,07HOUT DX,ALCALL DELAY1MOV BL,5B:MOV DX,0640HMOV AL,01HOUT DX,ALMOV DX,0642HMOV AL,07HOUT DX,A
27、L CALL DELAY2MOV DX,0640HMOV AL,61HOUT DX,ALMOV DX,0642HMOV AL,07HOUT DX,AL CALL DELAY2DEC BLJNZ BJMP STARTDELAY1 PROCMOV BL,30mov bls,bl BACK:mov bx,33144 CALL WAITF mov bl,bls DEC BL mov bls,blJNZ BACK RETDELAY1 ENDPWAITF PROC PUSH AXWAITF1:MOV DX,0642H IN AX,DX AND AL,10H CMP AL,AHJE WAITF1MOV AH
28、,AL dec bx jnz WAITF1POP AXRETWAITF ENDPDELAY2 PROC push bx MOV bx,19893 CALL WAITF pop bx RETDELAY2 ENDPleddisplay proc ;在自动模式下每0.1秒发生一次leddisplay中断。 dec cx ;手动模式下该中断被屏蔽 jnz bb ;每发生一次中断CX的计数就减一 inc cx ;如果CX的值减为0,就加一 bb: push ax push bx mov ax,data mov ds,ax mov ax,cx mov bl,10 div bl lea bx,led xla
29、t ;利用CX除以10的商在data表中查找数码管的显示码 mov dx,0644h ;将新的数码显示 out dx,al pop bx pop ax sti mov al,20h ;设置EOI out 20h,al iret leddisplay endp shoudong proc mov dx,0646h mov al,89h out dx,al ;初始化8255设置A口B口输出C口输入 push bx ;BX用于保存A口和B口的端口状态 mov bh,01h ;BH用于控制B口的显示 mov bl,01h ;BL用于控制A口的显示 aa: mov dx,0644h in al,dx ;获得C口的输入数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川公路桥梁建设集团有限公司招聘项目班子级管理人员57人笔试历年参考题库附带答案详解
- 2025福建漳州市文旅康养集团有限公司招聘24人笔试历年备考题库附带答案详解
- 2025云南金涌道矿业科技有限公司招聘13人笔试历年参考题库附带答案详解
- 2025年陕西铁路物流集团有限公司招聘(56人)笔试历年难易错考点试卷带答案解析
- 2025安徽蚌埠市淮上区区属国有企业招聘拟人员笔试历年备考题库附带答案详解
- 2026年房地产企业精装修工程管理与质量控制
- 2026年群体性食物中毒应急预案
- 2026年生命教育主题班会设计与心理健康促进效果
- 2026年展台搭建现场深化设计要点
- 2026年办公用品申购与管理办法
- 2026年抗菌药物考试题及答案
- 2026年山东省夏季高考《语文》作文专项练习及答案解析(全国I卷)
- 第二轮土地承包到期后再延长30年试点工作意见政策解读
- 工程造价审核服务方案1
- 领导干部忏悔书
- 立体构成(高职艺术设计)PPT完整全套教学课件
- DB11-T 1470-2022 钢筋套筒灌浆连接技术规程
- GB/T 8335-2011气瓶专用螺纹
- GB/T 33610.2-2017纺织品消臭性能的测定第2部分:检知管法
- GA/T 1773.1-2021机动车驾驶人安全文明操作规范第1部分:通用要求
- 健身气功八段锦教案
评论
0/150
提交评论