⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 000123.txt

📁 微机原理及接口技术课程设计交通灯程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
交通灯汇编源程序
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 + -