首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 电脑技能 >

交通灯的黄灯很暗,该如何解决

2013-01-02 
交通灯的黄灯很暗STACKSEGMENT STACKDB200DUP(0)STACKENDSDATA SEGMENTLIVINGDB NOW IS DAY ,EVERY THING

交通灯的黄灯很暗
STACK  SEGMENT STACK
             DB  200  DUP(0)
STACK  ENDS
DATA SEGMENT
LIVING  DB 'NOW IS DAY ,EVERY THING IS NOMAL!',0AH,0DH,00H
NIGHT   DB 'NOW IS NIGHT,TRAFFIC IS NOT BUSY LIKE DAY!',0AH,0DH,00H
VIP        DB 'NOW IS VIP TIME!',0AH,0DH,00H
TIME   DB 00H,03H,05H,03H
LEDTAL DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,73H,38H
COUNT  DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
      MOV AX,DATA
      MOV DS,AX
      PUSH DS
      MOV AX,0000H
      MOV DS,AX
      MOV AX,OFFSET IRQ0
      ADD AX,2000H
      MOV SI,0020H
      MOV [SI],AX
      MOV AX,0000H
      MOV SI,0022H
      MOV [SI],AX
      CLI
      POP DS
      IN AL,21H
      AND AL,0FEH
      OUT 21H,AL   

      PUSH DS
      MOV AX,0000H
      MOV DS,AX
      MOV AX,OFFSET IRQ1
      ADD AX,2000H
      MOV SI,0024H
      MOV [SI],AX
      MOV AX,0000H
      MOV SI,0026H
      MOV [SI],AX
      CLI
      POP DS
      IN AL,21H
      AND AL,0FDH
      OUT 21H,AL 

   PUSH DS
      MOV AX,0000H
      MOV DS,AX
      MOV AX,OFFSET IRQ2
      ADD AX,2000H
      MOV SI,0028H
      MOV [SI],AX
      MOV AX,0000H
      MOV SI,002AH
      MOV [SI],AX
      CLI
      POP DS
      IN AL,21H
      AND AL,0EFH
      OUT 21H,AL 
  

     
      PUSH DS
      MOV AX,0000H
      MOV DS,AX
      MOV AX,OFFSET IRQ7
      ADD AX,2000H
      MOV SI,003CH
      MOV [SI],AX
      MOV AX,0000H


      MOV SI,003EH
      MOV [SI],AX
      CLI
      POP DS
      IN AL,21H
      AND AL,7FH
      OUT 21H,AL
F1:   MOV AH,06H
      MOV BX,OFFSET LIVING
      INT 10H    
      MOV AL,80H  
      OUT 63H,AL 
      MOV AL,0B6H   
      OUT 43H,AL
      MOV AX,59500
      OUT 42H,AL
      MOV AL,AH
      OUT 42H,AL
      MOV COUNT,0
      STI
;红绿灯属于8255的B端口控制   
S1:   MOV AL,0C3H ;红绿灯显示;11000011中间4个灯亮,其它灭  
      OUT 61H,AL
      CALL DISP
      CMP COUNT,20
      JL  S1      ;实现了1s的计时
      MOV COUNT,0
      MOV DI,OFFSET TIME
      MOV AL,[DI+1] 
      CMP AL,00H
      JZ  A5     ;绿灯高位即十位为0时跳到A5
      MOV AL,[DI]
      CMP AL,00H
      JZ  A6     ;绿灯低位即个位为0时跳到A6
      DEC AL
      MOV [DI],AL
    
A2:   MOV AL,[DI+2] ;红灯控制低位为0跳到A3
      CMP AL,00H
      JZ A3
      DEC AL
      MOV [DI+2],AL
      JMP S1
A3:   MOV AL,9   ;红灯低位为0时重新置9,在高位不为0时
      MOV [DI+2],AL
      MOV AL,[DI+3]
      DEC AL    ;红灯高位减1
      MOV [DI+3],AL
      JMP S1
A5:   MOV AL,[DI] ;绿高位为0时跳到A0
      CMP AL,01H
      JZ  A0
      DEC AL
      MOV [DI],AL
      JMP A2
A6:   MOV AL,9  ;绿灯低位为0时重新置9,在高位不为0时
      MOV [DI],AL
      MOV AL,[DI+1]
      DEC AL
      MOV [DI+1],AL
      JMP A2
A0:   MOV AL,05H ;显示5秒的黄灯时间
      MOV [DI],AL
      MOV [DI+2],AL
      JMP  S21

S21:  MOV AL,0C0H  ;黄灯的显示,属于8255的c端口高4位控制;绿灯灭,黄灯亮,红灯亮的状态


      OUT 62H,AL
      CALL DISP
      CMP COUNT,20
      JL  S21
      MOV COUNT,0
      MOV DI,OFFSET TIME
      MOV AL,[DI]
      CMP AL,00H
      JZ  A7
      DEC AL
      MOV [DI],AL
      JMP S22
A7:   MOV AL,3  ;恢复原来的计数
      MOV [DI+1],AL
      MOV AL,0
      MOV [DI],AL
      MOV AL,3
      MOV [DI+3],AL
      MOV AL,5
      MOV [DI+2],AL
      JMP S3
      
S22:  MOV AL,0F3H   ;红灯亮,黄灯和绿灯都灭的状态
      OUT 61H,AL
      MOVAL,0F0H
      OUT62H,AL
      CALL DISP
      CMP COUNT,20
      JL  S22
      MOV COUNT,0
      MOV DI,OFFSET TIME
      MOV AL,[DI]
      CMP AL,00H
      JZ  A7
      DEC AL
      MOV [DI],AL
      MOV AL,[DI+2]
      DEC AL
      MOV [DI+2],AL
      JMP S21

S3:    MOV AL,3CH    ;与s1相反的状态
      OUT 61H,AL
      CALL DISP
      CMP COUNT,20
      JL S3
      MOV COUNT,0
      MOV DI,OFFSET TIME
      MOV AL,[DI+3]
      CMP AL,00H
      JZ  A8
      MOV AL,[DI+2]
      CMP AL,00H
      JZ  A9
      DEC AL
      MOV [DI+2],AL
A11:  MOV AL,[DI]
      CMP AL,00H
      JZ A12
      DEC AL
      MOV [DI],AL   
      JMP S3
A8:   MOV AL,[DI+2]
      CMP AL,01H
      JZ  A1
      DEC AL
      MOV [DI+2],AL
      JMP A11
A9:   MOV AL,9
      MOV [DI+2],AL
      MOV AL,[DI+3]
      DEC AL


      MOV [DI+3],AL
      JMP A11
A12:   MOV AL,9
       MOV [DI],AL
       MOV AL,[DI+1]
       DEC AL
       MOV [DI+1],AL
       JMP S3
A1:    MOV AL,05H
       MOV [DI+2],AL
       MOV [DI],AL
       JMP S41

S41:   MOV AL,30H    ;与s22相反的状态
       OUT 62H,AL
       CALL DISP
       CMP COUNT,20
       JL  S41
       MOV COUNT,0
MOV DI,OFFSET TIME
      MOV AL,[DI]
      CMP AL,00H
      JZ A10
      DEC AL
      MOV [DI],AL
      MOV AL,[DI+2]
      DEC AL
      MOV [DI+2],AL
       JMP S42
A10:   MOV AL,3
       MOV [DI+1],AL
       MOV AL,0
       MOV [DI],AL
       MOV AL,3 
       MOV [DI+3],AL
       MOV AL,5
       MOV [DI+2],AL
       JMP  S1

 S42:  MOV AL,3FH    
       OUT 61H,AL
       MOVAL,0F0H
      OUT62H,AL
      CALL DISP
      CMP COUNT,20
      JL   S42
      MOV COUNT,0
      MOV DI,OFFSET TIME
      MOV AL,[DI+2]
      CMP AL,00H
      JZ   A10
      DEC AL
      MOV [DI+2],AL
      MOV [DI],AL
      JMP S41

 IRQ0:               ;实现复位的状态
      MOV AL,20H   
      OUT 20H,AL
      MOV DI,OFFSET TIME
      MOV AL,3
      MOV [DI+1],AL
      MOV AL,0
      MOV [DI],AL
      MOV AL,3
      MOV [DI+3],AL
      MOV AL,5
      MOV [DI+2],AL
      JMP F1
      IRET


    
IRQ1:                    ;实现全红灯的状态
      MOV AL,20H   
      OUT 20H,AL
      MOV AH,06H
      MOV   BX,OFFSET VIP
      INT 10H
L7:   STI
      MOV DI,OFFSET TIME
      MOV AL,5
      MOV [DI+1],AL
      MOV [DI+3],AL                                                                                 
      MOV AL,10
      MOV [DI],AL
      MOV [DI+2],AL
      MOV AL,0FH
      OUT 61H,AL
      CALL DISP
      JMP L7
      IRET

IRQ2:
      MOV AL,20H    
      OUT 20H,AL
      MOV AH,06H
      MOV   BX,OFFSET NIGHT
      INT 10H
      STI
      MOV DI,OFFSET TIME
      MOV AL,11
      MOV [DI+1],AL
      MOV AL,5
      MOV [DI],AL
      MOV AL,11
      MOV [DI+3],AL
      MOV AL,5
      MOV [DI+2],AL
L3:   MOV COUNT,0 
L0:   MOV AL,0CCH
      OUT 61H,AL
      CALL DISP
      CMP COUNT,10
      JL  L0
      MOV COUNT,0
L1:   MOV AL,0FFH
      OUT 61H,AL
      CALL DISP
      CMP COUNT,10
      JL  L1
      JMP L3
      IRET
 
IRQ7: INC COUNT     
      MOV AL,20H
      OUT 20H,AL
      IRET

DISP PROC NEAR
      MOV DI,OFFSET TIME
      MOV CL,0FEH
ST1:  MOV AL,CL
      TEST  AL,10H
      JZ  ED
      OUT 62H,AL       
      ROL AL,01H       


      MOV CL,AL
      MOV AL,[DI]
      MOV BX,OFFSET LEDTAL
      XLAT
      OUT 60H,AL      
      CALL DELAY
      INC DI
      JMP ST1
ED:   RET              
DISP  ENDP
DELAY PROC NEAR
      PUSH CX
      MOV CX,1000
WAIT1: LOOP WAIT1
      POP CX
      RET
DELAY ENDP
CODE  ENDS 
      END START 
    
 
如何更改?
[解决办法]
有可能是线路的问题,也有可能是程序的问题。。。,。
[解决办法]
我看线路问题居多

热点排行