Advertisement
Electgpl

8051 - Examen sin Timer

Jun 22nd, 2017
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;-------------------------------------------------------------------------------------
  2. ;Programa tomado en el examen 21/06/17
  3. ;Estacionamiento con semáforo (Verde, Rojo) y Barrera, Sensores en Entrada y Salida.  
  4. ;
  5. ;                Registro IE      
  6. ; EA | -- | -- | ES | ET1 | EX1 | ET0 | EX0 |  
  7. ;  0    0    0    0     0     1     0     1  
  8. ;  
  9. ;                Registro IP      
  10. ; -- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |  
  11. ;  0    0     0    0     0     0     0     0    
  12. ;
  13. ;                Registro TCON      
  14. ; TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |  
  15. ;  0     0     0     0     0     1     0     1    
  16. ;                
  17. ;Archivo: examenSinTimer.s03
  18. ;Fecha de realización: 22/06/2017
  19. ;Autor: Sebastian Caccavallo - electgpl.blogspot.com.ar
  20. ;Modificación:
  21. ;-------------------------------------------------------------------------------------
  22.             ORG     0000H           ;Dirección del origen del programa
  23.             JMP     SETUP           ;Salta al Inicio del programa
  24. ;            
  25.             ORG     0003H           ;Dirección de interrupción externa INT0
  26.             JMP     EXT_INT0        ;Salta a subrutina de interrupción        
  27. ;            
  28.             ORG     0013H           ;Dirección de interrupción externa INT1
  29.             JMP     EXT_INT1        ;Salta a subrutina de interrupción  
  30. ;    
  31. CONT_A      EQU     50H             ;Dirección de la variable CONT_A
  32. N_AUTO      EQU     51H             ;Dirección de la constante N_AUTO
  33. ;        
  34. SETUP:      MOV     TCON,#05H       ;Configura IT1=1 y IT0=1
  35.             MOV     IE,#05H         ;Configura EX1=1 y EX0=1
  36.             MOV     IP,#00H         ;Des-habilita prioridad de interrupción
  37.             SETB    EA              ;Habilita interrupción global      
  38.             MOV     CONT_A,#00H     ;Inicializa contador CONT_A con 0
  39.             MOV     N_AUTO,#05H     ;Se setea máximo de autos a 5 (puede variar)
  40.             SETB    P1.0            ;Semáforo Luz Verde TRUE
  41.             CLR     P1.1            ;Semáforo Luz Roja FALSE
  42.             SETB    P1.2            ;Barrera TRUE (Alta)
  43. ;            
  44. LOOP:       MOV     A,CONT_A        ;Cargamos Acumulador con CONT_A
  45.             CJNE    A,N_AUTO,NOTEQ  ;Comparamos CONT_A (cantidad actual) con N_AUTO (Máximo)
  46.             SJMP    IGUAL           ;Si son iguales salta a IGUAL
  47. NOTEQ:      JC      MENOR           ;Si Carry=1 Salta a MENOR
  48.             SJMP    MAYOR           ;Si Carry=0 Salta a MAYOR
  49. IGUAL:      CALL    COMPLETO        ;Si IGUAL, llama a subrutina COMPLETO
  50.             SJMP    LOOP            ;Repite el ciclo con LOOP
  51. MAYOR:      CALL    COMPLETO        ;Si MAYOR, llama a subrutina COMPLETO
  52.             SJMP    LOOP            ;Repite el ciclo con LOOP
  53. MENOR:      CALL    LIBRE           ;Si MENOR, llama a subrutina LIBRE
  54.             SJMP    LOOP            ;Repite el ciclo con LOOP
  55. ;
  56. COMPLETO:   CLR     P1.0            ;Semáforo Luz Verde FALSE
  57.             SETB    P1.1            ;Semáforo Luz Roja TRUE
  58.             CLR     P1.2            ;Barrera FALSE (Baja)
  59.             RET                     ;Retorno de Subrutina
  60. ;
  61. LIBRE:      SETB    P1.0            ;Semáforo Luz Verde TRUE
  62.             CLR     P1.1            ;Semáforo Luz Roja FALSE
  63.             SETB    P1.2            ;Barrera TRUE (Alta)
  64.             RET                     ;Retorno de Subrutina
  65. ;
  66. EXT_INT0:   MOV     A,CONT_A        ;Intercambio de variables
  67.             INC     A               ;Incrementa A
  68.             MOV     CONT_A,A        ;Carga CONT_A con valor incrementado
  69.             RETI                    ;Retorno de interrupción
  70. ;        
  71. EXT_INT1:   MOV     A,CONT_A        ;Intercambio de variables
  72.             DEC     A               ;Incrementa A
  73.             JC      CERO            ;Validación de que CONT_A no sea menor que cero
  74.             MOV     CONT_A,A        ;Carga CONT_A con valor incrementado  
  75.             RETI                    ;Retorno de interrupción
  76. CERO:       MOV     CONT_A,#00H     ;Mueve cero a CONT_A
  77.             RETI                    ;Retorno de interrupción
  78. ;
  79.             END                     ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement