微机原理课程设计汽车速度控制.docx
《微机原理课程设计汽车速度控制.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计汽车速度控制.docx(7页珍藏版)》请在冰点文库上搜索。
微机原理课程设计汽车速度控制
微机原理课程设计汽车速度控制
微机原理课程设计汽车速度控制西安邮电大学(计算机学院)硬件课程设计报告题目:
汽车速度控制的设计与实现专业名称:
软件工程班级:
软件1201学生姓名:
学号(8位):
指导教师:
设计起止时间:
2014年12月15日~2014年12月26日1.设计目的:
微机接口电路的设计及应用。
通过《微机原理与接口》课程设计,使学生能够进一步了解微型计算机工作原理,微型计算机的硬件结构及微型计算机软件编程。
要求学生根据接口电路的硬件要求进行计算机的汇编语言程序设计,使学生的软件编程能力得到加强,对接口电路的综合应用能力有较大提高。
利用所学微机的理论知识进行软硬件整体设计,提高综合应用能力。
通过设计掌握综合使用基本输入设备,通用接口芯片,专用接口芯片的方法;熟悉并行接口芯片8255的使用与硬件接口方法,熟悉8255的各种工作方式,掌握8255的编程方法;掌握实时处理程序的编制和调试方法。
从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。
同时给学生提供更多、更好的训练机会,培养学生的创新能力。
2.设计内容:
所选题目的具体要求。
在自行设计接口板的的按键转换汽车的挡位,用发光二极管显示挡位,用数码管显示汽车的速度。
(1).按“1”键启动系统,汽车以最低速度行驶,同时用1盏绿灯显示挡位,数码管显示速度(最低速度为5Km/h)。
当需要换档时,用键盘键入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,这点还需改进。
遇到问题:
不知道如何让数码管正确的显示相应的数字解决办法:
先查看实验指导书了解了数码管的线路连接,然后上网查找数码管显示的方法,再和组员一行一行代码的编写,试了很多次数码管都不显示。
最后才知道了程序最开始没有定义堆栈段,导致要显示的数据不能压栈。
最终解决了数码管的问题。
遇到问题:
编译时出现Relativejumpoutofrange错误——指定的转移超出了允许的范围(-128~+127)解决办法:
该问题是由于转移范围超出允许范围,我们就在转移的中间再加一个转移,把距离一分为二,从而解决了问题。
比如jumpstate1;出现错误,我们就改为state1jmp:
jumpstate1;jumpstate1jmp;软件调试程序完成后就可以对它进行编译和执行,如果发现有错误,则返回程序中修改,完成后再次编译和执行,就这样周而复始的重复进行,直到没有出现编译错误之后就可以运行了。
运行的时候也有问题出现。
例如程序的结构有问题,对于寄存器的使用不合理,或对于寄存器的重复使用导致数据混乱,循环不能正常的结束等问题。
要解决这些问题就要对汇编用深入的理解,画清楚流程图,使用结构简单的循环,分布编写程序,同时注意对程序的注释可以减少问题。
对于寄存器的使用问题可以才用入栈出栈来保存部分寄存器的值来安排寄存器的使用。
5.设计心得课程设计刚开始的时候,对整个系统的设计完全没有思路,也不知道该先从哪部分下手。
在老师给我们讲解了一些注意事项,还用仿真给我们演示了设计该达到的要求之后,小组四个人就开始讨论系统的整个运行流程,讨论出方案后就开始分工,我做的是“汽车速度控制”的软件部分。
在这之前我对汇编语言的编写不是很熟悉,对各种寄存器的功能及使用不是很了解,担心自己不会或者做不好。
为了完成任务,我不停的翻阅书籍,查看资料,和组员共同商量,尽自己最大的努力去做,做到自己最好的,最后成功完成了任务。
在做整个设计时应先讨论好设计方案,画好流程图,要完全了解整个流程之后才去编写程序,这样才能有条不紊地做实验,不然只会弄得一团糟。
同时我明白,要做好一个课题,细心,耐心,好奇心和同学之间的有效合作都是不可缺少的,要将书本知识与实际操作紧密联系起来,在实践中发现和解决问题是非常重要的。
在实验的过程中也出现了一些问题,大部分来自自身的疏忽与对知识掌握的不牢固,这些方面是要加强的!
通过老师的帮助,在解决问题的过程中,让我们对问题的认知更加深刻了,这些都将有益于我们学到更多更为有用的东西。
同时也知道了团队合作的重要性,在实验中,同组成员在一起发现问题、讨论问题,大大提高了解决问题的速度。
同时,通过课程设计大家得到了很好的锻炼,也期待我们应该有更多实际操作的机会,加强合作与创新方面的能力。
感谢老师的悉心指导。
设计过程:
原理图:
流程图:
运行截图:
板子图:
源代码:
源代码:
IO_KEY_123AEQU010BIO_KEY_BCDEEQU100BMY8255CEQU100BMY8255AEQU000BIO_SELECT_OUTSMG1EQU010BK1EQU00010000BK2EQU00100000BK3EQU01000000BKAEQU10000000BKBEQU00000001BKCEQU00000010BKDEQU00000100BKEEQU00001000BLED1EQU11101111BLED2EQU11011111BLED3EQU10111111BLED4EQU01111111BSELECT_LED_NONEEQU0FFH;减缓速度增加或减少速率的倍数(快);最大为2/数码管要显示的最大速度SLOW_DOWN_SPEED_FASTEQU10;同上(慢)SLOW_DOWN_SPEED_SLOWEQU200DATASEGMENTDATA_SMGDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H;数码管表SELECT_OUTSMG1DB0H,0FEH,0FDH,0FBH,0F7HDATAENDSISTACKSEGMENTSTACKDATA2DW16DUP(?
)TOPEQULENGTHDATA2ISTACKENDSCODESEGMENTASSUMECS:
CODE,DS:
DATA,SS:
ISTACKSTART:
MOVAX,DATAMOVDS,AXMOVAX,ISTACKMOVSS,AXMOVAX,TOPMOVSP,AX;速度为0state1:
MOVAX,0state1_INit:
;数码管显示速度CALLOUTSMG1;LED显示档位MOVAL,SELECT_LED_NONEOUTMY8255C,AL;测试K1是否按下,若是跳到状态2,否则回到状态1开始INAL,IO_KEY_123AANDAL,K1CMPAL,0JEstate2JMPstate1;1档state2:
;DX=当前速度*SLOW_DOWN_SPEED_SLOW;当前速度MOVAX,0MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AX;一档下速度升为5state2_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALINCDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,5JEstate3JMPstate2_after_INit;一档速度为5,再接受加速减速指令state3:
MOVAX,5CALLOUTSMG1MOVAL,LED1OUTMY8255C,AL;测试慢加速指令KAINAL,IO_KEY_123AANDAL,KACMPAL,0JEstate4;测试快加速指令KBINAL,IO_KEY_BCDEANDAL,KBCMPAL,0JEstate5;测试慢减速指令KCINAL,IO_KEY_BCDEANDAL,KCCMPAL,0JEstate6;测试快减速指令KDINAL,IO_KEY_BCDEANDAL,KDCMPAL,0JEstate7;测试停车指令KEINAL,IO_KEY_BCDEANDAL,KECMPAL,0JEstate1JMPstate3;一档下的慢加速,速度最高为25state4:
MOVAX,5MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate4_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALINCDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,25JEstate8JMPstate4_after_INit;一档下的快加速,速度最高为25state5:
MOVAX,5MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate5_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALINCDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,25JEstate8JMPstate5_after_INitstate1jmp:
jmpstate1;一档下的慢减速state6:
MOVAX,5MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate6_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,0JEstate1jmp;state1JMPstate6_after_INit;一档下的快减速state7:
MOVAX,5MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate7_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,0JEstate1jmp;state1JMPstate7_after_INit;一档加到25后进入该状态,接受二档,慢减速。
快减速,停车等指令state8:
MOVAX,25CALLOUTSMG1MOVAL,LED1OUTMY8255C,AL;测试二档指令K2INAL,IO_KEY_123AANDAL,K2CMPAL,0JEstate9;测试慢减速指令KCINAL,IO_KEY_BCDEANDAL,KCCMPAL,0JEstate10;测试快减速指令KDINAL,IO_KEY_BCDEANDAL,KDCMPAL,0JEstate11;测试停车指令KEINAL,IO_KEY_BCDEANDAL,KECMPAL,0JEstate1jmpJMPstate8state2jmp:
jmpstate1state9jmp:
JMPstate14state10jmp:
JMPstate15;进入二档模式,接受加速减速指令state9:
MOVAX,25CALLOUTSMG1MOVAL,LED2OUTMY8255C,AL;测试慢加速指令KAINAL,IO_KEY_123AANDAL,KACMPAL,0JEstate12;测试快加速指令KBINAL,IO_KEY_BCDEANDAL,KBCMPAL,0JEstate13;测试慢减速指令KCINAL,IO_KEY_BCDEANDAL,KCCMPAL,0JEstate9jmp;state14;测试快减速指令KDINAL,IO_KEY_BCDEANDAL,KDCMPAL,0JEstate10jmp;state15;测试停车指令KEINAL,IO_KEY_BCDEANDAL,KECMPAL,0JEstate2jmp;state1JMPstate9;一档下的慢减速state10:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate10_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,0JEstate2jmpJMPstate10_after_INit;一档下的快减速state11:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate3jmp:
JMPstate1state11_after_INit:
CALLOUTSMG1MOVAL,LED1OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,0JEstate3jmpJMPstate11_after_INit;二档下的慢加速指令,最高速度为60state12:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate12_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALINCDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,60JEstate16JMPstate12_after_INit;二档下的快加速模式,最高速度为60state13:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate13_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALINCDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,60JEstate16JMPstate13_after_INit;二档下的慢减速模式,最小速度为25state14:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate14_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,0JEstate3jmpJMPstate14_after_INitstate4jmp:
JMPstate1;二档下快减速模式,最小速度为25state15:
MOVAX,25MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate15_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,0JEstate4jmpJMPstate15_after_INit;二档下速度达到最大60,等待三档或减速指令state16:
MOVAX,60CALLOUTSMG1MOVAL,LED2OUTMY8255C,AL;测试进入三档指令K3INAL,IO_KEY_123AANDAL,K3CMPAL,0JEstate17;测试慢减速指令KCINAL,IO_KEY_BCDEANDAL,KCCMPAL,0JEstate18;测试快减速指令KDINAL,IO_KEY_BCDEANDAL,KDCMPAL,0JEstate19;测试停车指令KEINAL,IO_KEY_BCDEANDAL,KECMPAL,0JEstate4jmpJMPstate16state5jmp:
JMPstate1state8jmp:
JMPstate23state11jmp:
JMPstate22;进入三档模式,相应LED灯亮,等待接收加速减速指令state17:
MOVAX,60CALLOUTSMG1MOVAL,LED3OUTMY8255C,AL;测试慢加速指令KAINAL,IO_KEY_123AANDAL,KACMPAL,0JEstate20;测试快加速指令KBINAL,IO_KEY_BCDEANDAL,KBCMPAL,0JEstate21;测试慢减速指令KCINAL,IO_KEY_BCDEANDAL,KCCMPAL,0JEstate11jmp;state22;测试快减速指令KDINAL,IO_KEY_BCDEANDAL,KDCMPAL,0JEstate8jmp;state23;测试停车指令KEINAL,IO_KEY_BCDEANDAL,KECMPAL,0JEstate5jmp;state1JMPstate17;二档下达到最高速度60后慢减速state18:
MOVAX,60MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate18_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_SLOWDIVCLMOVAH,0CMPAL,0JEstate5jmpJMPstate18_after_INit;二档下达到最高速度60后快减速state19:
MOVAX,60MOVCL,SLOW_DOWN_SPEED_FASTMULCLMOVDX,AXstate19_after_INit:
CALLOUTSMG1MOVAL,LED2OUTMY8255C,ALDECDXMOVAX,DXMOVCL,SLOW_DOWN_SPEED_FASTDIVCLMOVAH,0CMPAL,0JEstate5jmpJMPstate19_after_INit;三档下慢加速,最大速度为120state20:
MOVAX,60MOVCL,SLOW_DOWN_SPEED_SLOWMULCLMOVDX,AXstate20_after_INit:
CALLOUTSMG1MOVAL,LED3OUTMY8255C,ALINCDXMOVAX,DXMOV