📄 000123.txt
字号:
交通灯汇编源程序
1:
;*************************************************
; Project Name: 交通灯控制
; File Name : 交通灯控制.asm
; Chip Type : ATMEL,AT89C51
; Frequency : 12MHz
; Version :
; Author : shijiandesuo@163.com
; Date : 2007/04/21
;**************************************************
ORG 0000H
AJMP START
ORG 000BH
AJMP TIME0
ORG 0030H
START:
MOV P1, #0FFH
MOV 30H, #0
MOV 31H, #0
MOV 32H, #0
MOV 33H, #0
MOV 34H, #0
;
CLR P1.0
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB EA
SETB ET0
SETB TR0
LOOP: AJMP LOOP
;;;;;;;;;;;;;;;
TIME0:
PUSH ACC
PUSH PSW
INC 30H
MOV A, 30H
CJNE A, #20, TIME1
MOV 30H, #0
AJMP DL1MIN
TIME1:
MOV TH0, #3CH
MOV TL0, #0B0H
POP ACC
POP PSW
RETI
DL1MIN:
INC 31H
MOV A, 31H
CJNE A, #60, TIME1 ;不到1分钟
MOV 31H, #0
JNB P1.0, REDDL ;
JNB P1.1, YELLOWDL
JNB P1.2, GREENDL
REDDL:
INC 32H ;红灯的分钟计数
MOV A, 32H
CJNE A, #2, TIME1 ;红灯不到2分钟
MOV 32H, #0
SETB P1.0
CLR P1.1
AJMP TIME1
YELLOWDL:
INC 33H
MOV A, 33H
CJNE A, #1, TIME1
MOV 33H, #0
SETB P1.1
CLR P1.2
AJMP TIME1
GREENDL:
INC 34H
MOV A, 34H
CJNE A, #3, TIME1
MOV 34H, #0
SETB P1.2
CLR P1.0
AJMP TIME1
END
关于交通红黄绿灯控制系统
;这是我的一段程序还希参考: 用P1口的0,1,2来控制A路三个信号灯的开与关,3,4,5
来控制B路三个信号灯的开与关
;A路
;P1.0输出L绿灯亮,H灭
;P1.1输出L黄灯亮,H灭
;P1.2输出L红灯亮,H灭
;B路
;P1.3输出L绿灯亮,H灭
;P1.4输出L黄灯亮,H灭
;P1.5输出L红灯亮,H灭
;---------------------------------------------
;程序从0000H开始
ORG 0000H
LJMP KS0
;---------------------------------------------
;设置中断方式与控制功能
ORG 0003H
LJMP ZD0
ORG 000BH
LJMP DS0ZD
ORG 0013H
LJMP ZD1
;---------------------------------------------
;主程序
KS0:
MOV P1,#33H;使红绿灯初始,A路红灯亮,B路绿灯亮
MOV R2,#00H;此寄存器用于计数
MOV TH0,#06H
MOV TL0,#06H
MOV 10h,#14h;T0中断20次(产生10ms信号)14
MOV 11h,#64h;产生1秒信号64
MOV IE,#87H;?开中断INT0 ,INT1,T0
MOV TMOD,#02H;T0工作在方式2
SETB PT0
SETB TR0;T0开始
;----------------------------------------------
;红绿灯转换开始
KS01:
CJNE R2,#1EH,GUO0
MOV P1,#2EH;第一个30秒到,A路绿灯亮,B路黄灯亮
GUO0:
CJNE R2,#20H,GUO1
MOV P1,#1EH;32秒到A路绿灯亮, B路红灯亮
GUO1:
CJNE R2,#3AH,GUO2
MOV P1,#1DH;58秒到A路黄灯亮, B路红灯亮
GUO2:
CJNE R2,#3CH,GUO3
MOV P1,#33H;60秒到A路红灯亮, B路绿灯亮
MOV R2,#00H
GUO3:
LJMP KS01
;----------------------------------------------
;T0中断子程序
DS0ZD:
DJNZ 10H,ZHOU;中内容不等于0走(等0产生10ms信号)
MOV 10H,#14H;重装10H
DJNZ 11H,ZHOU;中的内容不等0 走(等0产生1 秒钟信号)
MOV 11h,#64H;重装11h
INC R2;R2加一秒
ZHOU:
RETI;T0中断结束
;-------------------------------------------------------
;INT0中断子程序, 电平中断
; 用于人工控制红绿灯,A路红灯亮, B路绿灯亮
ZD0:
PUSH psw
MOV P1,#33H;
POP psw
RETI
;--------------------------------------------------------
;INT1中断子程序, 电平中断
; 用于人工控制红绿灯,A路绿灯亮, B路红灯亮
ZD1:
PUSH psw
MOV P1,#1EH
POP psw
RETI
汇编交通灯问题!
延时时间我乱写的,你自己到实验箱上再调整吧!
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,8255_MODE;8255控制字
MOV AL,10000000B
OUT DX,AL
JP0: MOV DX,8255_C;南北口绿灯亮,东西红灯亮
MOV AL,01011010B
OUT DX,AL
CALL DELAY10
CALL DELAY10
CALL DELAY10
CALL DELAY10
MOV AL,01010000B
OUT DX,AL
MOV DX,8255_B;南北口黄灯亮
MOV AL,10100000B
OUT DX,AL
CALL DELAY10
MOV AL,00000000B
OUT DX,AL
MOV DX,8255_C;东西口绿灯亮,南北红灯亮
MOV AL,10100101B
OUT DX,AL
CALL DELAY10
CALL DELAY10
CALL DELAY10
CALL DELAY10
MOV AL,10100000B
OUT DX,AL
MOV DX,8255_B;东西口黄灯亮
MOV AL,01010000B
OUT DX,AL
CALL DELAY10
MOV AL,00000000B
OUT DX,AL
MOV AH,1
INT 16H
JNZ JP3
JMP JP0
JP1: MOV AX,4C00H
INT 21H
DELAY1 PROC NEAR
PUSH AX
PUSH CX
MOV CX,0F000H
D0: LOOP D0
POP CX
POP AX
RET
DELAY1 ENDP
DELAY10 PROC NEAR
PUSH AX
PUSH CX
MOV CX,8000H
D1: CALL DELAY1
LOOP D1
POP CX
POP AX
RET
DELAY10 ENDP
CODE ENDS
END START
源程序如下:
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START:MOV DX,73H
MOV AL,80H
OUT DX,AL
MOV DX,71H
MOV AL,1110B
OUT DX,AL
MOV DX,72H
MOV AL,01111001B
OUT DX,AL
CALL DELAYED1
MOV BX,5H
L1:
MOV DX,71H
MOV AL,1110B
OUT DX,AL
MOV DX,72H
MOV AL,10111010B
OUT DX,AL
CALL DELAYED2
MOV DX,71H
MOV AL,1110B
OUT DX,AL
MOV DX,72H
MOV AL,11111011B
OUT DX,AL
CALL DELAYED2
DEC BX
JNZ L1
MOV DX,71H
MOV AL,0011B
OUT DX,AL
MOV DX,72H
MOV AL,11001111B
OUT DX,AL
CALL DELAYED1
MOV BX,5H
L2:
MOV DX,71H
MOV AL,0101B
OUT DX,AL
MOV DX,72H
MOV AL,11010111B
OUT DX,AL
CALL DELAYED2
MOV DX,71H
MOV AL,0111B
OUT DX,AL
MOV DX,72H
MOV AL,11011111B
OUT DX,AL
CALL DELAYED2
DEC BX
JNZ L2
JMP START
DELAYED1: MOV AX,10
L3: MOV CX,0FFFFH
LOOP $
DEC AX
JNZ L3
RET
DELAYED2:MOV CX,0FFFFH
LOOP $
RET
CODE ENDS
END START
8255CS插孔连译码输出070H-07FH插孔
我说的B 就是你看到的PB C就是实验版上的PC
如果你 b3--L1 b2--L2 B1--L3 B0--L4 C7--L5 C6--L6
c5--L7 c4--L8 c3--L9 c2--L10 c1--L11 C0--L12不对的话
可能你的实验板和我见到的不同
你再试一下
C7--L1 C6--L2 c5--L3 c4--L4 c3--L5 c2--L6 C1--L7 C0--L8
B3--L9 B2--L10 B1--L11 B0——L12
还有 灯的延迟时间你要自己调 因为个人的芯片时钟不一样
源程序我调过
还有 标号你自己改一下
实验目的:了解8255与交通灯模块
;实验连线:dg1-dg4接pc0-pc3,dr1-dr4接pc4-pc7,cs接8400
z8279 equ 0ff82h
d8279 equ 0ff80h
ledmod equ 00h
ledfeq equ 20h
ledcls equ 0c1h
c8255 equ 8406h
p8255a equ 8400h
p8255b equ 8402h
p8255c equ 8404h
org 0000h
ajmp start
org 0040h
start:
mov sp, #60h
lcall init8279
mov dptr,#c8255
mov a,#90h
movx @dptr,a
mov dptr,#p8255c
mov a,#00000000b ;交通灯全黄
movx @dptr,a
WAIT:
LCALL peek ;读键盘
CJNE A,#0FFH,peeka ;判断是否有键输入
sjmp wait
peeka: CJNE A,#0aH,peekb ;输入键是'a',进正常状态
sjmp auto_traffic
peekb: cjne a,#0bh,wait ;输入键是'b',进紧急状态
sjmp manual_traffic
auto_traffic:
mov r1,#60
loop1: LCALL start_traffic1
lcall disptime
dec r1
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
lcall peek
cjne a,#0bh,go_on1 ;输入"b"键,转manual_traffic紧急情况状态,交通灯全红
sjmp manual_traffic
go_on1: cjne r1,#0,loop1
mov r1,#60
loop2: lcall start_traffic2
lcall disptime
dec r1
lcall delay
lcall delay
lcall delay
lcall delay
lcall delay
lcall peek
cjne a,#0bh,go_on2 ;输入"b"键,转manual_traffic紧急情况状态,交通灯全红
sjmp manual_traffic
go_on2: cjne r1,#0,loop2
sjmp auto_traffic
manual_traffic:
mov dptr,#p8255c
mov a,#00001111b
movx @dptr,a
traffic:
lcall peek
traffic_c:
cjne a,#0ch,traffic_d
lcall start_traffic1
sjmp traffic
traffic_d:
cjne a,#0dh,traffic_e
lcall start_traffic2
sjmp traffic
traffic_e:
cjne a,#0eh, traffic
sjmp auto_traffic
nop
;************************************************
;
; 数据区
;
;************************************************
;LED显示常数表
LED: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.'
DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.'
DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, '
;键盘键码表
KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z'
DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C'
;********************************************************************
;所有子程序均在下面
start_traffic1:
PUSH DPH ;保存现场
PUSH DPL
PUSH acc
mov dptr,#p8255c
mov a,#01101001b ;东西绿,南北红
movx @dptr,a
POP acc ;恢复现场
POP DPL
POP DPH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -