1、 课 程 设 计 报 告 课程设计名称:微机原理课程设计 课程设计题目:模拟汽车尾灯动作 院(系): 专 业: 班 级: 学 号: 姓 名: 指导教师: 完成日期: 沈阳航空航天大学课程设计报告 目 录 第1章 总体设计方案 1 1.1 课程设计原理内容及要求 1 1.2 课程设计原理 1 1.3 设计思路 2 1.4 实验环境 2 第2章 详细设计方案 4 2.1 硬件电路设计 4 2.2 主程序设计 5 2.3 功
2、能模块的设计与实现 7 2.3.1 芯片初始化模块的设计与实现 7 2.3.2 正常行驶模块的设计与实现 7 2.3.2 左转模块的设计与实现 8 2.3.3 右转模块的设计与实现 9 2.3.4 临时刹车模块的设计与实现 10 第3章 调试及结果分析 12 3.1 调试中遇到的问题 12 3.2 结果测试及分析 12 参考文献 13 附 录 14 沈阳航空航天大学课程设计报告 第1章 总体设计方案 1.1 课程设计原理内容及要求 根据汽车尾灯的工作原理,模拟汽车尾灯动作。具体内容如下:
3、 (1)汽车尾部左右两侧各有三个指示灯,可用单色灯指示; (2)汽车正常行驶时指示灯全灭; 右转弯时,右侧3个指示灯按右循环依次点亮(持续10秒); 左转弯时,左侧3个指示灯按左循环依次点亮(持续10秒); 临时刹车时,所有指示灯闪烁(亮0.5秒,灭0.5秒,持续10秒); (3)设置各功能键(如:启动、停止及左右转按键等),自行设计方案使演示清晰直观,要有计时显示部分。 课程设计要求: (1)独立完成课程设计任务; (2)通过老师当场验收; (3)交出完整的课程设计任务书。 1.2 课程设计原理 本次课程设计需要使用左右共6个指示灯,通过指示灯闪烁来模拟汽车正常行驶、
4、右转弯、左转弯、临时刹车、停止时尾灯动作。 控制指示灯要用到可编程并行接口芯片8255A,本次设计中只需使用PA端口控制各灯的具体动作。PA0-PA2控制左边三个指示灯,PA5-PA7控制右边三个指示灯。在汽车左转、右转、刹车过程中要持续10s,则需使用可编程定时器/计数器芯片8253控制计时,通过产生1s的方波和0.5s的方波来实现1s和0.5s的计时。计时显示部分要用到可编程键盘显示接口芯片8279,通过8279芯片控制数码管的D0位显示倒计时10s。8253芯片每计数1s需要通过8279进行显示,则要用到可编程中断控制器8259芯片调用中断程序来实现。 利用以上芯片实现模拟汽车尾灯动
5、作,并通过键盘上的“0”,“1”,“2”,“3”,“4”五个功能键控制和实现各个功能。 1.3 设计思路 模拟汽车尾灯动作的设计主要包含启动、左转、右转、刹车、停止等五项功能,并且仅当汽车启动后,其他功能才能实现。 启动功能采用0键控制汽车,数码管显示正常行驶标识反向的“A”;左转功能采用1键控制汽车,左侧3个指示灯按左循环依次点亮,数码管显示左转标识反向的“E”,同时开始倒计时10s,计时结束后恢复正常行驶;右转功能采用2键控制汽车,右侧3个指示灯按右循环依次点亮,数码管显示右转标识“E”,同时开始倒计时10s,计时结束后恢复正常行驶;临时刹车功能采用3键控制汽车,所有指示灯按照亮0.
6、5s灭0.5s次序循环闪烁,数码管显示临时刹车标识“A”,同时开始倒计时10s,计时结束后恢复正常行驶;停止功能采用4键控制汽车,清空显示RAM,指示灯全部熄灭。 采用8255PA口输出控制指示灯闪烁控制部分。左转时给PA口送值0FBH,左边第三个灯亮,各位取反后,右移一位取反使左边第二个灯亮(移位方向与灯的循环方向相反),如此循环使左边三个灯循环闪亮。右转同理,循环方向相反。刹车时PA口依次送值0FFH、0H,以使所有指示灯闪烁。 在计时显示部分,8253计数器0的输入为9600Baud,计数器0的输出作为计数器1和计数器2的输入。计数部分分为两部分,分别产生两个不同脉冲,准确的控制0.
7、5s与1s计时,由1s计时作为总控计时时间,0.5s单独控制灯闪烁,两者互不干扰但又不矛盾,灯的闪烁准确定在10s内,但对左转、右转时灯的循环与闪烁没有限定在0.5s。在数码管显示计时时,每两个0.5s显示一个计数(即每个数字在一秒中显示两次)。 中断部分设置为单片工作,写ICW4,中段类型号可自由设定,自动EOI,OCW1根据ICW2具体设置。中断程序主要执行计数部分,每次中断计数一秒。 1.4 实验环境 1.软件环境:LCA88ET应用软件。 LCA88ET软件是集编辑、编译/连接、加载、调试等为一体的集成开发环境。用户可以在同一界面环境中完成所有任务。软件界面如图1.1所示。
8、 图1.1 LCA88ET应用软件界面图 LCA88ET提供一个多窗口的源文件编辑器。该编辑器不受文件大小的限制,允许无限制的撤销/重复功能。 输出窗口显示用户编译连接过程中的输出信息,用户双击某条编译出错信息提示即可直接定位到源文件的对应行。 用户通过对话窗口直接用监控命令和实验机/仿真机对话。 2.硬件环境:AEDK实验箱,PC机。 AEDK实验箱是对程序执行过程和结果的仿真和模拟。通过LCA88ET应用软件将AEDK实验箱与PC机进行串口连接,将程序编译并下载到实验箱中,实现程序的运行及现象模拟。 -24- 沈阳航空航天大学课程设计报告
9、 第2章 详细设计方案 2.1 硬件电路设计 硬件电路包括可编程并行接口芯片8255、可编程中断控制器芯片8259、可编程定时器/计数器芯片8253和可编程键盘显示接口芯片8279四个部分。硬件电路连线图如图2.1所示。 地址端口 200~207H 210~217H 220~227H 230~237H 8255 PA0 CS PA1 PA2 PA5 PA6 PA7 LED1 LED2 LED3 LED6 LED7 LED8 82
10、79 CS 8253 CLK0 OUT0 CLK1 CLK2 OUT2 OUT1 GATE2 GATE1 GATE0 CS 8259 CS INT1 INT0 9600Baud
11、 Vcc 图2.1 硬件电路连线图 可编程并行接口芯片8255,控制左右共6个指示灯闪烁,8255具有三个相互应独立的8位并行输入输出端口,即端口A,端口B和端口C,其中端口C分为两个4位来配合端口A和端口B工
12、作,它为INTEL系列CPU与外设之间提供TTL电平兼容的接口。8255A可以工作在方式0,方式1,方式2三种方式,其中端口A可以工作在这3种不同的方式下,本次设计通过PA口输出控制各指示灯的具体动作。PA0-PA2控制左边三个指示灯,左转弯时,左侧3个指示灯按左循环依次点亮;PA5-PA7控制右边三个指示灯,右转弯时,右侧3个指示灯按右循环依次点亮。 可编程键盘显示接口芯片8279,分为数据端口和控制端口,数据端口传送数据,控制端口控制输出命令,来显示10s的倒计时,输入0键、1键、2键、3键和4键,以分别用于对启动、左转、右转、刹车和停止等五项功能的控制和实现。 可编程定时器/计数器
13、8253,用来产生两个不同的输出频率,一个为1Hz,控制数码管计时;一个为2Hz,控制刹车时指示灯的闪烁。8253有6种工作方式,本次设计用到方式2,方式2又可称为频率发生器。当CPU写入控制字后,输出端OUT将变高,在写入计数初值以后的下一个CLK脉冲的下降沿开始计数。计数过程中OUT端始终保持高电平,当计数值减至1时OUT端变为低电平,而计数值减至0时OUT端又变为高电平,同时会自动将计数值送到执行部件继续进行减法计数,形成连续工作,重复计数,从而输出固定频率的脉冲。 可编程中断控制器芯片8259,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,产生中断响应,再将此请求送到
14、CPU的INTR端;当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。根据8253芯片产生方波的频率,根据需要,每1s或0.5s分别产生一次中断。 2.2 主程序设计 根据设计要求,设置各功能键模拟汽车尾灯动作,需实现汽车启动、左转、右转、刹车、停止各个功能,在此设置5个功能键来进行控制,分别为“0”、“1”、“2”、“3”、“4”键。主程序流程图如图2.2所示。 (1)汽车启动由0键控制,当按下0键时,数码管显示正常行驶标识反向的“A”,并且,当且仅当按下0键时,控制左转、右转、刹车、停止的各键才会有效,其各项功能才能实现; (2)汽车左
15、转由1键控制,当按下1键时,左边三个指示灯左循环依次点亮,数码管显示左转标识反向的“E”,同时显示10s倒计时,当达到0s时,停止计时, N Y Y N N Y Y 调用正常行驶子程序 键值为“0” 有按键 Y Y 有按键 N N N 键值为“2” 键值为“1” 调用左转子程序 N 键值为“3” 调用右转子程序 调用刹车子程序 Y 键值为“4” 停车程序 结束 开始 图2.2 主程序流程图 数码管显示正常行驶标识反向的“A”; (3)汽车左转由2键控制,当按下2键时,右边三个指示灯右循环依次点亮,数码管显示右转标识
16、的“E”,同时显示10s倒计时,当达到0s时,停止计时,数码管显示正常行驶标识反向的“A”; (4)汽车刹车由3键控制,当按下3键时,6个灯同时开始闪烁,亮0.5s,灭0.5s,数码管显示临时刹车标识“A”,同时显示10s倒计时,当达到0s时,停止计时,数码管显示正常行驶标识反向的“A”; (5)汽车停止由4键控制,当按下4键时,所有灯灭,清空显示RAM,清空键盘RAM,此时要想继续控制汽车的各项功能,则必须再次按下0键,才可以进行其他操作。 2.3 功能模块的设计与实现 在总体设计中设置了5个功能键分别实现汽车启动、左转、右转、刹车、停止各个功能。模块设计中主要分为芯片
17、初始化模块、正常行驶模块、左转模块、右转模块、临时刹车模块等5个模块。各个模块都实现一定的功能,相辅相成。 2.3.1 芯片初始化模块的设计与实现 对8253,8255,8259,8279各个芯片进行初始化,并将中断服务程序装入中断向量表。利用8279的键盘输入功能输入号码,利用显示功能,将经过计算处理后的数据显示在七段数码管上。利用8255的PA0作为输出,低电平则灯亮。利用8253的方式2进行分频产生脉冲,执行计时功能,并且触发8259芯片执行中断服务程序,将8259的IR0口作为中断请求信号,在边沿触发方式中,执行中断服务程序,在中断服务程序中对数据处理并显示。芯片初始化流程图如图2
18、3所示。 2.3.2 正常行驶模块的设计与实现 在按下0键后,程序进入正常行驶模块,8279控制数码管D4缓冲RAM可用,然后数码管显示出正常行驶标识反向的“A”。正常行驶模块流程图如图2.4所示。 开始 初始化8279 关中断 初始化8253 初始化8259,8255 中断服务程序 装入中断向量表 返回 图2.3 芯片初始化流程图 开始 8279控制数 码管D4可用 数码管显示 正常行驶标志 返回 图2.4 正常行驶模块流程图 2.3.2 左转模块的设计与实现 在按下1键后,程序进入左转模块,将SI设为0AH,设置
19、计数初值10s。8279芯片控制显示RAM“D4”显示反向的“E”,表示正在进行左转。开启中断后,执行中断子程序,每执行一次,数码管计数1s,直到SI等于0时停止计数,关中断。同时,再开中断的这段时间,8255控制PA口输出实现左侧3个指示灯按左循环依次点亮。左转模块流程图如图2.5所示。 N N Y Y CX=3,设置计数初值为10 计数值为0 PA输出左侧第三个灯亮 灯循环左移一位 计数值减1 CX=CX-1 CX=0 返回 开始 图2.5 左转模块流程图 2.3.3 右转模块的设计与实现 在按下2键后,程序进入右转模块,将SI设为0AH,
20、设置计数初值10s。8279芯片控制显示RAM“D4”显示“E”,表示正在进行左转。开启中断后,执行中断子程序,每执行一次,数码管计时1s,直到SI等于0时停止计数,关中断。同时,再开中断的这段时间,8255控制PA口输出实现右侧3个指示灯按右循环依次点亮。右转模块流程图如图2.6所示。 N N Y Y CX=3,设置计数初值为10 计数值为0 PA输出右侧第三个灯亮 灯循环右移一位 计数值减1 CX=CX-1 CX=0 返回 开始 图2.6 右转模块流程图 2.3.4 临时刹车模块的设计与实现 在按下3键后,程序进入临时刹车模块,将SI设为0
21、AH,设置计数初值10s。8279芯片控制显示RAM“D4”显示“A”,表示正在进行刹车。在开启中断前,必须重新设置8259控制字OCW1为0FCH,同时开启0.5s计时及1s计时中断允许。开启中断后,执行两个中断子程序,每执行1s计时中断一次,数码管计数1s,所有指示灯同时在这1s中亮0.5s,灭0.5s,直到SI等于0时停止计时,关中断。同时,再开中断的这段时间,8255控制PA口输出指示灯闪亮(亮0.5s,灭0.5s)。临时刹车模块流程图如图2.7所示。 N N Y Y 设置计数初值为10 计数值为0 PA输出灯全亮 PA输出灯全灭 计数值减1 CX=CX-1
22、 CX=0 返回 开始 图2.7 临时刹车模块流程图 沈阳航空航天大学课程设计报告 第3章 调试及结果分析 3.1 调试中遇到的问题 在初次运行时,指示灯闪烁正常,但数码管计时不显示,针对问题,检查8279初始化及中断程序中8279控制字设置,发现8279控制字控制数码管显示命令字设置错误,经改正可以显示。 再次调试,数码管显示计时不正确,有时会产生乱码。通过仔细检查及单步调试跟踪,发现在刹车子程序执行完毕后为复原8259命令字ICW2,导致中断控制错误。改正之后显示正确。 左转、右转、刹车结束后,原先的标识未还原为正常行驶中的标识,通过在执行
23、完10秒倒计时及指示灯的闪烁后的代码后加入调用汽车正常行驶标识的子程序,使得运行后的结果更直观。 3.2 结果测试及分析 程序在LCT88EA应用软件编译完成且下载到实验箱之后,按下0键,数码管显示正常行驶标识反向的“A”;按下1键,左侧3个指示灯按左循环依次点亮,同时数码管开始倒计时10s,并显示左转标识反向的“E”,计时结束后,数码管显示正常行驶标识反向的“A”;按下2键,右侧3个指示灯按右循环依次点亮,同时数码管开始倒计时10s,并显示右转标识“E”,计时结束后,数码管显示正常行驶标识反向的“A”;按下3键,所有指示灯按照亮0.5s灭0.5s次序循环闪烁,同时数码管开始倒计时10s
24、并显示临时刹车标识“A”,计时结束后,数码管显示正常行驶标识反向的“A”;按下4键,所有指示灯全部熄灭,此时,按下除0键外其他各功能键,均无效。 对于上述的测试结果和运行过程,达到了课程设计任务书中的要求,可以实现汽车启动、左转、右转、临时刹车和停止等五项功能,通过优化后使得运行结果也更直观易懂。不过在设计中,由于个人能力有限,也难免存在不足,代码部分也不是最优,部分代码有待改进。 参考文献 [1]孙一林.微型机系统与接口技术 [M] 北京:机械工业出版社, 2010 [2]杨居义.计算机接口技术项目教程 [M] 北京: 清华大学出版社, 2011 [3]张雪兰.汇编语言程序设
25、计 [M] 北京: 清华大学出版社, 2006 [4]龚尚福.微机原理与接口技术 [M] 西安: 西安电子科技大学出版社, 2003 [5]杨素行.微型计算机系统原理及应用 [M] 北京: 清华大学出版社, 1996 [6]沈美明,温冬婵.IBM-PC汇编语言程序设计[M] 北京: 清华大学出版社, 2001 [7]洪永强.微机原理与接口 [M] 厦门: 科学出版社, 2004 [8]王爽.汇编语言 [M] 北京: 清华大学出版社, 2008 [9]王忠民.微型计算机原理 [M] 西安: 西安电子科技大学出版社, 2003 沈阳航空航天大学课程设计报告 附
26、 录 CODE SEGMENT ASSUME CS:CODE START: ;初始化8255 MOV DX,203H MOV AL,80H OUT DX,AL MOV DX,200H MOV AL,0FFH OUT DX,AL ;初始化8279 MOV DX,212H MOV AL,00H;8字符显示,左端输入
27、 OUT DX,AL; MOV AL,38H;内部定时器编程命令字 OUT DX,AL MOV AL,0D3H;清除显示RAM,清除键盘RAM OUT DX,AL; ;8253初始化 MOV DX,233H; MOV AL,35H;计算器0,工作方式2(分频工作方式),十进制计数 OUT DX,AL MOV DX,230H MOV AX,9600H
28、 OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,233H MOV AL,57H;计算器1,工作方式3(方波发生器),十进制计数 OUT DX,AL MOV DX,231H MOV AL,48H; OUT DX,AL MOV DX,233H MOV AL,97H;计算器2,工作方式3(方波发生器)
29、十进制计数 OUT DX,AL MOV DX,232H MOV AL,12H; OUT DX,AL ;初始化8259 MOV AL,13H;单片工作,写ICW4 MOV DX,220H; OUT DX,AL MOV AL,08H MOV DX,221H; OUT DX,AL MOV AL,03H;
30、 OUT DX,AL MOV AL,0FEH;IR0允许 OUT DX,AL XOR AX,AX ;装中断 MOV DS,AX MOV AX,OFFSET INT10 MOV DS:[08H*4H],AX MOV AX,8100H MOV DS:[08H*4H+2H],AX MOV AX,OFFSET INT5 MOV D
31、S:[09H*4H],AX MOV AX,8100H MOV DS:[09H*4H+2H],AX CHECK: MOV DX,212H IN AL,DX TEST AL,80H;显示RAM是否可用 JNZ CHECK; CHECKSTART: IN AL,DX TEST AL,0FH;是否有按键 JZ CHECKSTART; MOV DX,210H;从数
32、据口读取数据 IN AL,DX CMP AL,0H;0键开始 JNZ CHECKSTART; CALL GOSTREIGHT CTL: MOV DX,212H IN AL,DX TEST AL,0FH JZ CTL;是否有按键 MOV DX,210H IN AL,DX CMP AL,1H JNZ CTR;1键左
33、转 CALL TURNLEFT CALL GOSTREIGHT JMP CTL CTR: CMP AL,2H JNZ CTD;2键右转 CALL TURNRIGHT CALL GOSTREIGHT JMP CTL CTD: CMP AL,3H JNZ CTF;3键减速 CALL TURNDOWN CAL
34、L GOSTREIGHT JMP CTL CTF: CMP AL,4H JNZ CTL;按4 END MOV DX,212H MOV AL,0D3H OUT DX,AL;清除显示RAM命令字,清楚键盘RAM MOV DX,200H MOV AL,0FFH OUT DX,AL JMP CHECK GOSTREIGHT PROC
35、 MOV DX,212H MOV AL,84H;D4缓冲RAM可用 OUT DX,AL MOV DX,210H MOV AL,7EH OUT DX,AL RET GOSTREIGHT ENDP TURNLEFT PROC MOV SI,0AH MOV DX,212H MOV AL,84H OUT DX,AL
36、写显示缓冲RAM命令字 MOV DX,210H MOV AL,4FH OUT DX,AL STI MOV DX,221H MOV AL,0FEH OUT DX,AL TL2: MOV CX,3H MOV AL,0FBH MOV DX,200H TL1: OUT DX,AL CALL DELAY
37、 ROR AL,1H;影响进位标识CF LOOP TL1 CMP SI,0H; JZ TL3 JMP TL2 TL3: MOV DX,200H MOV AL,0FFH OUT DX,AL CLI RET TURNLEFT ENDP TURNRIGHT PROC MOV SI,0AH MOV
38、DX,212H MOV AL,84H OUT DX,AL;写显示缓冲RAM命令字 MOV DX,210H MOV AL,79H OUT DX,AL STI MOV DX,221H MOV AL,0FEH OUT DX,AL TR2: MOV CX,3H MOV AL,0DFH MOV DX,200H
39、 TR1: OUT DX,AL CALL DELAY ROL AL,1H LOOP TR1 CMP SI,0H JZ TR3 JMP TR2 TR3: MOV DX,200H MOV AL,0FFH OUT DX,AL CLI RET TURNRIGHT ENDP TURN
40、DOWN PROC MOV SI,0AH MOV DX,212H MOV AL,84H OUT DX,AL;写显示缓冲RAM命令字 MOV DX,210H MOV AL,77H OUT DX,AL STI MOV DX,221H;8259中断控制器奇地址端口 MOV AL,0FCH OUT DX,AL MOV
41、DX,200H MOV AL,0H TD: OUT DX,AL CMP SI,0H JZ TD1 JMP TD TD1: MOV DX,200H MOV AL,0FFH OUT DX,AL CLI RET TURNDOWN ENDP INT10 PROC CMP SI,0H
42、 JNZ T MOV SI,1 T: DEC SI PUSH AX PUSH DX MOV DX,212H MOV AL,80H OUT DX,AL;写显示缓冲RAM命令字 MOV DX,210H MOV AX,SI MOV BX,OFFSET TABLE0 XLAT CS:TABLE0 OUT DX,A
43、L POP DX POP AX IRET INT10 ENDP INT5 PROC NOT AL IRET INT5 ENDP DELAY PROC PUSH CX MOV CX,8888H L2: LOOP L2 POP CX RET DELAY ENDP
44、 TABLE0 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH CODE ENDS END START 课程设计总结: 在本次的微机原理课程设计里,我完成了模拟汽车尾灯动作的设计题目,基本实现所有功能,并能清晰明了显示出结果。每一次的课程设计都是对我们动手能力的锻炼,对已经学习过的知识的融合,这次的课设同样让我受益匪浅。 通过这次课程设计,我再一次清楚的认识到,书本上的知识在付诸实践时,还是会遇到各种各样的问题。首先就是知识掌握得不扎实,很多知识点已经忘记,还有就是我们会遇到课本上没有学习过的问题,尤其是8279的各种控制字及827
45、9的各种功能,通过查阅书籍才明白它的使用方法。这次课程设计中我运用了8279,8253,8255,8259等芯片,不仅对这些芯片有了新的认识,对中断的控制也有了更深的理解,也对程序的调试有了进一步的掌握。但是在编写程序以及调试过程中还是遇到了很多问题,例如控制字错误、调用子程序位置不合理,在其他同学以及老师的帮助下,我发现问题的所在,并进行修改,按时完成了设计内容。这次课设使我感受到只有在具体应用中,才能真正理解理论知识,要学会动脑思考,设计自己的方案并进行论证。 即将大四面临毕业的我们,提高自己的处理问题的能力和加强自己的专业基础知识尤为重要。通过课程设计,我锻炼了自己的解决问题的能力和自己动手编程的能力,很感谢学校和老师为我们提供这样的机会。 指导教师评语: 指导教师(签字): 年 月 日 课程设计成绩






