/******************************************************************************
交通灯控制程序说明文档
******************************************************************************/
1、用protues进行原理图绘制
2、用keil软件进行代码编写与调试
3、Keil + protues进行仿真实验
4、处理器采用Atmel公司的AT89C51,晶振频率12MHz,源代码用汇编语言编写
5、主要控制思想:简单交通灯,只涉及东西南北四个方向车辆控制,不考虑转向问题,流程图
6、原理图
7、源代码
ORG 0000H
MOV P1, #00H
MOV P2, #00H ;初始化,灯泡全灭
ST: CLR P2.1 ;南北黄灯灭
CLR P2.4
CLR P1.2 ;东西红灯灭
CLR P1.5
SETB P1.0 ;东西绿灯亮
SETB P1.3
SETB P2.2 ;南北红灯亮
SETB P2.5
LCALL DELAY0
CLR P1.0 ;东西绿灯灭黄灯亮
CLR P1.3
SETB P1.1 ;东西黄灯亮
SETB P1.4
LCALL DELAY1
CLR P1.1 ;东西黄灯灭
CLR P1.4
SETB P1.2 ;东西红灯亮
SETB P1.5
CLR P2.2 ;南北红灯灭
CLR P2.5
SETB P2.0 ;南北绿灯亮
SETB P2.3
LCALL DELAY0
CLR P2.0 ;南北绿灯灭
CLR P2.2
SETB P2.1 ;南北黄灯亮
SETB P2.4
LCALL DELAY1
LJMP ST ;跳转到开始,循环执行
DELAY0: MOV R0, #200 ;二级延时子程序,延时200*0.1 = 20s
DD0: LCALL DELAY ;调用一级延时子程序0.1s,
DJNZ R0, DD0 ;执行200次
RET
DELAY1: MOV R0, #20 ;二级延时子程序,延时20*0.1 = 2s
DD1: LCALL DELAY ;调用一级延时子程序0.1s,
DJNZ R0, DD1 ;执行20次
RET
DELAY: MOV R1, #200 ;一级延时子程序,延时200*250*2 = 100000us = 0.1s
D1: MOV R2, #250
D0: DJNZ R2, D0
DJNZ R1, D1
RET
END
来源:http://tekkamanninja.blog.chinaunix.net/uid-29270124-id-4153629.html