《微机原理课设电风扇.doc》由会员分享,可在线阅读,更多相关《微机原理课设电风扇.doc(18页珍藏版)》请在三一办公上搜索。
1、 课 程 设 计 报 告课程设计名称:微机系统综合课程设计课程设计题目:模拟电风扇动作 目 录第1章 总体设计方案11.1 设计原理11.2 设计思路11.3 实验环境2第2章 详细设计方案32.1 硬件电路设计32.2 主程序设计42.3 功能选择模块的设计与实现5第3章 结果测试及分析63.1 结果测试63.2结果分析6参考文献7附 录8第1章 总体设计方案1.1 设计原理利用芯片8259,8255,8253,8279,分别控制中断,彩色发光二极管,时钟,和LED显示。用受8253控制的8259给8255和8279产生每秒钟一次的中断,控制彩色发光二极管和LED的显示1.2 设计思路首先需
2、要一个总开关,用来控制电风扇的开关,可以用8255的输入端接收这一信号,信号为时进入循环,此时彩色发光二极管通过红绿色灯显示风扇的转动效果,不为时执行下一步。其次需要实现的功能是三级风速的变换,可以设计三个变换延时的子程序,并根据键盘输入的不同来分别调用这三个步骤。再次是要实现定时功能,用8253和8259实现这一功能并不困难,当时间减为零时,向8255的AL中输入O6AH,使彩色发光二极管显示初始化。还有就是彩色发光二极管的显示问题,只需将8255中控制彩灯显示的数据起始值设为01101010,然后循环左移两位即可。(1) 提出方案总开关是用来控制风扇的启动停止的,所以只需有两种状态,即开和
3、关,所以,我选择用实验箱右下角的开关来实现这以功能。为了能显示风扇的转动,我选用8255和实验箱右上角的彩灯来显示风扇的转动。为了实现定时功能,我选用8253定时,8259产生中断,用中断程序来控制定时。由于定时时要能显示时间及风扇转动时要有风速等一些功能的选择,所以还需要8279键盘显示接口芯片。(2) 方案论证1) 用8255和彩灯模拟风扇的转动,所以,可以将8255的B口设为工作在方式0,输出状态,然后通过输出不同二进制数来控制彩灯的红绿显示,通过循环移位使彩灯循环显示来实现风扇转动的模拟。2) 用右下角的开关控制风扇的转动与停止,所以,可将8255A口设为方式0,输入状态,来读取开关的
4、状态,然后在程序中判断输入的是1还是0,进而控制风扇的转动与停止。3) 为了实现定时的功能,可以用8253的分频功能,将输入的脉冲信号分频,以输出1HZ的脉冲信号,然后输入到8259的INT0以产生周期为1s的终端,即每秒钟进一次中断,在中断服务程序中来实现时间的递减,当减到0时就将风扇停止,这样就实现了定时功能了。4) 为了实现三级风速的选择和定时功能、定时时间的变化显示等功能,需要8279的键盘显示功能,在键盘上设置三个键分别控制三级风速,在设置一个按键来控制定时功能的选择,当按下定时功能键后,还需要键盘的数字键来实现定时时间的设定。最后就是用数码管显示时间的变化了。1.3 实验环境硬件环
5、境:AEDK实验箱,PC机。软件环境:LCA88ET应用软件。第2章 详细设计方案2.1 硬件电路设计硬件电路由键盘显示接口芯片8279构成,如图2.1所示。K1 Pa0 Pb0 Pb7 cs8279Clk1 out1Gate1 8253 clk0Out0 cs gate0 Int08259 cs20020721021722022722822fDL8 DL1csPc0Pc3脉冲源图2.1 硬件电路连线图8279是可编程设置型键盘/显示芯片,其特点是:(1)可同时进行键盘扫描及文字显示;(2)键盘扫描模式;(3)传感器扫描模式;(4)激发输入模式;(5)8乘8键盘FIFO;(6)具有接点消除抖动
6、,2键锁定及N键依次读出模式;(7)双排8位数或双排16位数显示器;(8)右边进入或左边进入,16字符或8字符显示。8255的A口工作在方式0,输入;B口工作在方式0,输出;C口工作在方式0,输出;8253将脉冲源分频,产生周期为1s的脉冲信号,驱动8259产生周期为1s的中断。8255、8259、8253、8279的端口地址分别接210H-217H、220H-227H、200H-207H、228H-22FH。2.2 主程序设计图2.2 主程序流程图2.3 功能选择模块的设计与实现图2.3.1 功能选择模块流程图第3章 结果测试及分析3.1 结果测试 编译并连接程序,然后全速运行,在数码管上就
7、显示计时器的时间,开始时是全0。此时双色彩灯是初始状态,即只有一个灯是红的,其余三个灯都是绿色。然后,将开关K1向上扳去,时8255的PA0口输入高电平,此时发现双色彩灯还是循环亮红灯,并且只有一个灯是红色的,其余都是绿色,这样,当以一定的速度循环点亮四个灯,就会模拟出风扇的转动了。在风扇转动时,按下键盘上的A、B、C键,则彩灯会分别以不同的速度循环点亮红色,这样就实现了通过键盘实现三级风速的选择功能了。当风扇在某一风速下转动时,按下D键,则进入定时状态,接着只需按下键盘上的数字键,设定好定时的时间,然后再按下D键,风扇就将在设定的时间内转动,并且在数码管上显示时间的变化,逐渐减少,当减到0时
8、,风扇就将停止转动。这就是定时功能的实现。3.2 结果分析开始运行时,发现双色彩灯并不是按理想顺序逐渐点亮红色,后来,检查程序发现并没有错,最后,检查硬件连线时发现,8255B口得导线与双色灯的借口连接顺序错了,调整了连接顺序后彩灯理想的顺序循环点亮了。风扇正常运行了,但是在定时时发现数码管上的时间没有变化,过了定时的时间后,风扇也没有停止,开始以为程序问题,单步运行后发现一切正常,然后检查数码管显示也没发现问题,这时将接在INT0上的导线拔下,接在发光二极管上发现没有电流,最后,断定是8253并没有产生脉冲信号给8259,导致中断服务程序无法进入,使得计时功能失效,所以才会出现刚才的问题,于
9、是,我测试了几根好用的导线从新将8253的连线连一遍,再运行时定时功能就好用了。实验结果基本实现了课设的要求,虽然有些问题和程序还会有些不稳定,但是所要求的功能都实现了,那些问题我会在以后进行完善 。参考文献1王爱英.计算机组成与设计 M 北京:教育出版社, 20032杨素行.微型计算机系统原理及应用 M 北京: 清华大学出版社, 19963张雪兰.汇编语言程序设计 M 北京: 清华大学出版社, 20064龚尚福.微机原理与接口技术 M 西安: 西安电子科技大学出版社, 20035王中民.微型计算机原理 M 西安: 西安电子科技大学出版社, 20036沈美明,温冬婵.IBM-PC汇编语言程序设
10、计M 北京: 清华大学出版社, 2001附 录data segment isend db 0 n0 db 0 n1 db 0 n2 db 0 keykind db 0 oldkey db 0 kind db 0 isstop db 0 numbers db 3fh,6,5bh,0,0,0,0,0,0,0data endscode segment assume cs:code,ds:datamain: cli mov ax,cs mov ds,ax mov kind,0 mov keykind,0ah mov oldkey,0ah mov kind,06 mov isstop,0 mov ise
11、nd,0 mov n0,0 mov n1,0 mov n2,0 call initnumbers call init8255 call init8259 call init8253 call modifyint mov dx,212h mov al,0 out dx,al call cleardevice call display mov al,0 mov dx,22ah out dx,al mov al,30h out dx,al mov al,6ah stidowhat: push axdowait: mov dx,210h in al,dx test al,1 jz dowait pop
12、 ax call readakey cmp keykind,0ah jnz a1 mov kind,2 call gotonext jmp aaa1: cmp keykind,0bh jnz a2 mov kind,1 call gotonext jmp aaa2: cmp keykind,0ch jnz a3 mov kind,0 call gotonext jmp aaa3: cmp keykind,0dh jnz a4 push ax mov dx,212h ;c口给0 mov al,0 out dx,al pop ax mov isstop,0 push ax mov al,oldke
13、y mov keykind,al call reading mov dx,212h mov al,0ffh out dx,al pop ax sti ;开中断,进入中断程序计时 jmp aaa4: cmp keykind,0eh jnz aa push ax mov al,oldkey mov keykind,al pop axaa: jmp dowhatgotonext: mov dx,211h out dx,al ror al,1 ror al,1continue: cmp kind,2 jnz mm1 call speed2 jmp mm3mm1: cmp kind,1 jnz mm2
14、call speed1 jmp mm3mm2: cmp kind,0 jnz mm3 call speed0mm3: push axmm33: cmp isstop,0 jz mm4 mov dx,211h mov al,0ffh out dx,al mov dx,210h in al,dx test al,1 jnz mm33 mov isstop,0 climm4: pop ax retreadakey: ;读键盘 push ax mov al,keykind mov oldkey,al mov dx,22ah in al,dx and al,0fh cmp al,0 jz gotoexi
15、t ;没按键就直接返回 mov al,40h mov dx,22ah out dx,al mov dx,228h in al,dx mov keykind,algotoexit: pop ax retspeed1: push cx mov cx,18000sp1: loop sp1 pop cx retspeed2: push cx mov cx,50000sp2: loop sp2 pop cx retspeed0: push cx mov cx,8000sp0: loop sp0 pop cx retreadisd:key: ;读键盘,是D键返回 mov dx,22ah in al,dx
16、and al,0fh cmp al,0 jz key mov al,40h out dx,al mov dx,228h in al,dx cmp al,0dh jnz key retreading: ;计时时间输入 push ax mov n0,0 mov n1,0 mov n2,0 call readanumber mov n0,al call display call readanumber cmp al,0dh jz readexit mov ah,n0 mov n0,al mov n1,ah call display call readanumber cmp al,0dh jz rea
17、dexit mov ah,n0 mov n0,al mov al,n1 mov n1,ah mov n2,al call display call readisdreadexit: pop ax retreadanumber:key2: mov dx,22ah in al,dx and al,0fh cmp al,0 jz key2 mov al,40h out dx,al mov dx,228h in al,dx retinitnumbers: push bx mov bx,offset numbers ;初始化数码管显示数字表09 mov byte ptrbx,3fh mov byte p
18、trbx+1,6 mov byte ptrbx+2,5bh mov byte ptrbx+3,4fh mov byte ptrbx+4,66h mov byte ptrbx+5,6dh mov byte ptrbx+6,7dh mov byte ptrbx+7,7 mov byte ptrbx+8,7fh mov byte ptrbx+9,6fh pop bx retdisplay: ;从左到右依次在三个数码管上显示数字 call cleardevice mov bx,offset numbers mov al,80h mov dx,22ah out dx,al mov al,n0 xor a
19、h,ah add bx,ax mov al,bx mov dx,228h out dx,al mov bx,offset numbers mov al,81h mov dx,22ah out dx,al mov dx,228h mov al,n1 xor ah,ah add bx,ax mov al,bx out dx,al mov bx,offset numbers mov al,82h mov dx,22ah out dx,al mov dx,228h mov al,n2 xor ah,ah add bx,ax mov al,bx out dx,al retintcount: push a
20、x push bx push dx cmp n0,0 jz next1 dec n0 jmp next4next1: mov n0,9 cmp n1,0 jz next2 dec n1 jmp next4next2: mov n1,9 cmp n2,0 jz next3 dec n2 jmp next4next3: mov n2,9next4: cmp n0,0 jnz next5 cmp n1,0 jnz next5 cmp n2,0 jnz next5 mov isstop,1 mov dx,212h mov al,0 out dx,alnext5: call display pop dx
21、 pop bx pop ax iretinit8255: mov al,90h mov dx,213h out dx,al retinit8259: mov al,13h mov dx,220h out dx,al mov dx,221h mov al,30h out dx,al mov al,3 out dx,al mov al,0feh out dx,al retmodifyint: push ds push bx push ax xor ax,ax mov ds,ax mov bx,30h*4 mov ax,offset intcount mov bx,ax mov ax,8100h m
22、ov bx+2,ax pop ax pop bx pop ds retinit8253: push ax mov al,35h mov dx,203h out dx,al mov ax,0ffffh mov dx,200h out dx,al mov al,ah out dx,al mov al,75h mov dx,203h out dx,al mov ax,27 mov dx,201h out dx,al mov al,ah out dx,al pop ax retcleardevice: ;清空显示内存 push ax push dx mov al,0c1h mov dx,22ah ou
23、t dx,alwait1: mov dx,22ah in al,dx test al,80h jnz wait1 pop dx pop ax retcode ends end main课程设计总结:通过本次课程设计,是我对所学的微机原理知识有了更深的理解,对各芯片,特别是8255、8259、8253、8279等常用芯片的功能和使用方法有了更加深层的掌握,也能更加熟练的运用这些芯片来实现各种功能。在用汇编语言编写程序时,使我更加熟悉各种语句的作用和使用发法,为我以后编写更加大型的汇编语言程序打下了坚实的基础。但通过这次课程设计,我也发现了许多在学习中没有发现和注意到的缺点和不足,在连线时,不能很
24、快的找到实验箱上的相应接口,这是我对实验箱和芯片不够熟悉导致的;还有就是,在调试运行时,程序很不稳定,这很有可能是我对软件和硬件的结构和功能还不是很透彻,加之第一次用汇编语言编写程序,不可能编写出高效又健壮的程序来,所以,这可能是运行时出现不稳定的主要原因;再有,调试程序时,一些调试方法不够熟练,很多调试方法和工具都不知道,但是,以后有机会我会多用相关软件编写汇编语言,这样就能更加熟练地使用软件使所编写的程序更加完美。在本次课设中,老师给予了我无私的帮助,这次课设我能顺利的完成,与老师的帮助是分不开的,在这要感谢老师的谆谆教导,我不会辜负老师的期望,我会在以后的学习工作中努力完善自己的。指导教师评语:指导教师(签字): 年 月 日课程设计成绩