《单片机红绿灯的汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《单片机红绿灯的汇编语言程序设计.docx(5页珍藏版)》请在优知文库上搜索。
1、单片机红绿灯的汇编语言程序设计a程序源代码ORGOOOOH注程序的入口地址1.jmpmain;跳转到主程序的开场处ORG0003H汐卜部中断0的中断程序入口地址ORGOOOBH淀时器0的中断程序入口地址1.JMPT0NT;跳转到中断服务程序处ORG0013H;外部中断I的中断程序入口地址MAIN:MOVSP,#50HMOVlE,#8EH;CPU开中断,允许To中断,Tl中断和外部中断1中断MoVTMoD,#5IH1设置TI为计数方式,TO为定时方式,且都工作于模式1MOVTH1,M)OH;Tl计数器清零MOVTL1,M)OHSETBTRl;启动Tl计时器SETBEXl;允许INTl中断SETB
2、ITI;选择边沿触发方式MOVDPTR,#0003HMoVA,#80H;给8255赋初值,8255工作于方式OMOVXDPTR,AAGAIN:JBP3.1,NO;判断是否要设定东西方向红绿灯时间的初值,假设P3.1为I那么跳转MOVA,PlJBP1.7,RED;判断P1.7是否为1,假设为1那么设定红灯时间,否那么设定绿灯时间MOVRO,#OOH;R0清零MOVRO,A;存入东西方向绿灯初始时间MOVR3,A1.CALLDISPl1.CALLDELAYAjmpagainRED:MOVA,PlANLA,#7FH1.7置OMOVR7,#00H;R7清零MOVR7,A;存入东西方向红灯初始时间MOV
3、R3,A1.CALLDISPl1.CALLDELAYAJMPAGAINNO:SETBTRO;启动TO计时器MOV76H,R7;红灯时间存入76HNOO:MoVA,76H;东西方向制止,南北方向通行MOVR3,AMoVDPTR,#OOOOH;置8255A口,东西方向红灯亮,南北方向绿灯亮MOVA,#ODDHMOVXDPTR,AN01:JBP2.0,B0N02:SETBP3.0CJNER3,M)0H,N01;比较R3中的值是否为0,不为O转到当前指令处执行;-黄灯闪烁5秒程序-NkSETBP3.0MOVR3,#05HMoVDPTR,#OOOOH;置8255A口,东西,南北方向黄灯亮MOVA,M)D
4、4HMOVXDPTR,ANil:MOVR4,#00HNI2:CJNER4,#7DH,$;黄灯持续亮0.5秒NI3:MOVDPTR,#000OH;置8255A口,南北方向黄灯灭MOVA,#ODDHMOVXDPTR,AN14:MOVR4,#00HCJNER4,#7DH,$;黄灯持续灭0.5秒CJNER3,M)OH,N1;闪烁时间达5秒那么退出N2:MOVR7,#00HMOVA,RO;东西通行,南北制止MOVR3,AMoVDPTR,#OOOOH;置8255A口,东西方向绿灯亮,南北方向红灯亮MOVA,M)EBHMOVXDPTR,AN21:JBP2.0,T03N22:CJNER3,#00H,N21;-
5、黄灯闪烁5秒程序-N3:MOVR3,#05HMoVDPTR,#OoOOH;置8255A口,东西,南北方向黄灯亮MOVA,#0E2HMOVXDPTR,AN31:MOVR4,M)0HCJNER4,#7DH,$;黄灯持续亮0.5秒N32:MOVDPTR,#OOOOH;置8255A口,南北方向黄灯灭MOVA,M)EBHMOVXDPTR,AN33:MOVR4,M)0HCJNER4,#7DH,$;黄灯持续灭0.5秒CJNER3,M)0H,N3;闪烁时间达5秒那么退出SJMPNOO;-闯红灯报警程序-BO:MOVR2,#03H;报警持续时间3秒BOI:M0VA,R3JZNl;假设倒计时完毕,不再报警CLRP
6、3.0;报警CJNER2,M)0H,B01;判断3秒是否完毕SJMPN02;1秒延时子程序N7:RETITO_INT:MOVTL0,#9AH;给定时器TO送定时IOms的初值MOVTH0,#OFIHINCR4INCR5CJNER5,#OFAH,TOl;判断延时是否够一秒,不够那么调用显示子程序MOVR5,#00H;R5清零DECR3;倒计时初值减一DECR2;报警初值减一TOI:ACALLDlSP;调用显示子程序RETI;中断返回;-显示子程序-DISP:JNBP2.4,T02DISPl:MOVB,#OAHMOVA,R3;R3中值二转十显示转换DIVABMOV79H,AMOV7AH,BDIS:
7、MOVA,79H;显示十位MOVDPTR,#TABMOVCA,A+DPTRMOVDPTR.#0002HMOVXDPTR,AMOVDPTR,M)001HMOVA,M)F7HMOVXDPTR,ALCALLDELAYDS2:MOVA,7AH;显示个位MOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,#0002HMOVXDPTR,AMOVDPTR,M)001HMOVA,#OFBHMOVXDPTR,ARET;_一一东西方向车流量检测程序-一T03:MoVA,R3SUBBA,M)OH;假设绿灯倒计时完毕,不再检测车流量JZN3JBP2.0,T03INCR7CJNER7,#64H,E1MOVR
8、7,#00H;中断到IoO次那么清零EkSJMPN22;-东西方向车流量显示程序-一T02:MOVB,#OAHMOVA,R7;R7中值二转十显示转换DIVABMOV79H,AMOV7AH,BDIS3:MOVA,79H;显示十位MOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,#0002HMOVXDPTR,AMOVDPTR,M)001HMOVA,#0F7HMOVXDPTR,A1.CALLDELAYDS4:MOVA,7AH;显示个位MOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,M)002HMOVXDPTR,AMOVDPTR.#000IHMOVA,#OFBHMOVXD
9、PTR,A1.JMPN7;延时4MS子程序DELAY:MOVR1,M)AH1.OOP:MOVR6,#64HNOP1.OOPl:DJNZR6,LOOP1DJNZR!,LOOPRET;-字符表-TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHENDORGOOOOHAJMPMAINORGOOOBH1.JMPINTORG0030HMAIN:MOVR2,#20HMOVTMOD,#01HMOVTLO,M)BOHMOVTH0,#80HSETBEASETBETOSETBTROLOOP:MOVA,#01HMOVP1,A1.CALLDELMOVR0,#02H1.CALLF
10、PLOOPkMOVA,#02HMOVPl,A1.CALLDELMOVR0,#02H1.CALLFP1.00P2:M0VA,#04HMOVPl,A1.CALLDELMOVR0,#05H1.CALLFPMOVP1,#OOH1.CALLDELCJNERO,M)OH,AASjmploopFP:MOVR1,#80HMOVA,RlMOVDPTR,#3FFFHMOVXDPTR,ARRAMOVRl,AMOVA,ROANLA,#OFHMOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,#5FFFHMOVXDPTR,ALCALLDELMOVA,M)FFHMOVDPTR,#5FFFHMOVXDPTR,A
11、MOVA,RlMOVDPTR,#3FFFHMOVXDPTR,AMOVA,ROANLA,#OFOHSWAPAMOVDPTR,#TABMOVCA,A+DPTRMOVDPTR,#5FFFHMOVXDPTR,A1.CALLDELMOVA,#OFFHMOVDPTR,#5FFFHMOVXDPTR,ACJNER0,#99H,FPRETDEL:MOVR5,#100HDELO:MOVR6,#250HDEL1JNZR6,DEL1DJNZR5,DEL0RETINT:CLRETODJNZR2,GOONMOVA,ROADDA,#99HDAAMOVRO,AMOVR2,#20HGOON:MOVTMoD,#OIHMOVTLO,#OBOHMOVTH0,#80HSETBEASETBETOSETBTRORETITAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND