某某工学院微机原理课程设计.docx
《某某工学院微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《某某工学院微机原理课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
![某某工学院微机原理课程设计.docx](https://file1.bdocx.com/fileroot1/2023-4/21/4253b04b-7b10-46b6-9ec7-d5029f300bcb/4253b04b-7b10-46b6-9ec7-d5029f300bcb1.gif)
某某工学院微机原理课程设计
1引言
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的作用。
交通灯是采用计算机通过编写汇编语言程序控制的。
红灯停,绿灯行的交通规则。
广泛用于十字路口,车站,码头等公共场所,成为人们出行生活中不可少的必需品,由于计算机技术的成熟与广泛应用,使得交通灯的功能多样化,远远超过老式交通灯,交通灯的数字化给人们生产生活带来了极大的方便。
2课题的意义及系统的主要功能
2.1课题的意义
本课程设计是基于微机原理与接口技术的简单应用。
运用所学的微机原理和接口技术知识完成交通灯系统。
通过硬件与软件的结合,用我们刚刚学过的汇编语言编写程序模拟分析了现代城市交通控制与管理问题的现状,结合交通的实际情况阐述了交通灯控制系统的工作原理,给出了一种简单实用的交通灯控制系统的硬件、软件电路设计方案。
2.2系统的主要功能
根据实验箱现有的实验电路,设计电路并编写程序使6个灯按交通变化规律亮、灭或闪烁,且将时间显示在数码管上。
十字路口交通灯变化规律要求:
1南北路口的绿灯、东西路口的红灯同时亮30秒。
2南北路口的黄灯闪烁3次,同时东西路口的红灯继续亮。
3南北路口的红灯、东西路口的绿灯同时亮30秒。
4南北路口的红灯继续亮,同时东西路口的黄灯闪烁3次。
5转1重复。
3硬件部分
3.1设计思想
利用定时器定时,令十字路口的红绿灯交替点亮和熄灭,并用LED数码管显示倒计时时间。
3.2红、黄、绿灯的表示
仪器上有8个发光二级管,从高到低依次为:
D7D6D5D4D3D2D1D0。
设计过程中我们用了六个灯,但我们连了8根线,所以我们做了如下规定:
R为红灯,G为绿灯,Y为黄灯,E为方向东,W为方向西,S为方向南,N为方向北。
设计中又采用以下原则:
A7-A5分别为东西方向红黄绿灯,A0-A0为代表南北方向红黄绿灯,A3和A4无意义。
图1红黄绿灯的表示
3.38255部分
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其内部与引脚图如图:
图28255的引线和逻辑框图
8255有三个端口A、B、C端口,3种不同的工作方式,在其控制字的作用下使某一个端口工作于某一种工作状态下。
3.48253部分
intel8253是NMOS工艺制成的可编程计数器/定时器,其内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同,如图所示:
图38253引脚图和内部结构图
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立,采用减1计数方式。
控制字如图所示:
图48253控制字图
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。
在这里我们主要采用方式0:
计数结束产生中断(由低电平变为高电平)。
a.写CW后:
OUT=0,直到计数到0
b.写N后:
下1个CLK脉冲下降沿开始计数
c.计数过程中,可重写N,重写N后,同b.
d.GATE的作用:
GATE=1计数、=0暂停计数
e.计数到0:
OUT=1,直到再写CW或N
3.58255与8253连接方式
8255连接说明如下:
数据端口连接系统总线数据段D0~D7,RD连接系统IOR,WD连接系统IOW,CS连接IOY3,寄存器地址输入信号A0A1连接系统总线A0A1,PA端连接外设二极管(PA端A7~A2对应二极管D7~D2),作为输出,A7~A5分别代表东西方向;红黄绿灯,A4~A2分别代表南北方向红黄绿灯,A1~A0无意义。
且全部为低有效),PB端连接外设LED(PB端B0~B7对应LEDabcdefgh),作为输出,PC端,低位输入、高位输出C0连接8254OUT端作为输入;C4~C5连接X1~X2作为输出,控制LED显示十位个位
8253连接说明如下:
数据端口连接系统总线数据段D0~D7,RD连接系统IOR,WD连接系统IOW,CS连接IOY2,寄存器地址输入信号A0A1连接系统总线A0A1,CLK0连接1KHZ,GATE0连接+5V,OUT0连接8255C0端
图58255与8253连线图
3.68255A与CPU连接方式
8255A的A1、A0:
与8088CPU的A1、A0相连。
图68088与8255A相连
3.7数码管动态显示
在实际的单片机系统中,往往需要多位显示。
动态显示是一种最常见的多位显示方法,应用非常广泛。
用数码管显示信息时,由于每个数码管至少需要8个I/O口,如果需要多个数码管,则需要太多I/O口,而单片机的I/O口是有限的。
在实际应用中,一般采用动所有数码管的段选全部连接在一起,如何能显示不同的内容呢?
动态显示是多个数码管,交替显示,利用人的视觉暂留作用使人看到多个数码管同时显示。
态显示的方式解决此问题。
在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。
例如需要显示数字“12”时,先输出位选信号,选中第一个数码管,输出1的段码,延时一段时间后选中第二个数码管,出2的段码。
把上面的流程以一定的速度循环执行就可以显示出“12”,由于交替的速度非常快,人眼看到的就是连续的“12”。
在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。
4软件部分
4.1框图描述
设有一个十字路口,1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮。
之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。
延迟30秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁(1HZ)。
闪烁3次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车。
延迟30秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。
闪烁3次后,再切换到1、3路口方向。
之后,重复上述过程。
通过8253计数,每1ms刷新一次,CX计数不为零,计数值减1,刷新1000次,持续一秒钟(其中,输入始终脉冲为1KHZ)。
使用8255实现了PA7~PA0控制二极管的亮灭,PB7~PA0控制数码管的显示。
通过设置控制字,使8255的C口高四位输出,低四位输入,PC4和PC5对数码管进行位控,让两位十进制数同时显示。
4.2设计框图
5源代码及注释
PORT_AEQU2A0H;8255PORTAADDRESS
PORT_BEQU2A1H;8255PORTBADDRESS
PORT_CEQU2A2H;8255PORTCADDRESS
CMD_PORTEQU2A3H
PORT_CSEQU2A3H
TIM_CTLEQU43H;8253TIMERCONTROLPORTADDRESS
TIMEREQU40H;8253ADDRESS
TIMER0EQU40H;8253TIMER/CNTER0PORTADDRESS
TIMER1EQU41H;8253TIMER/CNTER1PORTADDRESS
TIMER2EQU42H;8253TIMER/CNTER2PORTADDRESS
MY8254_COUNT0EQU2A4H
MY8254_MODEEQU2A5H
DATASEGMENT
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数码管七段代码表(0…9)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,10000011B
BITS:
OUTPUT,PORT_C'LOW4BITS:
INPUT,MODE0
MOVDX,PORT_CS
OUTDX,AL
SHOW:
MOVDX,PORT_A
MOVAL,00100100B
OUTDX,AL
MOVCX,300
HUANG4:
CALLTIMING
LOOPHUANG4
CALLTIMING
MOVCX,3
HUANG:
MOVAL,01000100B
OUTDX,AL
CALLTIMING
MOVDX,PORT_A
MOVAL,00000100B
OUTDX,AL
CALLTIMING
LOOPHUANG
MOVAL,10000001B
OUTDX,AL
CALLTIMING
MOVCX,300
HUANG2:
CALLTIMING
LOOPHUANG2
MOVCX,3
HUANG3:
MOVAL,10000010B
OUTDX,AL
CALLTIMING
MOVDX,PORT_A
MOVAL,10000000B
OUTDX,AL
CALLTIMING
LOOPHUANG3
JMPSHOW
TIMINGPROCNEAR
CALLDELAY
RET
TIMINGENDP
DELAYPROCNEAR
PUSHCX
PUSHBX
MOVBX,0FFH
DELAY_:
MOVCX,0FFH
DELAY_AGAIN:
LOOPDELAY_AGAIN
DECBX
JNZDELAY_
POPBX
POPCX
RET
DELAYENDP
INITIAL_8254PROC;8254初始化,1s
PUSHAX
PUSHDX
MOVDX,MY8254_MODE;先写低8位,再写8位,BCD方式计数
MOVAL,00110001B
OUTDX,AL
MOVDX,MY8254_COUNT0
MOVAL,00H;写低8位
OUTDX,AL
MOVAL,10H;写高8位
OUTDX,AL
POPDX
POPAX
RET
INITIAL_8254ENDP
DISPPROC;数码管显示
PUSHAX
PUSHBX
PUSHDX
PUSHCX
DECCX
MOVDX,MY8255_C;将CL中二进制数转化为十进制数
MOVAL,11101111B
OUTDX,AL
MOVAX,CX
MOVCL,0AH;将十位数放在高位数码管,将个位数放在低位数码管
DIVCL
PUSHAX
MOVBX,OFFSETLED
XLAT;显示十位码
MOVDX,MY8255_B;将AL中8位码输出到B口,给LED显示器
OUTDX,AL
MOVCX,0FFFFH;延时
DELAY:
NOP
LOOPDELAY
MOVDX,MY8255_C
MOVAL,11011111B
OUTDX,AL
POPAX
MOVAL,AH
MOVBX,OFFSETLED
XLAT;显示个位码
MOVDX,MY8255_B;将AL中8位码输出到B口,给LED显示器
OUTDX,AL
POPCX
POPDX
POPBX
POPAX
RET
DISPENDP
CODEENDS
ENDSTART
结论
本次课程设计我接到的题目是“含倒计时功能的交通灯控制系统的设计”。
交通灯对于我们来说并不陌生,并且在之前其它科目的课程设计中,我们也碰到过类似的题目。
我们的设计分两部分,最终的设计结果是第一部分红绿黄三种灯的亮,暗,闪烁功能得以实现,但第二部分倒计时部分未能完成。
此外在课程设计期间我们也遇到过各种难题。
例如在设计中途曾尝试过用555定时器来做定时功能,但因为知识量缺乏而无功而返。
还有就是在程序中,用到了汇编的宏,有些地方查了资料还是不能完全理解。
这些都很明显地体现出我们基础知识的不扎实,更不能学以致用。
当然,在本次课程设计中,我们也能体会设计中存在的乐趣。
死板的课本知识变得生动,激发了学习的积极性。
把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识也更加深刻。
最终我们组本次课程设计并没有全部完成,希望下一届同学在做同一个设计题目时能够在我们的基础上让加以改进,最终让设计更完美,更人性化。
最后,感谢指导老师段老师的悉心指导,同时感谢本小组***同学的帮助。
参考文献
1彭虎,周佩玲,傅忠谦.微机原理里与接口技术:
电子工业出版社,2008
2蔡启先,王智文,黄晓璐.汇编语言程序设计实验指导:
清华大学出版社,2008
3张晓明,白凤凤,李雅红.汇编语言程序设计:
国防工业出版社,2009
4张坤.汇编语言实验教程:
清华大学出版社,2008
5卜艳萍,周伟.汇编语言程序设计教程..第2版,清华大学出版社,2007