1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,实验二 I/O扩展及中断实验,实验设计方案,以两个74LS273为输出口,控制12个LED发光二极管,模拟交通信号灯的管理;在此基础上,增加允许急救车通过的要求,在Proteus VSM仿真环境中连接线路:以P0口作为地址总线,通过译码器74LS138控制两个74LS273 的输出,并使用开关连接上INT0作为中断输入。,编写程序,预期要求为:开始时东西方向绿灯亮,南北方向红灯亮;20秒后,东西方向黄灯闪烁,然后东西方向红灯亮,南北方向绿灯亮。当有中断信号进入后,四个方向灯全红10秒,然后恢复到原来的状态。
2、程序流程图,all_redequ01001001b;1st control byte for traffic lights,all_red1equ00000010b;2nd control byte,all red,ewg_nsrequ00001001b;east-west green,north-south red,ewg_nsr1equ00001001b,ewy_nsrequ10001001b;east-west yellow,north-south red,ewy_nsr1equ00000100b,ewyn_nsrequ00001001b;,east-west yellow(off),
3、north-south red,ewyn_nsr1equ00000000b;for flash,ewr_nsgequ01100100b;east-west red,north-south green,ewr_nsg1equ00000010b,ewr_nsyequ01010010b;east-west red,north-south yellow,ewr_nsy1equ00000010b,ewr_nsynequ01000000b,ewr_nsyn1equ00000010b,lightdata30h;store 1st control byte,light1data31h;store 2nd co
4、ntrol byte,portequ0008h;address of 1st 74ls273,port1equ0010h;address of 2nd 74ls273,org0000h,ljmpmain,org0003h;interrupt vector,ljmpint0_isr;jump to below,org0030h,main:,movsp,#5fh;set up stack,movpsw,#00h;select register bank,setbit0;set external interrupt 0s;triggered mode,setbex0;enable external
5、interrupt 0,setbea;enable interrupt(all),loop:,mova,#ewg_nsr,movlight,a,movdptr,#port,movxdptr,a,mova,#ewg_nsr1,movlight1,a,movdptr,#port1,movxdptr,a,movr2,#200,delay1:,calldelay100ms,djnzr2,delay1;east-west green,north-south red for a while,movr3,#10,flash1:,mova,#ewy_nsr,movlight,a,movdptr,#port,m
6、ovxdptr,a,mova,#ewy_nsr1,movlight1,a,movdptr,#port1,movxdptr,a,calldelay100ms,mova,#ewyn_nsr,movlight,a,mova,#ewr_nsyn1,pushlight1;save 2nd control byte,movdptr,#port,mova,#ewyn_nsr1,ewg_nsrequ00001001b;east-west green,north-south red,movxdptr,a,movxdptr,a,ewr_nsg1equ00000010b,movdptr,#port,calldela
7、y100ms,pushlight;save 1st,mova,#ewyn_nsr,movlight,a,movlight1,a,mova,#ewg_nsr,movdptr,#port,movxdptr,a,mova,#ewyn_nsr1,movlight1,a,movdptr,#port1,movxdptr,a,calldelay100ms,djnzr3,flash1,;east-west yellow flashing,north-south red for a while,mova,#ewr_nsg,movlight,a,movdptr,#port,movxdptr,a,mova,#ewr
8、nsg1,movlight1,a,movdptr,#port1,movxdptr,a,movr2,#200,movxdptr,a,calldelay100ms,mova,#ewr_nsyn,movlight,a,movdptr,#port,movxdptr,a,mova,#ewr_nsyn1,movlight1,a,movdptr,#port1,movxdptr,a,calldelay100ms,djnzr3,flash2,;east-west red,north-south yellow flashing for a while,ajmploop,int0_isr:,pushpsw;save psw(rs1 rs0),setbrs0;change register bank,pushacc;save a,pushlight1;save 2nd control byte,pushlight;save 1st,mova,#all_red,movdptr,#port,movxdptr,a,mova,#all_red1,movdptr,#port1,movxdptr,a,movr2,#200,