1、微机原理及应用课程设计报告课程设计报告( 20152016 年度第 一 学期)课 程: 微机原理及应用 题 目: 模拟汽车限速 院 系: 自动化系 班 级: 学 号: 学生姓名: 指导教师: 设计周数: 一周 成 绩: 日期:2016年 1 月 15 日微机原理及应用课程设计任 务 书一、 目的与要求1通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。3培养学生分析问题、解决问题的能力。4培养学生对微型计算机应用系统的基本设计能力。5提高学生的实践动手能力和创新能力。二、 主要内容1模拟汽车限速2针对所选择的设计题目进行硬件
2、设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。3根据所选题目的要求对微机系统进行程序设计,绘制程序总体流程图并编写源程序上机调试。4写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。三、 进度计划序号设计内容完成时间备注1选择课程设计题目,查阅相关资料2016年1月11日2进行软硬件设计2016年1月11日3上机调试2016年1月13日4撰写设计报告2016年1月14日5演示及答辩2016年1月15日四、 设计成果要求1系统硬件设计合理,软件编程达到设计
3、要求。2系统硬件结构图和软件流程图绘制清楚规范。3设计报告完整规范。五、 考核方式根据设计任务的完成情况、课程设计报告撰写情况及演示答辩情况采用五级记分制评定成绩。 一、课程设计目的与要求1通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。3培养学生分析问题、解决问题的能力。4培养学生对微型计算机应用系统的基本设计能力。5提高学生的实践动手能力和创新能力。二、课程设计正文1.设计题目:模拟汽车限速2.设计思想1)总体设计方案本设计主要是模拟汽车限速,通过统计开关次数判断汽车处于何种状态并用LED灯及点阵显示出来,并用按键“0
4、”结束系统,按键“1”重启系统。8253的计数器0、1分别工作在方式0(计数)、3(方波);用8259来申请中断;8255用来输出红绿灯状态;用1片74138和4片74574模拟实验箱上16*16点阵的内部电路设计,用来显示字符;用几个逻辑门电路和74373/74245芯片模拟实验箱上6位7段数码管的内部电路,并其进行位选。2)系统主要功能手动开关模拟行车速度,每按动开关一次产生一次中断,统计按的次数,每10秒采集一次统计结果。并用数码管不断做精确的10秒倒计时,若按开关次数在6次以内(包括6次),亮绿灯、16*16点阵显示“安全”;若超过6次(不包括6次),亮黄灯报警、16*16点阵显示“超
5、速”;若超过8次(不包括8次),亮红灯表示拦截、扬声器报警而且16*16点阵显示“违规”。3.系统工作原理介绍1.硬件接口电路设计(1)74HC138总译码电路如下图,A15需维持1才能保证74HC138正常工作,则、分别对应地址8000H-8FFFH、9000H-9FFFH、0A000H-0AFFFH、0B000H-0BFFFH、0C000H-0CFFFH。(2)16*16点阵的片选地址为0C000H,则接入其.注:数据总线低8位AD0.7即偶存储体传输数据,即8086的A0需维持0,导致8086的A2、A1接入74HC138的B、A,则16*16点阵的列低八位(CLCK)、列高八位(CHC
6、K)、行低八位(RLCK)、行高八位(RHCK)地址分别为0C000H、0C002H、0C004H、0C006H。 (3)6位7段数码管的片选地址为0B000H,则接入。注:数据总线低8位AD0.7即偶存储体传输数据,即8086的A0需维持0,导致8086的A3、A2、A1分别接入三个与非门,则数码管位选/键盘列输出(OUTBIT)、数码管段选(OUTSEG)地址分别为0B004H、0B008H。(4)8253A的片选地址为0A000H,则接入。计数器0、1分别工作在方式0(计数)、3(方波)A.CLK0、CLK1接入125 kHz的时钟源;B.OUT0持续输出低电平直至2ms后变高电平,OU
7、T1输出的2500Hz方波接出蜂鸣器;C.GATE0接入电源保证计数器0能持续计数,GATE1接入Q3即8255的PA3口。 注:数据总线低8位AD0.7即偶存储体传输数据,即8086的A0需维持0,导致8086的A2、A1接入8253A的A1、A0,则8253A的计数器0、计数器1、控制器地址分别为A000H、A002H、A006H。 (5)8255A的片选地址为8000H,则接入。A.PA口输出数据:PA3、PA2、PA1、PA0分别接出8253的GATE1(控制计数器1是否工作,即决定蜂鸣器是否发声)、红色LED、黄色LED、绿色LED(控制LED的亮灭);B.PB口读入数据:PB0接入
8、8253的OUT0(通过读入OUT0状态,判断是否已到2ms)。注:数据总线低8位AD0.7即偶存储体传输数据,即8086的A0需维持0,导致8086的A2、A1接入8255A的A1、A0,则8255A的PA口、PB口、控制器地址分别为8000H、8002H、8006H。 (6)Proteus的8086模型取的中断号是最后一次IO操作时总线上的数据, 而非 8259 设置的中断号。担心这个缺陷给后续仿真带来影响,故Proteus中暂时不使用8259A,直接向8086的NMI端接入中断请求信号(由开关提供),上升沿触发中断。但在实验室中需由8259A提供中断申请,电路也需做出修改。8259A的片
9、选地址为9000H,则接入IR2端输入中断请求信号(由开关提供)上升沿触发。5.系统调试结果1.上一个10s之内不按开关,结果为:绿灯亮,16*16点阵滚动显示“安全”。2.上一个10s之内按7次开关,结果为:黄灯亮,16*16点阵滚动显示“超速”。3.上一个10s之内按12次开关,结果为:红灯亮,蜂鸣器发出响声,16*16点阵滚动显示“违规”。三、课程设计总结1)问题分析与总结在实验室搭建硬件电路要注意与Proteus上的区别,有些是在proteus上可以连接的,但在实验箱上是没有的。比如NMI中断,又比如在Proteus上5253芯片有3个计数器,但在实验箱上只有2个计数器。在实验箱上16
10、*16点阵是可以显示完整的汉字的,但在Proteus上第8列单步运行时是可以被点亮,但全速运行时不能被点亮,这个问题目前还没有被解决。也是在Proteus仿真中,点阵显示个别汉字时仍看得到闪烁,证明动态显示做得不够好,尝试过几种方法,比如:扫描换为列扫描;考虑可能是未消隐带来影响,扫描下一行前,关掉所有行;原意为2ms扫描一行(对应频率为31.25Hz),实际上还需执行其他指令,会延长扫描时间即降低频率,可能会到达人眼可分辨的区间内,故试图1ms扫描一行,但1s计数次数CX增加至512左右时程序会跑飞,且暂时原因不明,目前尚未能解决这个问题。2)实验心得本次试验从最开始的尝试到最后全部完成,历
11、经很长时间,做了很多努力,让我们都非常欣慰,在做实验的过程中,不断尝试,优化,大大提高了我们对专业知识的掌握,设计的过程虽然有点辛苦,但都很开心,我认为这点很重要。希望每次的实验都可以从兴趣而发,以乐趣结束,不再为书本而苦恼。相信我们也会越做越好。另外感谢老师的耐心指导和周围同学们的无私帮助,给了我们很大的帮助。四、参考文献 1 马平,姚万业,微机原理及应用,北京:中国电力出版社,2002.12附录(设计流程图、程序等)设计流程图:源程序及注释:;Proteus:加入数码管,2ms列扫描点阵,使用NMI中断A8255 EQU 8000H ;8255的PA口地址B8255 EQU 8002H ;
12、8255的PB口地址K8255 EQU 8006H ;8255控制器地址O8259 EQU 9000H ;8259偶地址J8259 EQU 9002H ;8259奇地址J8253_0 EQU 0A000H ;8253计数器0地址J8253_1 EQU 0A002H ;8253计数器1地址K8253 EQU 0A006H ;8253控制器地址KEYIN EQU 0B002H ;键盘行读入OUTBIT EQU 0B004H ;数码管位选/键盘列输出地址OUTSEG EQU 0B008H ;数码管段选地址COLLOW EQU 0C000H ;点阵列低八位地址COLHIGH EQU 0C002H ;点
13、阵列高八位地址 ROWLOW EQU 0C004H ;点阵行低八位地址ROWHIGH EQU 0C006H ;点阵行高八位地址CODE SEGMENT ASSUME CS:CODESTART:CLI ;关中断;8253A初始化(CLK0=CLK1=125000Hz) MOV DX,K8253 MOV AL,30H ;00110000B OUT DX,AL ;计数器0:工作方式0(计数)+二进制 MOV AL,76H ;01110110B OUT DX,AL ;计数器1:工作方式3(方波)+二进制 MOV DX,J8253_0 MOV AL,0FAH ;计数器0预置值250=0FAH OUT D
14、X,AL ;计数器0持续低电平直至2ms后变高电平 MOV AL,00H OUT DX,AL MOV DX,J8253_1 MOV AL,32H ;计数器1预置值50=32H OUT DX,AL ;计数器1输出2500Hz方波 MOV AL,00H OUT DX,AL;8255初始化 MOV DX,K8255 MOV AL,82H ;10000010B=82H OUT DX,AL ;A口方式0输出,B口方式0输入;非规范装入NMI中断向量 MOV AX,0 MOV DS,AX ;中断向量表段基址0000H MOV BX,02H*4 ;BX为NMI即2号中断向量指针 MOV AX,OFFSET
15、INTP MOV BX,AX INC BX INC BX MOV AX,SEG INTP ;中断子程序INTP入口地址 MOV BX,AX ;放入NMI中断向量表2号;主程序 MOV DX,A8255 MOV AL,00H ;LED全灭+计时器2停止工作 OUT DX,AL MOV AX,DATA MOV DS,AX STI ;开中断 L8: MOV BH,5 ;速度标志初始化为5;等待定时时间到L0: MOV DI,0 ;中断统计次数初始化为0 MOV BL,10 ;10s计数次数初始化为10L1: MOV CX,0 ;1s计数次数初始化为0L2: MOV DX,B8255 IN AL,DX
16、 ;读OUT0即PB0口状态 AND AL,01H ;屏蔽PB口高7位 CMP AL,1 ;OUT0输出高电平则2ms到 JNZ L2 ;2ms到则重新启动计数器0 MOV DX,K8253 MOV AL,30H ;01110000B OUT DX,AL ;计数器0:工作方式0(计数)+二进制 MOV DX,J8253_0 MOV AL,0FAH ;计数器0预置值250=0FAH OUT DX,AL MOV AL,00H OUT DX,AL ;考虑7段数码管显示 CMP BL,9 JLE L6 ;BL=9转到L6 CALL SMG1 ;BL=10调用SMG1;考虑16*16点阵显示L6: CM
17、P BH,5 JE L3 ;BH=5转到L3 CALL DIAN ;BH!=5调用DIANL3: INC CX CMP CX,500 JNZ L2 ;CX=500则1s到 MOV DX,OUTBIT MOV AL,0DFH ;11011111B OUT DX,AL ;低电平扫描第1列 MOV DX,KEYIN IN AL,DX ;读第1列的行键 NOT AL AND AL,0FH ;屏蔽无用的高4行 CMP AL,1 JNE L7 CALL STOP ;AL=1(即按下键0)调用STOP JMP L8L7: CALL SMG2 ;调用SMG2 DEC BL JNZ L1 ;BL=0则10s到;
18、空,空,空,空,声,红,黄,绿(高电平:点灯+计时器1输出方波) CMP DI,8 JG L5 CMP DI,6 JG L4 MOV DX,A8255 MOV AL,01H ;00000001B OUT DX,AL ;DI=6即未超速,点绿灯 MOV BH,0 JMP L0L4: MOV DX,A8255 MOV AL,02H ;00000010B OUT DX,AL ;6DI8即严重超速,点红灯+启动扬声器 MOV BH,2 JMP L0;按下键0停止系统子程序STOP PROC NEAR;关闭LED和扬声器 MOV DX,A8255 MOV AL,00H OUT DX,AL;关闭6位数码管
19、 MOV DX,OUTSEG MOV AL,00H OUT DX,AL;关闭点阵所有列 MOV AL,0FFH MOV DX,COLLOW OUT DX,AL MOV DX,COLHIGH OUT DX,AL;查询按键1是否按下(即重启系统)T0: MOV DX,OUTBIT MOV AL,0DFH ;11011111B OUT DX,AL ;低电平扫描第1列 MOV DX,KEYIN IN AL,DX ;读第1列的行键 NOT AL AND AL,0FH ;屏蔽无用的高4行 CMP AL,2 JNE T0 RET ;AL=2(即按下键1)返回STOP ENDP;数码管动态显示10子程序SMG
20、1 PROC NEAR PUSH CX MOV AX,CX ;AX=CX MOV CL,2 ;CL=2 DIV CL ;AX%CL=CX%2=AH CMP AH,0 JNZ S1S0: MOV DX,OUTBIT MOV AL,01H ;00000001B选WEI0 OUT DX,AL MOV DX,OUTSEG MOV AL,3FH ;显示0 OUT DX,AL JMP S3S1: MOV DX,OUTBIT MOV AL,02H ;00000010B选WEI1 OUT DX,AL MOV DX,OUTSEG MOV AL,06H ;显示1 OUT DX,ALS3: POP CX RETSM
21、G1 ENDP;数码管静态显示91子程序SMG2 PROC NEAR PUSH BX MOV BH,0 DEC BL ;BX=BL MOV SI,BX ;SI=BX=BL LEA BX,SMGDM MOV DX,OUTBIT MOV AL,01H ;00000001B选WEI0 OUT DX,AL MOV DX,OUTSEG MOV AL,BX+SI ;显示 OUT DX,AL POP BX RETSMG2 ENDP;点阵动态显示汉字子程序DIAN PROC NEAR PUSH CX PUSH BX;选出要扫描的列(每隔4ms扫描下列) MOV AX,CX MOV CL,16 DIV CL ;
22、AX%CL=CX%16=AH MOV CL,AH ;CL存放右移次数;选出本列要输出的行数据 SHL AH,1 MOV AL,AH ;AL=AH*2 MOV AH,0 MOV SI,AX ;SI存放行数据的相对位置;向要扫描的列放入低电平 MOV AX,7FFFH ;0111111111111111B ROR AX,CL MOV DX,COLLOW OUT DX,AL MOV DX,COLHIGH MOV AL,AH OUT DX,AL;选择要输出哪组字:安全,超速,违规 SHL BH,1 SHL BH,1 ;BH=BH*4 MOV CL,BH ;CL存放组相对TABLE的位置;选择本组要输出
23、的字(第1、第2个字隔1s输出) MOV BH,0 MOV AX,BX MOV BL,2 DIV BL ;BL%2=AH SHL AH,1 ;AH存放字相对组的位置 ADD CL,AH MOV CH,0 ;CX存放字相对TABLE的位置 PUSH SI MOV SI,CX LEA BX,TABLE MOV CX,BX+SI MOV BX,CX ;BX存放字相对DATA的位置 POP SI;高电平选择输出的行 MOV DX,ROWHIGH MOV AL,BX+SI OUT DX,AL MOV DX,ROWLOW MOV AL,BX+SI+1 OUT DX,AL POP BX POP CX RET
24、DIAN ENDP;中断服务子程序INTP PROC NEAR INC DI IRETINTP ENDPCODE ENDS ;CODE逻辑段结束DATA SEGMENT ;DATA逻辑段开始;共阴极数码管段码表SMGDM DB 3FH,06H,5BH,4FH ;0-7 DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH ;8-F DB 39H,5EH,79H,71H;字模低电平列扫描,高电平点亮行(先输出高8位,后输出低8位);安Z1_0 DB 01H,00H,09H,01H,31H,01H,21H,21H DB 21H,62H,21H,92H,0AFH,14H,61H
25、,08H DB 21H,08H,21H,34H,21H,0C4H,21H,02H DB 29H,01H,31H,00H,01H,00H,00H,00H;全Z1_1 DB 01H,00H,01H,02H,02H,02H,04H,22H DB 0AH,22H,12H,22H,22H,22H,0C3H,0FEH DB 22H,22H,12H,22H,0AH,22H,04H,22H DB 02H,02H,01H,02H,01H,00H,00H,00H;超Z2_0 DB 02H,01H,12H,06H,12H,0F8H,12H,04H DB 0FFH,0FEH,12H,22H,12H,22H,42H,0
26、2H DB 45H,0F2H,79H,12H,41H,12H,45H,12H DB 43H,12H,7DH,0F2H,00H,02H,00H,00H;速Z2_1 DB 02H,00H,02H,02H,42H,04H,33H,0F8H DB 00H,04H,20H,12H,2FH,22H,29H,42H DB 29H,82H,0FFH,0FAH,29H,82H,29H,42H DB 2FH,22H,20H,12H,00H,02H,00H,00H ;违 Z3_0 DB 02H,02H,42H,04H,33H,0F8H,00H,04H DB 20H,82H,24H,82H,24H,82H,24H,8
27、2H DB 0FFH,0FEH,24H,82H,24H,82H,24H,92H DB 24H,8AH,20H,0F2H,00H,02H,00H,00H;规Z3_1 DB 01H,02H,11H,04H,11H,18H,0FFH,0E0H DB 11H,10H,11H,0DH,01H,02H,7FH,0C4H DB 40H,18H,40H,60H,4FH,80H,40H,7EH DB 40H,01H,7FH,0C1H,00H,07H,00H,00H;字模表(1个字占2字节,1组字占4字节)TABLE DW Z1_0,Z1_1,Z2_0,Z2_1,Z3_0,Z3_1DATA ENDS ;DATA逻
28、辑段结束 END START ;源程序结束在实验室中,代码须作出以下修改:;地址修改A8255 EQU 8000H ;8255的PA口地址B8255 EQU 8001H ;8255的PB口地址K8255 EQU 8003H ;8255控制器地址O8259 EQU 9000H ;8259偶地址J8259 EQU 9001H ;8259奇地址J8253_0 EQU 0A000H ;8253计数器0地址J8253_1 EQU 0A001H ;8253计数器1地址K8253 EQU 0A003H ;8253控制器地址KEYIN EQU 0B001H ;键盘行输入地址OUTBIT EQU 0B002H
29、;数码管位选/键盘列输出地址OUTSEG EQU 0B004H ;数码管段选地址COLLOW EQU 0C000H ;点阵列低八位地址COLHIGH EQU 0C001H ;点阵列高八位地址 ROWLOW EQU 0C002H ;点阵行低八位地址ROWHIGH EQU 0C003H ;点阵行高八位地址;添加8259A初始化 MOV DX,O8259 ;8259A偶地址9000H MOV AL,13H ;ICW1=00010011B=13H, OUT DX,AL ;上升沿触发+单片+8086必设ICW4 MOV DX,J8259 ;8259A奇地址9002H MOV AL,80H ;ICW2=10000000B=80H, OUT DX,AL ;中断类型号为80H87H MOV DX,J8259 ;8259A奇地址9002H MOV AL,01H ;ICW4=00000001B=01H, OUT DX,AL ;全嵌套+非缓冲+普通中断结束 ;非规范装入中断向量 MOV AX,0 MOV DS,AX ;中断向量
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1