微机原理课程设计汽车速度控制.doc_第1页
微机原理课程设计汽车速度控制.doc_第2页
微机原理课程设计汽车速度控制.doc_第3页
微机原理课程设计汽车速度控制.doc_第4页
微机原理课程设计汽车速度控制.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西 安 邮 电 大 学(计算机学院)硬件课程设计报告题 目: 汽车速度控制的设计与实现 专业名称: 软件工程班 级: 软件1201 学生姓名: 学号(8位): 指导教师: 设计起止时间:2014年12月15日2014年12月26日1. 设计目的:微机接口电路的设计及应用。通过微机原理与接口课程设计,使学生能够进一步了解微型计算机工作原理,微型计算机的硬件结构及微型计算机软件编程。要求学生根据接口电路的硬件要求进行计算机的汇编语言程序设计,使学生的软件编程能力得到加强,对接口电路的综合应用能力有较大提高。利用所学微机的理论知识进行软硬件整体设计,提高综合应用能力。通过设计掌握综合使用基本输入设备,通用接口芯片,专用接口芯片的方法;熟悉并行接口芯片8255的使用与硬件接口方法,熟悉8255的各种工作方式,掌握8255的编程方法;掌握实时处理程序的编制和调试方法。从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。同时给学生提供更多、更好的训练机会,培养学生的创新能力。2. 设计内容:所选题目的具体要求。在自行设计接口板的的按键转换汽车的挡位,用发光二极管显示挡位,用数码管显示汽车的速度。(1) 按“1”键启动系统,汽车以最低速度行驶,同时用1盏绿灯显示挡位,数码管显示速度(最低速度为5Kmh)。当需要换档时,用键盘键入2、3键,并加用一盏黄灯和一盏红灯显示,同时在数码管上显示相应的速度。(2) 汽车慢加速时用“A”键,急加速时用“B”键。慢刹车时用“C”键,急刹车时用“D”键。加速和刹车时用数码管显示相应的速度变化。(3) 当汽车需紧急停车时,键入“ESC”键,所有发光二极管熄灭,同时数码管显示“0”。3. 设计过程: 根据设计内容,给出设计方案,选择需要的接口芯片和外设等,确定相应的接口芯片的工作方式,并给出proteus下设计出的系统原理图,见文章末尾 根据系统要求,设计程序,给出流程图描述程序。数码管流程图程序流程:设置初始状态:速度为0,数码管显示为01档初始状态:速度为5,LED1亮1档最大速度状态:速度为25,数码管显示252档初始状态:速度为25,LED2亮2档最大速度状态:速度为60,数码管显示603档初始状态:速度为60,LED3亮3档最大速度状态:速度为120,数码管显示120进入初始状态,判断是否按下K1开关,若没按下则回到初始状态,若按下则进入1档初始状态1档初始状态下接受指令:判断是否按下KA开关,若按下则进入慢加速状态,直到速度加到1档的最大速度25,进入1档最大速度状态;若没按下KA开关,则判断是否按下KB开关,若按下则进入快加速状态,直到速度加到1档的最大速度25,进入1档最大速度状态;若没按下KB开关,则判断是否按下KC开关,若按下则进入慢减速状态,直到速度减到0,进入初始状态;若没按下KC开关,则判断是否按下KD开关,若按下则进入快减速状态,直到速度减到0,进入初始状态;若没按下KD开关,则判断是否按下KE开关,若按下则进入停车状态,速度减到0,进入初始状态;若没按下KE开关,则停留在1档初始状态,等待接收指令;1档最大速度状态下接收指令:判断是否按下K2开关若按下,若按下则进入2档初始状态;若没按下K2开关,则判断是否按下KC开关,若按下则进入慢减速状态,直到速度减到0,进入初始状态;若没按下KC开关,则判断是否按下KD开关,若按下则进入快减速状态,直到速度减到0,进入初始状态;若没按下KD开关,则判断是否按下KE开关,若按下则进入停车状态,速度减到0,进入初始状态;若没按下KE开关,则停留在2档初始状态,等待接收指令;进入2档初始状态后,它的程序流程和1档初始状态流程一样;进入3档初始状态后,流程和1、2档一样,只是当进入3档最大速度状态后,只能接受减速停车指令。 在前两步的基础上,给出proteus下程序运行的结果截图。见文章末尾 具体硬件实现,给出实际所焊电路的系统连线图。 在所焊电路的板子上运行程序,拍照,打印出系统运行截图。4. 设计总结:分析自己的设计结果,总结设计中所遇到的问题以及采取的解决办法。设计结果分析:整个系统运行过程中考虑到了很多情况,做得比较细腻,比如1档必须到达了最大速度才能接收2档指令,不能越到3档;在加速过程中速度只会加到相应档位的最大速度,不会超过它;不足的是:在加速减速状态中不会被中断,速度会加到最大或减到0,这点还需改进。遇到问题:不知道如何让数码管正确的显示相应的数字解决办法:先查看实验指导书了解了数码管的线路连接,然后上网查找数码管显示的方法,再和组员一行一行代码的编写,试了很多次数码管都不显示。最后才知道了程序最开始没有定义堆栈段,导致要显示的数据不能压栈。最终解决了数码管的问题。遇到问题:编译时出现Relative jump out of range错误 指定的转移超出了允许的范围(-128+127)解决办法:该问题是由于转移范围超出允许范围,我们就在转移的中间再加一个转移,把距离一分为二,从而解决了问题。比如jump state1;出现错误,我们就改为state1jmp: jump state1; jump state1jmp; 软件调试程序完成后就可以对它进行编译和执行,如果发现有错误,则返回程序中修改,完成后再次编译和执行,就这样周而复始的重复进行,直到没有出现编译错误之后就可以运行了。运行的时候也有问题出现。例如程序的结构有问题,对于寄存器的使用不合理,或对于寄存器的重复使用导致数据混乱,循环不能正常的结束等问题。要解决这些问题就要对汇编用深入的理解,画清楚流程图,使用结构简单的循环,分布编写程序,同时注意对程序的注释可以减少问题。对于寄存器的使用问题可以才用入栈出栈来保存部分寄存器的值来安排寄存器的使用。5. 设计心得课程设计刚开始的时候,对整个系统的设计完全没有思路,也不知道该先从哪部分下手。在老师给我们讲解了一些注意事项,还用仿真给我们演示了设计该达到的要求之后,小组四个人就开始讨论系统的整个运行流程,讨论出方案后就开始分工,我做的是“汽车速度控制”的软件部分。在这之前我对汇编语言的编写不是很熟悉,对各种寄存器的功能及使用不是很了解, 担心自己不会或者做不好。为了完成任务,我不停的翻阅书籍,查看资料,和组员共同商量,尽自己最大的努力去做,做到自己最好的,最后成功完成了任务。在做整个设计时应先讨论好设计方案,画好流程图,要完全了解整个流程之后才去编写程序,这样才能有条不紊地做实验,不然只会弄得一团糟。同时我明白,要做好一个课题,细心,耐心,好奇心和同学之间的有效合作都是不可缺少的,要将书本知识与实际操作紧密联系起来,在实践中发现和解决问题是非常重要的。在实验的过程中也出现了一些问题,大部分来自自身的疏忽与对知识掌握的不牢固,这些方面是要加强的!通过老师的帮助,在解决问题的过程中,让我们对问题的认知更加深刻了,这些都将有益于我们学到更多更为有用的东西。同时也知道了团队合作的重要性,在实验中,同组成员在一起发现问题、讨论问题,大大提高了解决问题的速度。同时,通过课程设计大家得到了很好的锻炼,也期待我们应该有更多实际操作的机会,加强合作与创新方面的能力。感谢老师的悉心指导。设计过程:原理图:流程图:运行截图:板子图:源代码:源代码:IO_KEY_123A EQU 010BIO_KEY_BCDE EQU 100BMY8255C EQU 100BMY8255A EQU 000BIO_SELECT_OUTSMG1 EQU 010BK1 EQU 00010000BK2 EQU 00100000BK3 EQU 01000000BKA EQU 10000000BKB EQU 00000001BKC EQU 00000010BKD EQU 00000100BKE EQU 00001000BLED1 EQU 11101111BLED2 EQU 11011111BLED3 EQU 10111111BLED4 EQU 01111111BSELECT_LED_NONE EQU 0FFH; 减缓速度增加或减少速率的倍数(快); 最大为 216/数码管要显示的最大速度SLOW_DOWN_SPEED_FAST EQU 10; 同上(慢)SLOW_DOWN_SPEED_SLOW EQU 200DATA SEGMENT DATA_SMG DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H;数码管表 SELECT_OUTSMG1 DB 0H, 0FEH, 0FDH, 0FBH, 0F7HDATA ENDSISTACK SEGMENT STACK DATA2 DW 16 DUP(?) TOP EQU LENGTH DATA2ISTACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:ISTACK START:MOV AX,DATA MOV DS,AX MOV AX,ISTACK MOV SS,AX MOV AX,TOP MOV SP,AX;速度为0 state1:MOV AX,0state1_INit: ; 数码管显示速度 CALL OUTSMG1 ; LED 显示档位 MOV AL, SELECT_LED_NONE OUT MY8255C, AL ; 测试 K1 是否按下,若是跳到状态 2, 否则回到状态 1 开始 IN AL, IO_KEY_123A AND AL, K1 CMP AL, 0 JE state2 JMP state1;1档state2: ; DX = 当前速度 * SLOW_DOWN_SPEED_SLOW ; 当前速度 MOV AX, 0 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AX;一档下速度升为5state2_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 5 JE state3 JMP state2_after_INit;一档速度为5,再接受加速减速指令state3: MOV AX, 5 CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL ; 测试慢加速指令KA IN AL, IO_KEY_123A AND AL, KA CMP AL, 0 JE state4 ; 测试快加速指令KB IN AL, IO_KEY_BCDE AND AL, KB CMP AL, 0 JE state5 ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state6 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state7 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state1 JMP state3;一档下的慢加速,速度最高为25state4: MOV AX, 5 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate4_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 25 JE state8 JMP state4_after_INit;一档下的快加速,速度最高为25state5: MOV AX, 5 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate5_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 25 JE state8 JMP state5_after_INitstate1jmp: jmp state1;一档下的慢减速state6: MOV AX, 5 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate6_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 0 JE state1jmp ;state1 JMP state6_after_INit;一档下的快减速state7: MOV AX, 5 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate7_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 0 JE state1jmp ;state1 JMP state7_after_INit;一档加到25后进入该状态,接受二档,慢减速。快减速,停车等指令state8: MOV AX, 25 CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL ; 测试二档指令K2 IN AL, IO_KEY_123A AND AL, K2 CMP AL, 0 JE state9 ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state10 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state11 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state1jmp JMP state8state2jmp: jmp state1 state9jmp: JMP state14state10jmp: JMP state15;进入二档模式,接受加速减速指令state9: MOV AX, 25 CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL ; 测试慢加速指令KA IN AL, IO_KEY_123A AND AL, KA CMP AL, 0 JE state12 ; 测试快加速指令KB IN AL, IO_KEY_BCDE AND AL, KB CMP AL, 0 JE state13 ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state9jmp ;state14 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state10jmp ;state15 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state2jmp ;state1 JMP state9;一档下的慢减速state10: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate10_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 0 JE state2jmp JMP state10_after_INit;一档下的快减速state11: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate3jmp: JMP state1state11_after_INit: CALL OUTSMG1 MOV AL, LED1 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 0 JE state3jmp JMP state11_after_INit;二档下的慢加速指令,最高速度为60state12: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate12_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 60 JE state16 JMP state12_after_INit;二档下的快加速模式,最高速度为60state13: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate13_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 60 JE state16 JMP state13_after_INit;二档下的慢减速模式,最小速度为25state14: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate14_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 0 JE state3jmp JMP state14_after_INitstate4jmp: JMP state1;二档下快减速模式,最小速度为25 state15: MOV AX, 25 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate15_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 0 JE state4jmp JMP state15_after_INit;二档下速度达到最大60,等待三档或减速指令state16: MOV AX, 60 CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL ; 测试进入三档指令K3 IN AL, IO_KEY_123A AND AL, K3 CMP AL, 0 JE state17 ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state18 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state19 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state4jmp JMP state16state5jmp: JMP state1 state8jmp: JMP state23 state11jmp: JMP state22;进入三档模式,相应LED灯亮,等待接收加速减速指令state17: MOV AX, 60 CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL ; 测试慢加速指令KA IN AL, IO_KEY_123A AND AL, KA CMP AL, 0 JE state20 ; 测试快加速指令KB IN AL, IO_KEY_BCDE AND AL, KB CMP AL, 0 JE state21 ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state11jmp ;state22 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state8jmp ;state23 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state5jmp ;state1 JMP state17;二档下达到最高速度60后慢减速 state18: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate18_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 0 JE state5jmp JMP state18_after_INit;二档下达到最高速度60后快减速state19: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate19_after_INit: CALL OUTSMG1 MOV AL, LED2 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 0 JE state5jmp JMP state19_after_INit;三档下慢加速,最大速度为120state20: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate20_after_INit: CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 120 JE state24 JMP state20_after_INit;三档下快加速,最大速度为120state21: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate21_after_INit: CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL INC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 120 JE state24 JMP state21_after_INitstate6jmp: JMP state1 ;三档下慢减速 state22: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate22_after_INit: CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP AL, 0 JE state6jmp ;state1 JMP state22_after_INit;三档下快减速 state23: MOV AX, 60 MOV CL, SLOW_DOWN_SPEED_FAST MUL CL MOV DX, AXstate23_after_INit: CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_FAST DIV CL MOV AH, 0 CMP AL, 0 JE state6jmp ;state1 JMP state23_after_INitstate7jmp: JMP state1 ;三档下速度达到最大值120,等待减速指令 state24: MOV AX, 120 CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL ; 测试慢减速指令KC IN AL, IO_KEY_BCDE AND AL, KC CMP AL, 0 JE state25 ; 测试快减速指令KD IN AL, IO_KEY_BCDE AND AL, KD CMP AL, 0 JE state26 ; 测试停车指令KE IN AL, IO_KEY_BCDE AND AL, KE CMP AL, 0 JE state7jmp ;state1 JMP state24;三档速度达到最大值120后慢减速state25: MOV AX, 120 MOV CL, SLOW_DOWN_SPEED_SLOW MUL CL MOV DX, AXstate25_after_INit: CALL OUTSMG1 MOV AL, LED3 OUT MY8255C, AL DEC DX MOV AX, DX MOV CL, SLOW_DOWN_SPEED_SLOW DIV CL MOV AH, 0 CMP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论