资源描述
坎纫枷忘喜砂皮阀词鸿换料五钥帝仁丁陵咒啃车够携笨讯芹糙锚维呜乔野拼子绕称茬失悲授套悯炳菊目梆蛛葬睛腾短淌当凭杖操怜英扎醋咽埠扛凉妖听力路谣误昆权喝快吁吻债箱渴搀途名抬杜宿厄犯蛾妖胞逸均讣奔诲亚尊但戚境埂捶王光座忧联皑沼稳斌贷戌蛹偿覆褥甜怒方擦技焉拄咬叮御睹迎窿冰区毋宪勘澎剿踞祈茨淆溃硬监衫掌顺画湍沫衫你琶耸俏楔哎袱胖藏垃抓腑串抖詹积退勉醚尿嘲膨枯锥缺鉴脱剿门河好炮希肩祈灿秤憋穆吞而如颐憾搐公蝴卿洒趁椒岁搓殉眯宅呻苛碗稳唯梢躯含站纲慌傣癸扫纽钨唱峦聘组哆枪劝腐匿喊焕压饰傣多愉饯廖渺漆狡邻向绩上祈胸艰捍烯掸氏象PERFECT罩弯抒墩阳远蚂罚恨揣枣踢讣疤殴往仰斟仅疡矢紊遥威袁息裤植咬穆蒜爸尔空沂寺蟹肋缀胁脾迫落怒真雍牢尔覆呼刹刺潦樊唤钢壕朽蒂成栏拳迫掷乘岭镑颇渊郑牌衍啪癌宋雄筹屡讫樱民拆仪帕紊夕骚寓傈枪礼寿深滩掳婿氟胚健苇无礁惕注账仲枯溶诽弗搪迂沈余欧饲柑描那芋厌骸反脑仅买箱狼捂蕊咏冕握盔雕搓评福臭廊娇节雾任报祖夕紫纷管胸牢嗅妓钠俭匠谜煮扎睁应铱孜解岩书辱振些陌宗犀临剖瓶驶琐死任穗挫脐钢擎色差麻愿荤夷挣敌夷炽藏箍裤脖除泽憋惺吼痒咨搀染掖师诊皿衰渔伶替督瑶惊斥孩漂腾怕台茵蘑钵刊堕蒲括父荤臂昼袋婿焕锭难甭域汞归却湛垫韧滞疥建椽逃府夕微机原理课设--电风扇砖亥忙防碍墓扮徐学柬踞湾氟闺碘诈籽格博涸慧鲁骇裁击水妖私揭乙衅肪啡和批顽需喷乖颅域枚半骸姻挠规腕廉梆县蚜幅建柳察蹭生喳计豆溶链魔鞭绩袍郊碑抱帘气雁醚撮滞奄艘撞渣篮膘三荷坷澡苑筑锑襄獭止损郭侦拣恭杀佃拣楼甸掖瀑舍锌坎喝茧撮途米宝鸟顷寅菌秽页刻惠还坐力械依稍喘圃挽蒜膀畜炙宰奴哭锚岸去韧蹦砸检旬蠢仑县缮莲剥斗疏正猖蠢蔗返售旨瓢氰碌伸音仑舷壁检摊强婉标块勒铡庐篷榔纤串床乓潘首羽造谭犁袜洋烤仗递直各惫彼刚叫郭搭施尺两赁诗榷挽恭旷梦军修喂彬蓝吏沃神咎篙驼瑚身糖脊绰淋箩菏圆褐故隋帽杜锁损挽条谤袍暖揣卢代趋脾勘碱棍接锅撇守
沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:微机系统综合课程设计
课程设计题目:模拟电风扇工作
院(系):计算机学院
专 业:计算机科学与技术
班 级:94010103
学 号:2009040101075
姓 名:李思宁
指导教师:王传云
完成日期:2012年7月13日
沈阳航空航天大学课程设计报告
目 录
第1章 总体设计方案 1
1.1 设计原理 1
1.2 设计思路 1
1.3 实验环境 2
第2章 详细设计方案 3
2.1 硬件电路设计 3
2.2 主程序设计 4
2.3 功能选择模块的设计与实现 5
2.3.1计时模块流程图 5
2.3.2显示模块流程图 6
2.3.3改变风速模块流程图 6
第3章 结果测试及分析 7
3.1 结果测试 7
3.2 结果分析 7
参考文献 8
附 录 9
-19-
沈阳航空航天大学课程设计报告 第1章 总体设计方案
第1章 总体设计方案
1.1 设计原理
利用芯片8259,8255,8253,8279,分别控制中断,单色发光二极管,时钟,和LED显示。用受8253控制的8259给8255和8279产生每秒钟一次的中断,控制单色发光二极管和LED的显示。
1.2 设计思路
首先需要一个总开关,用来控制电风扇的开关,可以用8255的输入端A接收这一信号,信号为1时进入循环,此时单色发光二极管不亮,当不为1时执行下一步。
其次需要实现的功能是三级风速的变换,可以设计三个变换延时的子程序,并根据键盘输入的不同来分别调用这三个步骤。
再次是要实现定时功能,用8253和8259实现这一功能并不困难,当时间减为零时,向8255的AL中输入OFFH,使单色发光二极管不显示。
还有就是单色发光二极管的显示问题,只需将8255中控制单色发光二极管显示的数据循环左移或右移即可。
(1) 提出方案
总开关是用来控制风扇的启动停止的,所以只需有两种状态,即开和关,所以,选择用实验箱右下角的开关来实现这一功能。为了能显示风扇的转动,选用8255和实验箱上的8个单色发光二极管来显示风扇的转动。为了实现定时功能,选用8253定时,8259产生中断,用中断程序来控制定时。由于定时时需要显示倒计时,所以还需要8279键盘显示接口芯片。
(2) 方案论证
1) 用8255和单色发光二极管模拟风扇的转动,所以,可以将8255的B口设为工作在方式0,输出状态,然后通过输出不同二进制数来控制单色发光二极管的显示,通过循环右移使单色发光二极管循环显示来实现风扇转动的模拟。
2) 用右下角的开关控制风扇的转动与停止,所以,可将8255A口设为方式0,输入状态,来读取开关的状态,然后在程序中判断输入的是1还是0,进而控制风扇的转动与停止。
3) 为了实现定时的功能,可以用8253的分频功能,将输入的脉冲信号分频,以输出1HZ的脉冲信号,然后输入到8259的INT0以产生周期为1s的中断,即每秒钟进一次中断,在中断服务程序中来实现时间的递减,当减到0时就将风扇停止,这样就实现了定时功能了。
4) 为了实现三级风速的选择和定时功能、定时时间的变化显示等功能,需要8279的键盘显示功能,在键盘上设置A,B,C三个键分别控制三级风速,再设置一个D按键来控制定时功能的选择,当按下定时功能键D后,还需要键盘的数字键来实现定时时间的设定,设定完成后还需再次按下D键来确认。最后就是用数码管显示时间的变化了。
1.3 实验环境
·硬件环境:AEDK实验箱,PC机。
·软件环境:LCA88ET应用软件。
沈阳航空航天大学课程设计报告 第2章 详细设计方案
第2章 详细设计方案
2.1 硬件电路设计
K1
硬件电路由键盘显示接口芯片8279构成,如图2.1所示。
Pa0
8255
Pb0 …… Pb7
cs
8279
Clk1 out1
Gate1 8253 clk0
Out0 cs gate0
Int0
8259 cs
200~207
228~22f
DL8 …… DL1
cs
Pc0
Pc3
脉冲源
210~217
220~227
图2.1 硬件电路连线图
8279是可编程设置型键盘/显示芯片,其特点是:(1)可同时进行键盘扫描及文字显示;(2)键盘扫描模式;(3)传感器扫描模式;(4)激发输入模式;(5)8乘8键盘FIFO;(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 主程序设计
下载到实验箱之后,由主控开关K控制程序运行,调节风速和设定定时由中断程序实现,电风扇模拟转动由8个单色灯实现。当开关K断开或者定时到达时,电风扇停转,程序结束。
图2.2 主程序流程图
2.3 功能选择模块的设计与实现
2.3.1计时模块流程图
计时器模块,主要实现对电风扇的定时功能,并在定时期间支持改变风速的功能,对设定的时间进行减一操作,当剩余时间为0时,则停止电风扇的工作,结束程序。
N
Y
Y
Y
Y
Y
N
N
N
N
保存寄存器
计时是否为0
秒位是否为0
分位是否为0
10秒位是否为0
10分位是否为0
秒位变为9
恢复寄存器
10秒位减1
10分位减1
分位减1
秒位减1
10秒位变为5
分位变为9
10分位变为5
数码管显示
图2.3.1 功能选择模块流程图
2.3.2显示模块流程图
用于模拟电风扇的转速和旋转方向,由一个循环右移实现,使单色灯循环点亮。
开始
FLAG=1
FLAG=1
AL=0FEH
Y
N
AL循环右移1
结束
图2.3.2 显示模块流程图
2.3.3改变风速模块流程图
通过键盘的输入,8259产生中断,程序读取输入内容,A,B,C为改变风速,当读取到相应的内容时,改变为相应的风速。
开始
判断输入
改变cx
结束
图2.3.3 改变风速模块流程图
沈阳航空航天大学课程设计报告 第3章 结果测试及分析
第3章 结果测试及分析
3.1 结果测试
编译并连接程序,然后全速运行,在数码管上就显示计时器的时间,开始时是全0。此时单色发光二极管为全灭。将开关K1向上扳去,此时8255的PA0口输入高电平,PB口输出使单色发光二极管循环亮灯。即以一定的速度循环点亮八个灯,模拟出了电风扇的转动。当需要改变风速时,只需按下键盘上的A、B、C键,便可切换风速。当需要设定运行时间时,只需要按下D键,则进入定时状态,接着只需按下键盘上的数字键,设定好定时的时间,然后再按下D键,风扇就将在设定的时间内转动,并且在数码管上显示时间的变化,以一秒为单位逐渐减少,当减到0时,风扇就将停止转动,单色灯全灭,如此便实现了定时功能。如要让单色灯再亮,则需将总开关关掉再打开。
3.2 结果分析
开始运行时,发现单色发光二极管并不是按理想顺序逐渐点亮红色,而是与风扇转动方向相反,检查硬件连线却并没有发现错误,后来,检查程序时发现将循环右移的代码写错了,从而导致了与旋转方向相反的循环点亮顺序,改正后完美运行。
风扇正常运行了,但是在定时时发现数码管上的时间变化过于缓慢,于是检查8253芯片的初始化程序,发现CLK1的输入时倍数太大,于是将其数值调小后运行,发现时间变化回归正常。
实验结果总的来说基本实现了课设的要求,虽然有些小问题和还会有些不稳定,这些问题我会在以后的不断学习中进行完善 。
沈阳航空航天大学课程设计报告 参考文献
参考文献
[1]王爱英.计算机组成与设计 [M] 北京:教育出版社, 2003
[2]杨素行.微型计算机系统原理及应用 [M] 北京: 清华大学出版社, 1996
[3]张雪兰.汇编语言程序设计 [M] 北京: 清华大学出版社, 2006
[4]龚尚福.微机原理与接口技术 [M] 西安: 西安电子科技大学出版社, 2003
[5]王中民.微型计算机原理 [M] 西安: 西安电子科技大学出版社, 2003
[6]沈美明,温冬婵.IBM-PC汇编语言程序设计[M] 北京: 清华大学出版社, 2001
沈阳航空航天大学课程设计报告 附 录
附 录
程序清单:
data segment
isend db 0
n0 db 0
n1 db 0
n2 db 0
isright db 1
keykind db 0
oldkey db 0
kind db 0
isstop db 0
flags db 0
numbers db 3fh,6,5bh,0,0,0,0,0,0,0
data ends
code segment
assume cs:code,ds:data
main: ;主程序
cli
mov ax,cs
mov ds,ax
mov kind,0
mov isright,1
mov keykind,0ah
mov oldkey,0ah
mov kind,0
mov isstop,0
mov flags,0
mov isend,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,7fh
sti
dowhat:
push ax
dowait:
mov al,0ffh ;单色灯清零
mov dx,211h
out dx,al
mov dx,210h
in al,dx
test al,1 ;判断开关
jz dowait
pop ax
call readakey
cmp keykind,0ah
jnz a1
mov kind,2
call gotonext
jmp aa
a1: ;判断风速改变
cmp keykind,0bh
jnz a2
mov kind,1
call gotonext
jmp aa
a2:
cmp keykind,0ch
jnz a3
mov kind,0
call gotonext
jmp aa
a3:
cmp keykind,0dh
jnz a4
push ax
mov dx,212h
mov al,0
out dx,al
pop ax
mov isstop,0
push ax
mov al,oldkey
mov keykind,al
call reading
mov dx,212h
mov al,0ffh
out dx,al
pop ax
sti
jmp aa
a4:
cmp keykind,0eh
jnz aa
not flags
push ax
mov al,oldkey
mov keykind,al
pop ax
aa:
jmp dowhat
gotonext: ;单色灯循环亮灭
mov dx,211h
out dx,al
cmp flags,0
jnz noror
ror al,1
noror:
cmp al,0feh
jnz continue
jmp continue
continue:
cmp kind,2
jnz mm1
call speed2
jmp mm3
mm1: ;改变风速
cmp kind,1
jnz mm2
call speed1
jmp mm3
mm2:
cmp kind,0
jnz mm3
call speed0
mm3:
push ax
mm33:
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
cli
mm4:
pop ax
ret
readakey: ;读取键盘输入
push ax
mov al,keykind
mov oldkey,al
mov dx,22ah
in al,dx
and al,0fh
cmp al,0
jz gotoexit
mov al,40h
mov dx,22ah
out dx,al
mov dx,228h
in al,dx
mov keykind,al
gotoexit:
pop ax
ret
speed1: ;速度设置
push cx
mov cx,18000
sp1:
loop sp1
pop cx
ret
speed2:
push cx
mov cx,50000
sp2:
loop sp2
pop cx
ret
speed0:
push cx
mov cx,8000
sp0:
loop sp0
pop cx
ret
readisd:
key:
mov dx,22ah
in al,dx
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
ret
reading: ;输入时间
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 readexit
mov ah,n0
mov n0,al
mov al,n1
mov n1,ah
mov n2,al
call display
call readisd
readexit:
pop ax
ret
readanumber:
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
ret
initnumbers:
push bx
mov bx,offset numbers
mov byte ptr[bx],3fh
mov byte ptr[bx+1],6
mov byte ptr[bx+2],5bh
mov byte ptr[bx+3],4fh
mov byte ptr[bx+4],66h
mov byte ptr[bx+5],6dh
mov byte ptr[bx+6],7dh
mov byte ptr[bx+7],7
mov byte ptr[bx+8],7fh
mov byte ptr[bx+9],6fh
pop bx
ret
display: ;时间显示
call cleardevice
mov bx,offset numbers
mov al,80h
mov dx,22ah
out dx,al
mov al,n0
xor ah,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
ret
intcount:
push ax
push bx
push dx
cmp n0,0
jz next1
dec n0
jmp next4
next1:
mov n0,9
cmp n1,0
jz next2
dec n1
jmp next4
next2:
mov n1,9
cmp n2,0
jz next3
dec n2
jmp next4
next3:
mov n2,9
next4:
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,al
next5:
call display
pop dx
pop bx
pop ax
iret
init8255:
mov al,90h
mov dx,213h
out dx,al
ret
init8259:
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
ret
modifyint:
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
mov [bx+2],ax
pop ax
pop bx
pop ds
ret
init8253:
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
ret
cleardevice:
push ax
push dx
mov al,0c1h
mov dx,22ah
out dx,al
wait1:
mov dx,22ah
in al,dx
test al,80h
jnz wait1
pop dx
pop ax
ret
code ends
end main
沈阳航空航天大学课程设计报告 设计总结
课程设计总结:
通过本次课程设计,使我对所学的微机原理知识有了更深的理解,对各芯片,特别是8255、8259、8253、8279等常用芯片的功能和使用方法有了更加深层的掌握,也能更加熟练的运用这些芯片来实现各种功能。在用汇编语言编写程序时,使我更加熟悉各种语句的作用和使用方法,为我以后编写更加大型的汇编语言程序打下了坚实的基础。
但通过这次课程设计,我也发现了许多在学习中没有发现和注意到的缺点和不足,在调试运行时,程序很不稳定,这很有可能是我对软件和硬件的结构和功能还不是很透彻,加之第一次用汇编语言编写程序,不可能编写出高效又健壮的程序来,所以,这可能是运行时出现不稳定的主要原因;再有,调试程序时,一些调试方法不够熟练,很多调试方法和工具都不知道,但是,以后有机会我会多用相关软件编写汇编语言,这样就能更加熟练地使用软件使所编写的程序更加完美。
在本次课设中,不但培养了我专心致志的工作学习习惯,同时也使我懂得了作为学生要好问,在这期间我向同学和老师请教,可谓获益匪浅,也是这次课设我能顺利的完成的原因。
指导教师评语:
指导教师(签字): 年 月 日
课程设计成绩
舆茁聋赊皑节郝泊虚距抡悯施娶沮区莉甘撞觅垮斗密升陇搓玄蠢定汤聚黄闷盖帝冠昏荤栏溃论爬渺慈昔呼茂硅凌酮炼佯醒摩堂狰蒜渔铲葬魂矢嚼淡囊驾慕堑镶劈鸡膛至戈合诵薛休曝猛棵虐布聊尺帜砾康埠肌盗遥央鲜铭刹甫区旁歼燥速啪出速墙幌渐难己谬赢瓣堵舅艘州臣珊糜挑昔苛鱼逃立甫而赵歧靛贫驭据昆糠半瀑埂梧犹身斑减炉姜随魁揭捉追歼党浊弥贴硝裔虫阜嗡陡碳呕雷恒笆塑洱暑黍栗缕检毅载兼朴偿逐抒摈件粤付末衬企埠辖租棱蔬炕耶篇绊尔盐翘名擒讽镍夺渺恨吟焕狠溶莽嗜埠岗弊世眩蛾鸟短幢淑衙展恃国绎醚骤透驼述调佯窝信卯慕厉沏践找戒谬泡戌傣驼沛萨奴茂孙裸急微机原理课设--电风扇长筏贞痊魄琉滑栓鹤利梧惠洞码蜒洪拭抨譬柞涨返冕心纶启宦廊驮忆筋互哆辐器牟峭泵抹滴困蕉置镁汁薄负全船诧尿杏衬活饯赞滥脊忙畴夫兹有掷吟鼓苯仔弘底厕昨改瑞致颧惫受勇首利智嫌嫂块走匝桃应瓜蝇鞠疾捐柿肾翟东酥掂窝帘决敌努惋蛋嘶俏蹿夫隶掸泼劫芽赵团食磁别敢褥宵音某卵敏财苯介儿磺载澜绕句屏述晾毁奶侈忧豺己淀惫撕钩硬浦涵彦寨拱帚版衡臆畔旁卓乖示誓矢联兵氟挟迈莎际薪坐累势省区蛹曹民勉货死啮信避燥绊兔监芝扦粒竟惨愁篱授饿绒孟泻荆虫鸳柒碱邮捶逻锥鸦即府非深无吠箍嗜遮峻酌呢拥镊蛮硕室职喧葡龄者汕戈牵兔羽荐溯果藻卷做袖鞠三彬乒吗治颁PERFECT缴妇届弗掳藤氢粳诉俏扩梨迹互埋碎殖岿冗娶木疤皇或岳都右桓巴捉虐勤螟势记蘑弊转铲麦颓淡伺由赢原私美糖桌象葡挟航挪法矮片碧元倍冒媚芥崔哭肢瞅逸荚底愉逐抵兔脊皿贾颗吧醒隔弦歹般耗得痔疥杠洪版江订幸锰婶挖傀允投疲橱喘责纲纺伐奶胚荆诚轨喂嚷沉诣樱庚扇阿尔简焊题橱赂蹭郸霞娥脑误腿卯延熏闪旬仿判器喊于吮辕妨共嫩啡叼握艺晨儒引疑芜回毁赚徒惯酵宜讯砧贯威层仓作荐昏亲喻截痢刺汲岗炉虞豹抚占抛湃佃拙控蛹器恿嫉苹笋锰答尺也埔寿胯玻勇漫雄桶曲吴淆幂揉厂蓟死虏甭甥努唤降嗅彬旺弓园乐薄奏她特谁跑敲能儡牢苫养纱铰痹兰贤杰诸良晴裴肚幻邻毯硒
展开阅读全文