综合设计实验项目名称:交通灯控制系统设计适用年级:2所属课程:微型计算机原理班级:2011级电通6C班姓名:林学号:2011310018x日期:2013/6/23一、实验目的:要求学生综合所学的软硬件知识,并应用基础实验所获得的实验设计技能,独立设计解决实际应用问题的系统。二、设计要求:(1)东西方向和南北方向交替准行控制1)使东西方向准行时,东西方向上的绿灯亮,南北方向的红灯亮,经过15秒后,使南北方向准行时,南北方向上的绿灯亮,东西方向的红灯亮,如此交替。2)假设东西方向是主要交通干道,当在南北方向准行15秒时间未到时,检测到东西方向已聚集了8辆车,则提前使东西方向准行,南北方向禁行。(2)特殊控制1)当准行和禁行时间倒计时到最后3秒时,准行方向上绿灯亮的同时该方向的黄灯闪烁,而禁行方向上的红灯亮同时黄灯也闪烁。2)在数码管上显示准行时间,并以秒倒计时。说明:设实验箱发光二极管单元中的一个绿灯为东西方向上的绿灯,最后一个绿灯为南北方向上的绿灯;第一个红灯为东西方向上的红灯,最后一个红灯为南北方向上的红灯;第二个红灯为东西方向上的黄灯,第三个红灯为南北方向上的黄灯。三、具体设计内容:8255初始化:A、B、C口方式0输出A口低4位输出位选,B口输出显示代码C口输出灯控信号8253初始化:T0定时20ms,方式2/3,IRQ0中断T2计数,方式0,IRQ7中断时钟计数初始化:N1=25,N2=2,N3=15,0.5S1S15SK=0,(0前10S/FFH后15S)东西准行信号,南北准行信号黄灯亮,黄灯灭显示秒数的个位显示秒数的十位N3变为非压缩BCD码存入显示缓冲区D7D6D0东西红东西黄南北黄南北红东西绿南北绿灯¤¤¤¤¤¤¤¤四、实验中的芯片及线路:1.实验系统中的8253芯片图1系统中的8253单元系统中的8253芯片的0#通道输出线与8259的0#中断请求线相连,作为实时钟中断信号。1#通道输入1.8253MHZ的信号源,输出接8251的收发时钟端,供串行通信用。2#通道开放给用户使用。8253端口地址如下表:信号线寄存器地址IOY20#40H1#41H2#42H控制口43H2.实验系统中的8255芯片图2系统中的8255单元系统中的8255芯片端口地址如下表:信号线寄存器地址IOY3A口60HB口61HC口62H控制口63H3.实验系统中的8259A芯片图3系统中的8259A单元系统中的8259A芯片工作于单片方式,编程口地址为:20H、21H。它可由用户扩展连接成级连方式。中断矢量地址与中断号之间的关系如下表:中断序号IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7中断类型号08H09H0AH0BH0CH0DH0EH0FH矢量地址20H|23H24H|27H28H|2BH2CH|2FH30H|33H34H|37H38H|3BH3CH|3FH4.实验线路图+5V1.19MHZ……KK1……+5VGATE0CLK0OUT08253CLK2OUT2GATE2系统总线IRQ08259IRQ7系统总线.……..………..………………….五.程序流程图PB7~PB0PC7~PC08255PA1PA0SW-LEDUNIT系统总线NN8255初始化:A、B、C口方式0输出8253初始化,T0定时20ms,通过IRQ0中断;T2计数,通过IRQ7中断;IRQ0中断;时钟计数初始化:N1=25,N2=2,N3=15,K=0,设缓冲区首地址等初值,主程序开始关数码显示,红绿灯CPU开中断主程序装入IRQ0、IRQ7中断向量IRQ0开中断CPU关中断开始T2中断服务程序IRQ7时钟计数初始化:N1=25,N2=2,N3=15,K=0输出东西准行信号发EOI命令中断返回YNY设N1=25,N2-1开始N1是偶数?T0中断服务程序IRQ0将N3变为非压缩BCD码存入显示缓冲区N1=0?NN1-1YN2=0?N设N2=2,N3-1YN3=0?N设N3=15,K变反显示秒数的十位显示秒数的个位AYNNN2是偶数?K=0N接前页程序流程图发EOI命令中断返回AYN3=15?黄灯亮N3≤3比较?NY输出东西准行信号输出南北准行信号黄灯灭YIRQ7关中断装入计数器的T2初值IRQ7开中断六.程序设计STACKSEGMENTSTACKDW64DUP(?)STACKENDSDATASEGMENTTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,77H,7CHBUFDW?N1DB25N2DB2N3DB15KDB0DATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AXCLI;CPU关中断MOVAL,80H;向控制口送8255的初始化控制字OUT63H,AL;A、B、C口以方式0输出MOVAL,36HOUT43H,ALMOVAL,0F8HOUT40H,ALMOVAL,5CHOUT40H,AL;8253初始化,T0定时20msMOVAL,90HOUT43H,AL;T2计数8INAL,21H;输入中断屏蔽字ANDAL,0FEHOUT21H,AL;允许IRQ7中断PUSHDSMOVAX,0MOVDS,AXMOVAX,OFFSETIRQ0;获得IRQ0的首地址,装入IRQ0的中断向量表ADDAX,2000HMOVSI,0020HMOV[SI],AXMOVAX,0MOVSI,0022HMOV[SI],AXMOVAX,OFFSETIRQ7;获得IRQ7的首地址,装入IRQ7的中断向量表ADDAX,2000HMOVSI,003CHMOV[SI],AXMOVAX,0MOVSI,003EHMOV[SI],AXPOPDSMOVN1,25;时钟计数初始化:N1=25MOVN2,2;N2=2MOVN3,15;N3=15MOVK,0;K=0MOVSI,OFFSETTABLE;获得TABLE的首地址MOVAL,0E7HOUT62H,AL;输出东西准行信号MOVAL,0OUT61H,AL;关数码显示SEA:STI;CPU开中断HLTJMPSEAIRQ7:MOVN1,25;时钟计数初始化:N1=25MOVN2,2;N2=2MOVN3,15;N3=15MOVK,0;K=0MOVAL,0E7HOUT62H,AL;东西准行MOVAL,20H;8259初始化OUT20H,ALIRETIRQ0:DECN1;N1-1JNZB1;N1不等于0就跳转至B1MOVN1,25;N1=25DECN2;N2-1JNZB1;N2不等于0就跳转至B1MOVN2,2;设N2=2DECN3;N3-1JNZB1;N3不等于0就跳转至B1MOVN3,15;设N3=15NOTK;K求反B1:MOVAL,N3AAMMOVDI,OFFSETBUF;获得BUF的首地址MOV[DI],AXMOVBL,N1TESTBL,01H;N1与01H相与JNZB2;N1是偶数?不是就跳转至B2MOVBL,BYTEPTRBUF+1;把BUF中的高字节送给BL,显示十位MOVAH,0BHJMPB3B2:MOVBL,BYTEPTRBUF;把BUF中的低字节送给BL,显示个位MOVAH,07HB3:MOVBH,0MOVAL,[SI+BX];将数据代码地址OFFSETTABLE+BX送给ALOUT61H,AL;送给段选MOVAL,AHOUT60H,ALMOVBL,N3CMPBL,15;N3与15进行比较JZC1;N3=15就跳转到C1CMPBL,3;N3与3进行比较JBEC2;N3小于等于3就跳转至C2JAC5;跳转至C5C2:MOVBL,N2TESTBL,01H;N2与01H相与JZC3;N2是偶数?是就转向C3MOVAL,0AHOUT63H,ALMOVAL,0CHOUT63H,AL;黄灯灭JMPC5C3:MOVAL,0BHOUT63H,ALMOVAL,0DHOUT63H,AL;黄灯亮JMPC5C1:MOVBL,KCMPBL,0;K与0进行比较JNZC4;K不等于0就跳转到C4MOVAL,0E7HOUT62H,AL;东西准行INAL,21HORAL,80HOUT21H,AL;IRQ7关中断JMPC5;跳转至C5C4:MOVAL,7EHOUT62H,AL;南北准行MOVAX,09HOUT42H,AL;装入计数器,的T2初值INAL,21HANDAL,7FHOUT21H,AL;IRQ7开中断C5:MOVAL,20HOUT20H,AL;发出EOI结束中断IRETCODEENDSENDSTART七.调试及运行记录经过调试以及程序的改正,程序正常运行。调试过程中,遇到以下电路或者程序理解问题:1.在按开关的时候要注意开关按下次数是由程序的赋予的初始值T2决定的。T2工作在方式0,在装入初值后,需再经过一个时钟脉冲后,才开始计数,故T2的初值应赋92.各个芯片在连接的时候要注意选择接触良好的接线,防止因为线路原因而使电路无法正常工作。3.灯的亮与不亮是由控制字来控制的。要安排好控制字和灯的对应位置。