单片机应用技术报告
题目:交通灯应用系统
班级:10电子信息
小组:第九组
目录
1.摘要
2.51单片机的功能与简介
3.交通灯方案
4.主程序流程图
5.原理图及说明
6.调试过程及流程图
7.总结
摘要:分析了现代城市交通控制与管理问题的现状,结合城乡交通的实际情况阐述了交通灯控制系统的工作原理,给出了一种简单实用的城市交通灯控制系统的硬件电路设计方案。
1、51单片机的功能与简介
51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash ROM技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL 公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种,对初学者来说是比较适合的学习单片机的。
2、交通信号灯方案:
(1)、南北直行绿灯亮,东西直行红灯亮,延时。
(2)、南北直行绿灯闪烁几次转黄灯,南北左转(固定绿灯)亮,南北直行红灯亮,东西直行仍然红灯亮,延时。
(3)、南北左转灯闪几次转黄灯,东西直行绿灯亮,南北直行仍然红灯,延时。
(4)、东西直行绿灯闪烁几次转黄灯,东西左转灯亮,东西直行红灯亮,南北直行仍然红灯,延时。
(5)、循环至1,继续。(这里左转时绿灯亮,不转时灭)
(6)、倒计时部分。(南北、东西方向时间独立)
3、引脚分配及元件清单
引脚图
元件清单表
5、主程序流程图:
(1)定时0中断流程图:
WW BIT 00H;1s标志位
MM EQU 40H;秒值计数器,用于累加秒值
AA EQU 41H ;中断次数,用于统计定时中断的次数
BB EQU 5EH ;定义5eh,5fh为显示缓冲区
XIAOYING EQU 10;消隐吗在字形表的第十位
ORG 0000H; 程序从0000h开始
JMP MAIN;
ORG 000BH;定时器t0中断人口
LJMP TIME0
ORG 0003H;外部中断入口
LJMP INT_0
ORG 030H;主程序从这里开始
MAIN: MOV SP,#70H
MOV MM,#0;秒计数器
MOV MM,#30;
MOV BB,#3;立即数送显示缓冲区十位
MOV BB+1,#0;立即数送个位缓冲区
ACALL DISP;调显示子程序
ACALL TIME0_INIT;;调定时器t0初始化子程序
CLR WW; 清零秒标志位
;/*****--------- 南北车辆直行 15S --------
L1: mov p1,#07eh ;绿灯共亮10S
ACALL LOOP3 //调用显示程序
MOV R7,MM
CJNE R7,#21,L1; 到21S时跳转到绿灯闪烁
L2: mov p1,#0feh ; 灭 绿灯闪3次
ACALL LOOP3
JBC WW,L2
L3: mov p1,#7eh; 亮
ACALL LOOP3
JBC WW,L3 WW秒标志位不为1,继续循环
MOV R7,MM
CJNE R7,#15,L2 ; 南北直行绿灯共亮15S
*------------------ 南北左拐 10S ----------------------------- */
SETB P1.7 ;灭南北绿灯
mov p1,#0BEh ;亮南北黄灯,同时亮南北直行红灯
ACALL LOOP3
JBC WW,L2
L16: ACALL LOOP3
JBC WW,L16
SETB P1.6 ; 灭南北黄灯共亮3S
ACALL LOOP3
JBC WW,L2
L4: mov p1,#0ceh ;亮南北左拐灯
ACALL LOOP3
MOV R7,MM
CJNE R7,#6,L4 ;
L5: mov p1,#0deh; 南北左拐灯闪3次
ACALL LOOP3
JBC WW,L2
mov p1,#0ceh ;
ACALL LOOP3
JBC WW,L3
MOV R7,MM
CJNE R7,#2,L5;
SETB P1.4 灭左拐灯
L6: CLR P1.6 亮黄灯
ACALL LOOP3
JBC WW,L6
L15 : ACALL LOOP3
JBC WW,L15
;/*==================东西方向直行 15S ===================*********/
L7: mov p1,#0dbh ; // 东西绿灯亮
ACALL LOOP3
MOV R7,MM
CJNE R7,#21,L7;
L8: mov p1,#0dfh ;绿灯闪3次
ACALL LOOP3
JBC WW,L8
L9: mov p1,#0dbh;
ACALL LOOP3
JBC WW,L9
MOV R7,MM
CJNE R7,#15,L8 ;
/*=========== 东西左拐 10S ========== */
SETB P1.2 ;灭东西绿灯
mov p1,#0DDh ;亮黄灯
ACALL LOOP3
JBC WW,L8
ACALL LOOP3
JBC WW,L8
L17: SETB P1.1 ;灭黄灯
ACALL LOOP3
JBC WW,L8
L10: mov p1,#0d6h;亮左转灯
ACALL LOOP3
MOV R7,MM
CJNE R7,#6,L10 ;
L11: mov p1,#0deh;灭东西左拐灯
ACALL LOOP3
JBC WW,L11
mov p1,#0d6h ;
ACALL LOOP3
JBC WW,L11
MOV R7,MM
CJNE R7,#2,L11;
SETB P1.3
L12: CLR P1.1;亮黄灯
ACALL LOOP3
JBC WW,L12
ACALL LOOP3
L18: JBC WW,L18
LJMP L1
; ------- 中断0服务程序 ---------
INT_0:PUSH ACC
PUSH PSW
MOV P1,#0FFH
MOV P2,#0FFH
MOV MM,#11
L13: ACALL LOOP3
mov p1,#0deh ;东西红灯亮;南北红灯亮
MOV A,MM
CJNE A,#1,L13
MOV P1,#0FFH
MOV P2,#0FFH
POP ACC ;恢复现场
POP PSW
RETI
/***============显示子程序=============*/
LOOP3:NOP
LOOP: JBC WW,NEXT;WW为1,说明1s到
ACALL DISP;不为1调用显示子程序
AJMP LOOP;一秒未到继续循环
NEXT: lCALL CC ;调用转换子程序
RET
CC: MOV A,MM;获得秒值,并送到a
MOV B,#10
DIV AB
JZ NEXT1;如果a中的值为0,高位消隐
AJMP NEXT2;否则直接送去显示
NEXT1:MOV A,#XIAOYING;消隐码送a
NEXT2:MOV BB,A;十位送显示BB
MOV BB+1,B;个位送BB+1
ACALL DISP ;调用显示子程式
RET
;----- 显示子程序 -------
DISP: PUSH ACC
PUSH PSW
MOV A,BB;去十位带显示位
MOV DPTR,#TAB;
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
ACALL DELAY
SETB P2.1
MOV A,BB+1
MOV DPTR,#TAB;
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
ACALL DELAY
SETB P2.0
POP PSW
POP ACC
RET
; -----------10ms延时子程序-----------
DELAY:MOV R5,#50
LOOP2:MOV R4,#100
LOOP1: DJNZ R4,LOOP1
DJNZ R5,LOOP2
RET
;定时初始化程序
TIME0_INIT:MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
CLR IT0;
SETB EA
SETB EX0;开外部中断0
SETB PT0 ; 定时器中断优先
SETB ET0
SETB TR0;启动定时器
RET
;----------定时50ms中断程序--------
TIME0:PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0B0H
INC AA
MOV A,AA
CJNE A,#20,TIME_EXIT;20*50=1
MOV AA,#0;
SETB WW;
DEC MM;
MOV A,MM;
CJNE A,#0,TIME_EXIT;若秒值不到30,则跳转到TIME_EXIT
MOV MM,#30;若秒数到30,则秒值计数复位为0
TIME_EXIT:POP PSW
POP ACC
RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H;
DB 92H,82H,0F8H,80H,90H,0FFH
END
4、原理图
说明:交通灯的计数的数码管用采用了动态扫描方式来计时,由于单片机的输出负载驱动数码管能力不足,所以用了74LS240作为数码管的驱动芯片,使得数码管能正常工作。做为交通灯的LED其阳极通过一个1K的电阻限流接VCC,阴极连单片机I/O口。
6、总结
在学习单片机这门课程时,老师便围绕着交通灯应用系统来给我们讲课,并布置了交通灯应用系统的设计作为我们的期末测试。在学习期间我们不断的学习和了解了单片机的应用和编辑其程序。这也为我们接下来所要做的交通灯应用系统而打下了坚实的基础。
在学期末,我们运用我们所学的知识设计了我们小组自己的交通灯应用系统,在我们分工合作下,虽然第一次检查没有通过,但通过最后几天查看书籍和网络资源及仿真,交通灯应用系统被我们一步步的通过仿真模拟完成了程序的编写,这是我们一起用心完成的作品,虽然不是很完美,但却是我们一起努力携手完成的作品。经过我们的不懈努力,我们初步实现了交通灯和倒计时的分别测试,最后通过了合成,但还是存在着缺陷。经过我们小组再研究讨论后,我们又精心的修改了程序,终于成功的实现了交通灯要求的功能。
学习使用单片机只能靠循序渐进的积累,尤其是在编写程序,不可能一蹴而就。万事开头难、要勇敢迈出第一步知识点用到才学,不用的暂时丢一边。想把厚厚的一本书看完在做实验,估计是不太可能的。所以,最好结合实际程序进行仿真,在不断调试中完善和得到成功的喜悦。这样实验的成功率会大大提高。在编写程序也不要光看不写,看别人的知识了解别人的编程思路而已,最终的程序还是要靠自己,尤其是在一些细节上要特别注意,对一些程序指令要理解的运用好,刚开始我们可以模仿别人的程序,然后慢慢的学会自己编写,这是一个完全自主学习的过程,需要恒心和信心。
第二篇:交通信号灯实时控制系统设计报告1
第一章 设计课题要求
1.1 设计目的
随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。交通灯控制系统是用于城市交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。随着城市机动车量的不断增加,许多大城市如北京、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。然而,交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的问题。通过本实验:
⒈掌握交通信号灯实时控制系统的设计思想与实现方法。
⒉掌握定时/计时器和并行接口在实时控制系统中的应用。
⒊加深对定时/计时器和并行接口芯片的工作方式和编程方法的了解。
1.2 设计任务
设计制作一个交通信号灯实时控制系统。要求:
⒈在一个十字路口的一条主干道和一条支干道上分别装一套红,黄,绿3种信号灯;用钮开关模拟十字路口的车辆检测传感器信号。
⒉在一般情况下,主干道上的绿灯常亮,而支干道上总是红灯。
⒊当检测到支干道上来车时(用按键开关模拟),主干道的绿灯转为黄,持续4秒后,又变成红灯,同时支干道由红灯变为绿灯。
⒋支干道绿灯亮后,或者检测到主干道上来了3辆车(用3个钮子开关模拟),或者虽未来3辆车,但绿灯已持续了25秒,则支干道立即变为黄灯,4秒后转为红灯,同时主干道由红灯变为绿灯。
1.3 实验设备器材
⒈80X86系列微机一台。
⒉微机硬件实验平台。
⒊定时/计时器和并行接口芯片。
⒋按键开关1个(单脉冲源),钮子开关(高低电平开关)3个及红,黄,绿发光二极管(即实验平台上的三色显示灯)。
第二章 总体设计方案及其流程图
2.1 基本工作原理
根据实验任务要求,在本实验系统中,微机需要检测4个开关送来的主,支干道车辆到达信号,并按一定的条件发出主,支干道6个信号灯的控制信号。显然,用一片8255A足以满足上述要求。对8255A 各端口不妨作如下安排:
令端口B 工作于方式0的无条件数据输出方式,用以控制交通灯的亮灭;端口C工作于方式0的输入方式,一方面当支干道上有车来时(用pc1,pc2,pc3,pc4控制),控制主,支干道交通灯变换状态。另一方面pc7用来检测8253A是否已经产生了1秒的脉冲,用来控制相应的程序。
有关定时/计时器的功能,可以采用8253计时/定时器结合中断服务程序计数的方法来实现。可设想用8253来产生秒时钟信号,为此可以设置8253的定时器0工作方式3(方波方式),定时器2工作于方式2(分频方式),并将定时器0的输出端接到定时器1的时钟端T4。这样,就可以做到让定时器0每隔10ms向定时器1发出一个计数脉冲,而当定时器1计满100个数时,向主机发出一次中断请求信号,于是就实现了每隔1s发出一次中断请求的功能。然后在时钟中断服务程序中对秒信号作相应的计数。(通道0接10KHZ的方波脉冲源)。 对于LED灯只要给予各灯高电平就能实现各灯的正常工作(亮)。
2.2硬件的总计设计
2.2.1硬件电路设计
各芯片主要管脚的功能如下:
8255A:
PB0:表示主干道红灯信号,其中1表示亮,
PB1:表示支干道红灯信号,其中1表示亮
PB2:表示主干道黄灯信号,其中1表示亮
PB3:表示支干道黄灯信号,其中1表示亮
PB4:表示主干道绿灯信号,其中1表示亮
PB5:表示支干道绿灯信号,其中1表示亮
PC0~PC3:用来模拟支道上车的信号
PC7:做标志信号,1表示计数器已经产生了一秒的脉冲
8253A:
定时器0:输入接在T4,工作在方式3,计数初值为1000
OUT0和PC0相与得到黄灯信号。
定时器2:输入信号为OUT0,工作在方式2,计数初值为100。
2.2.2 所用到的芯片及其各自功能说明
2.2.2.1 8255的功能简介
8255A是Intel系列的并行接口芯片。由于它是可编程的,可以通过软件来设置芯片的工作方式,所以,用8255A连接外部设备时,通常不需要再附加外部电路,给使用到来很大的方便。
8255A有三个8位数据端口,即端口A、端口B、端口C 。设计人员可以用软件使它们分别作为输入端口或输出端口。
8255A可以通过指令在控制端口中设置控制字来决定它的工作。
控制字分为两类:
1、各端口的方式选择控制字:它可以使8255A的3个数据端口工作在不同的工作方式。方式选择控制字总是将3个数据端口分为两组来设定工作方式,即端口A和端口C的高4位作为一组,端口B和端口C的低4位作为一组。(图2.1) 图2.1
2、C端口按位置1/置0控制字:它可以使C端口中的任何一位进行置位或复位。第7位称为标识位,方式选择控制字的第7位总是1;而端口C置1/置0控制字的第7位总是0。
8255A的三种工作方式:
方式0:基本的输入/输出方式
方式1:选通的输入/输出方式
方式2:双向传输方式
② 端口A可以工作在3种工作方式中的任何一种,端口B只能工作在方式0或方式1,端口C则常常配合端口A和端口B工作,为这两个端口的输入/输出传输提供控制信号和状态信号。
③ 归为同一组的两个端口可以分别工作在输入方式和输出方式,并不要求同为输入方式或同为输出方式。而一个端口具体到底作为输入端口还是输出端口,这也由方式选择控制字来决定。
2.2.2.2 8253A的功能简介
Intel 8253是一种具有计数和定时的芯片,被称为可编程间隔定时器。8253内部具有3个独立的16位计数器通道(分别为通道0,1,2),通过对它进行编程,每个计数器通道均可按6种不同的方式工作,并且都可以按2进制或十进制格式进行技术,最高计数频率能达到2Mhz。
8253A可以通过指令在控制端口中设置控制字来决定它的工作。(图2.2) D7 D6 D5 D4 D3 D2 D1 D0
00 计数器0 00 计数器锁存读命令 000 方式0 D0=0 按二进制格式计数 01 计数器1 01 只读/写低字节 001 方式1 D0=1按BCD码格式计数 10 计数器2 10 只读/写高字节 *10 方式2
11 非法 11 先读/写低字节 *11 方式3
,后读/写高字节 100 方式4
101 方式5
图2.2
8253A有6种工作方式:
1.方式0:计数结束则中断
当将某计数器设置成方式0后,其输出OUT变低电平,装入初值后,仍保持低电平。门控为高电平开始计数。每来一个计数脉冲CLK,计数器的值减1,当计数到达终点即计数器的值变成0时,OUT变为高电平。在计数期间可用门控信号暂停计数(即门控为低电平时,计数暂停)。出端OUT由低变高可以用来作为中断请求信号(正是由于这种作用,许多教材中称方式0为完成计数时中断),也可作为查询信号,也可直接去控制某个操作,如让某个开关动作。
2.方式1:单脉冲发生器 即可编程单脉冲发生器 所谓单稳,是指这样的电路,它有两种状态,但只能稳定在一种状态。在一定的外界作用下,它能从这一种状态进入到另一种状态,但经过一定时间后,又自动恢复到原来的状态。
3.方式2:速率波发生器
方式2用来对输入脉冲(即计数脉冲CLK)N分频(N为预置的初值),在输出信号周期中低电平的时间为一个CLK周期。
设置此方式后,OUT变高电平,装入初值后便自动开始计数,减到1时OUT变低电平。经过一个CLK周期,OUT恢复高电平,且计数器又自动装入初值,重新开始计数。如此循环下去。若GATE变低电平将禁止计数,并使输出为高电平。在GATE再次变高电平时,计数器将重新装入预置的初值,并开始计数。
4.方式3:方波发生器
方式3类似于方式2,输出是周期性的。不同的是方式3输出方波。如果预置的初值N为偶数,则输出周期中高电平和低电平的宽度相等;如果N为奇数,则输出周期中高电平比低电平多一个CLK周期的时间,当N相当大时,也可认为是方波。当然,一般采用方式3时,置初值为偶数。设置成方式3后,OUT变高电平,装入初值后便自动开始计数。如初值为偶数,每个CLK使计数器减2,计到终点改变电平。如初值为奇数,则输出为高电平时第一个CLK使计数器减1,随后每个CLK使计数器减2;输出为低电平时第一个CLK使计数器减3,随后每个CLK使计数器减2。每当计数到终点都会改变电平,初值又被重新装入,并开始计数。如此循环下去,
5.方式4:软件触发方式计数
设置成方式4后,OUT变高电平,写入计数值后自动开始计数(所以称之为软件触发),计数到终点输出一个CLK周期的低电平脉冲。GATE变低可暂停计数,用GATE的上升沿可重新赋初值,并开始计数。
6.方式5:硬件触发方式计数
设置成该方式后,OUT变高电平,写入计数值后需等待GATE上升沿的到来才开始计数(所以称之为硬件触发)。计数到终点也输出一个CLK周期的低电平脉冲。计数过程中不受GATE电平的影响。此后,用GATE的上升沿可重新赋初值,并开始计数。
2.2.3 硬件框图
根据上面的分析可得下列硬件部分的流程框图(图2.3)
2.3 软件总体设计
根据上面分析可得下列的软件流程图,主程序流程图如图2.4,
图2.3
第三章 典型程序模块及典型编程技巧分析
3.1 计数模块
为了实现本次设计要求的秒计数功能,软件编程8253A的定时器0工作方式3(方波方式),定时器1工作于方式0(分频方式),并将定时器0的输出端接到定时器1的时钟端。这样,就可以做到让定时器0每隔10ms向定时器1发出一个计数脉冲,而当定时器1计满100个数时,会产生一个高电平信号,用8255A的一个端口来检测这个信号,每隔1秒跳转到子程序实现倒计时每次减一运算,然后送显示。具体程序如下:
;定时器0 工作方式3(方波方式) 10ms
mov dx,223h
mov al,16h ;控制字
out dx,al
mov dx,210h
mov al,64h
out dx,al
;定时器2 工作方式2(分频方式) 100个数
mov dx,223h
mov al,54h ;控制字
out dx,al
mov dx,221h
mov al,00001010b
out dx,al
3.2 倒计时模块
不管是支道还是主道上的黄灯闪烁4秒后必将变成绿灯或者是红灯,建一个
DATA1存放字模,实现用数码管显示剩余时间。首先让BX指向DATA1首地址,将计数器中当前DL中的值赋给AL,通过检测8255A的pc7端口是否有高电平,检测到后进行减一然后在DATA1中找出相应的字模进行显示。
第四章 设计中存在的问题
设计中具体出现的问题有:起初设置时将8255A的片选基地址粗心的弄错,B端口的片选基地址应为:0FF29H,C端口的片选基地址应为:0FF2AH.在设置红绿黄灯的亮灭时,实际程序是从PB0-PB7顺序来的,而我们设置时去想像成PB7,PB6?PB0来的,所以在刚开始实验时总是感觉灯的亮灭有些颠倒次序.实验中曾出现了运行到红绿灯的第2个转换状态时,此时由于有绿灯到红灯之间的切换需要调用黄灯闪的子程序,实验箱上从此处开始会一直在黄灯子程序的状态之间变换显示.刚开始我们一直在查找是不是黄灯子程序在返回跳转上有问题,但是经过反复修改还是不行,最终发现是:
MOV AL,10000111B
OUT DX,AL
CALL DISP
MOV DX,IOCPT (此处起先未设置,应设置,因为这是调用的黄灯子程序,而他是由B口控制的和红绿灯的C口不是同一个状态口,既调用黄闪子程序时DX中的值被重新写入了,所以在重新使用C端口命令时要调用这一命令语句,将C口的地址重新写入,才可正确运行下去。)
MOV AL,00101101B
第五章 源程序 CODE SEGMENT
ASSUME CS:CODE ORG 11A0H START: CALL FORMAT CALL DISP MOV
MOV
OUT
MOV
MOV
OUT
MOV
OUT
MOV
MOV
OUT
MOV
MOV
OUT
GOON: CALL
MOV
MOV
OUT
JUDGE1: MOV DX,43H AL,00110111B ;写8253控制字 DX,AL DX,40H ;通道0 工作方式3(方波方式) AL,00H ;初值设置(设为1000) DX,AL AL,10H DX,AL DX,43H ;通道2 工作方式0(分频方式) AL,10110001B ;控制字 DX,AL DX,0FF2BH ;初始化8255,设置各端口工作模式AL,10011001B ;控制字 DX,AL DISP DX,0FF29H ;从8255的b端口送出红绿灯信号 AL,00010010B ;主绿支红 DX,AL DX,0FF2AH ;支干道有车吗
IN AL,DX
TEST AL,01H ;pc0开关
JNZ LED1
JMP GOON
JUDGE2: MOV DX,0FF2AH ;主干道有3辆车吗?
IN AL,DX
AND AL,00001110B ;pc1,pc2,pc3 CMP AL,00001110B
JZ GOON
LED1: MOV DX,0FF29H ;送主干道黄灯,支干道红灯数据 MOV AL,00000110B ;主黄支红
OUT DX,AL
MOV BYTE PTR DS:[0701H],04 ;初始化倒计时秒数 MOV AL,DS:[0701H]
CALL CONVERS ;转换
CALL DISP ;显示
P0: MOV DX,42H
MOV AL,00H
OUT DX,AL
MOV AL,01H
OUT DX,AL
;检测8253是否有1
P1: MOV DX, 0FF2AH ;8255A的C端口(输入,检查是否1秒到) IN AL,DX
TEST AL,10000000B ;pc7
JZ P1
DEC BYTE PTR DS:[0701H]
JZ LED2
MOV AL,DS:[0701H]
CALL CONVERS
CALL DISP
JMP P0
LED2: MOV DX,0FF29H
MOV AL,00100001B ;主红支绿
OUT DX,AL
;25秒倒计时
MOV BYTE PTR DS:[0702H],25
MOV AL,DS:[0702H]
CALL CONVERS
CALL DISP
P3: MOV DX,42H
MOV AL,00H
OUT DX,AL
MOV AL,01H
OUT DX,AL
JUDGE4: MOV DX,0FF2AH ;主干道有3辆车吗? IN AL,DX
AND AL,00001110B ;1,2,3
CMP AL,00001110B
JZ LED3
MOV DX, 0FF2AH ;c
IN AL,DX
TEST AL,10000000B ;pc7 JZ JUDGE4
DEC BYTE PTR DS:[0702H] JZ LED3
MOV AL,DS:[0702H]
CALL CONVERS
CALL
JMP
H1: MOV
MOV
CALL
JMP
LED3: MOV
MOV
OUT
MOV
MOV
CALL
CALL
P5: MOV
MOV
OUT
MOV
OUT
P6: MOV DISP P3 BX,0 WORD PTR DS:[BX+077AH],0000H DISP GOON DX,0FF29H ;送主干道红灯,支干道黄灯数据 AL,00001001B ;主红支黄 DX,AL BYTE PTR DS:[0701H],04D AL,DS:[0701H] CONVERS DISP DX,42H AL,00H DX,AL AL,01H DX,AL DX, 0FF2AH ;c
IN AL,DX
TEST AL,10000000B ;pc7 JZ P6
DEC BYTE PTR DS:[0701H] JZ H1
MOV AL,DS:[0701H]
CALL
CALL
JMP
RET
CONVERS: MOV
MOV
DIV
MOV
MOV
INC
MOV
RET
;显示模块
DISP: MOV
DISP2: PUSH
MOV
MOV
DISP0: MOV
MOV
MOV
MOV
PUSH
MOV CONVERS DISP P5 CL,10D AH,0 CL BX,077AH DS:[BX],AH BX DS:[BX],AL CX,0FFH CX DX,077BH AH,02H CX,00FFH BX,DX BL,DS:[BX] BH,0H DX DX,0FF22H
MOV AL,CS:DATA1[BX] OUT DX,AL
MOV DX,0FF21H MOV AL,AH
OUT DX,AL
DISP1: LOOP DISP1
POP
DEC
SHR
JNZ
MOV
MOV
OUT
POP
DEC
JNZ
RET
DATA1 DB
DB
DB
DB
FORMAT: MOV
MOV
ADD
MOV
ADD
MOV
RET
CODE ENDS
END DX DX AH,01H DISP0 DX,0FF22H AL,0FFH DX,AL CX CX DISP2 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H 80H,90H,88H,83H,0C6H,0A1H,86H,8EH 0FFH,0CH,89H,0DEH,0C7H,8CH,0F3H,0BFH 90H,0A3H,0A1H,86H,8FH BX,0 WORD PTR DS:[BX+077AH],0000H BX,2 WORD PTR DS:[BX+077AH],0000H BX,2 WORD PTR DS:[BX+077AH],0000H START
第六章 心得体会
微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
这次实验并不是很难,主要的困难来自对程序的理解以及对中断的使用。功夫不负有心人,经过合作和努力,我们最后对实验的原理有了清晰的认识。虽然很多模块单元没有用到,但是就系统功能来说,我觉得我们做的还是不错的。 虽然程序在编写时有一些参考资料和现成的程序作参考,但我们还是通过咨询老师和查阅资料的方式读懂了试验具体的操作和思路.在实验操作过程中,我学会了先画流程图和分析好思路再编写程序的良好习惯.实验中我们也遇到了很多的问题,也因为一直找不到问题的症结所在,我们还在设计的尝试上浪费了很多时间,不过也因为我们多次的尝试让我们对曾经出现的问题更加的印象深刻,也让我们对此后相同的问题上不会再犯相同的错误,我想这也是我们收获的来源.
这次课设同时让我们对实验芯片有了足够的了解,让我们知道了实验芯片的用法,比如8255A,8253A等等;而且它还让我们对自己动手写程序来控制芯片的运作有了一定的基础。虽然只是一个小型的课程设计,但是通过学习和操作,我们对有关接口的知识将会有一个更广泛的认识,而且它对我们以后的学习也会有帮助的。
实验中个人的力量是不及群体的力量的,这次设计我跟一班的郭靖同学做了
相同的题目,每次遇到自己无法解决的问题时,自己会主动与她交流,共同探讨。而且实验也教会我们在团队中要善于与人相处,与人共事,不要一个人解决所有问题。
总之,这次课程设计对于我们有很大的帮助,通过课程设计,我更加深入地理解了,微机原理课程上讲到的各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识,同时在试验室的环境里熟悉了汇编程序的编写过程和运行过程,最后还提高了自己的动手能力。感谢老师的悉心指导。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。
附录一 参考文献
[1] 杨素行. 微型计算机系统原理及应用. 北京: 清华大学出版社,1995.10
[2] 钱晓捷. 汇编语言程序设计. 北京: 电子工业出版社,2000.9
[3] 周明德. 微型计算机IBM PC/XT系统原理及应用. 北京: 清华大学出版社,1991.7
[4] 吴秀清,周荷琴.微型计算机原理与接口技术.合肥:中国科学技术大学出 版社,2004.12
[5] 微机实验原理教程(电子书)