Advertisement
Electgpl

8051 - Examen con Timer

Jun 22nd, 2017
174
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. ;El accionamiento de la barrera tiene un delay mediante el Timer1 en 16bit
  5. ;
  6. ;NOTA: TiempoOscilador: fXLS/Div = 12MHz/12=1us
  7. ;Valor del delay Tiempo[us]/TiempoOscilador[us]=65.535ms/1us=65535
  8. ;Calculando TLO y THO: 65536-65535=0 -> 0000
  9. ;Se itera 10 veces = 655ms
  10. ;
  11. ;                Registro TMOD      
  12. ; -------TIMER1--------|--------TIMER0--------|
  13. ; GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |  
  14. ;   0     0    0    1      0     0    0    0      
  15. ;
  16. ;                Registro IE      
  17. ; EA | -- | -- | ES | ET1 | EX1 | ET0 | EX0 |  
  18. ;  0    0    0    0     0     1     0     1  
  19. ;  
  20. ;                Registro IP      
  21. ; -- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |  
  22. ;  0    0     0    0     0     0     0     0    
  23. ;
  24. ;                Registro TCON      
  25. ; TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |  
  26. ;  0     0     0     0     0     1     0     1    
  27. ;                
  28. ;Archivo: examenConTimer.s03
  29. ;Fecha de realización: 22/06/2017
  30. ;Autor: Sebastian Caccavallo - electgpl.blogspot.com.ar
  31. ;Modificación:
  32. ;-------------------------------------------------------------------------------------
  33.             ORG     0000H           ;Dirección del origen del programa
  34.             JMP     SETUP           ;Salta al Inicio del programa
  35. ;            
  36.             ORG     0003H           ;Dirección de interrupción externa INT0
  37.             JMP     EXT_INT0        ;Salta a subrutina de interrupción        
  38. ;            
  39.             ORG     0013H           ;Dirección de interrupción externa INT1
  40.             JMP     EXT_INT1        ;Salta a subrutina de interrupción  
  41. ;    
  42. CONT_A      EQU     50H             ;Dirección de la variable CONT_A
  43. N_AUTO      EQU     51H             ;Dirección de la constante N_AUTO
  44. ;        
  45. SETUP:      MOV     TMOD,#10H       ;Configuramos TMOD con 1 (TMR1 - Modo 0) 16bits
  46.             MOV     TCON,#05H       ;Configura IT1=1 y IT0=1
  47.             MOV     IE,#05H         ;Configura EX1=1 y EX0=1
  48.             MOV     IP,#00H         ;Des-habilita prioridad de interrupción
  49.             SETB    EA              ;Habilita interrupción global      
  50.             MOV     CONT_A,#00H     ;Inicializa contador CONT_A con 0
  51.             MOV     N_AUTO,#05H     ;Se setea máximo de autos a 5 (puede variar)
  52.             SETB    P1.0            ;Semáforo Luz Verde TRUE
  53.             CLR     P1.1            ;Semáforo Luz Roja FALSE
  54.             SETB    P1.2            ;Barrera TRUE (Alta)
  55. ;            
  56. LOOP:       MOV     A,CONT_A        ;Cargamos Acumulador con CONT_A
  57.             CJNE    A,N_AUTO,NOTEQ  ;Comparamos CONT_A (cantidad actual) con N_AUTO (Máximo)
  58.             SJMP    IGUAL           ;Si son iguales salta a IGUAL
  59. NOTEQ:      JC      MENOR           ;Si Carry=1 Salta a MENOR
  60.             SJMP    MAYOR           ;Si Carry=0 Salta a MAYOR
  61. IGUAL:      CALL    COMPLETO        ;Si IGUAL, llama a subrutina COMPLETO
  62.             SJMP    LOOP            ;Repite el ciclo con LOOP
  63. MAYOR:      CALL    COMPLETO        ;Si MAYOR, llama a subrutina COMPLETO
  64.             SJMP    LOOP            ;Repite el ciclo con LOOP
  65. MENOR:      CALL    LIBRE           ;Si MENOR, llama a subrutina LIBRE
  66.             SJMP    LOOP            ;Repite el ciclo con LOOP
  67. ;
  68. COMPLETO:   CLR     P1.0            ;Semáforo Luz Verde FALSE
  69.             SETB    P1.1            ;Semáforo Luz Roja TRUE
  70.             CALL    DELAY           ;Llama a delay de barrera
  71.             CLR     P1.2            ;Barrera FALSE (Baja)
  72.             RET                     ;Retorno de Subrutina
  73. ;
  74. LIBRE:      SETB    P1.0            ;Semáforo Luz Verde TRUE
  75.             CLR     P1.1            ;Semáforo Luz Roja FALSE
  76.             CALL    DELAY           ;Llama a delay de barrera
  77.             SETB    P1.2            ;Barrera TRUE (Alta)
  78.             RET                     ;Retorno de Subrutina
  79. ;
  80. DELAY:      MOV     R0,#0AH         ;Cargamos cantidad de iteraciones para el Delay
  81. CICLO:      MOV     TL1,#000H       ;Configuramos TL1 con 00h
  82.             MOV     TH1,#008H       ;Configuramos TH1 con 00h
  83.             SETB    TR1             ;Start Timer
  84. ESPERA:     JNB     TF1,ESPERA      ;Espera al flag TF1=1 (espera que se desborde)
  85.             CLR     TR1             ;Stop Timer
  86.             CLR     TF1             ;Borra flag TF1  
  87.             DJNZ    R0,CICLO        ;Decremento R0, hasta que es 0 y retorna
  88.             RET                     ;Retorno de subrutina
  89. ;
  90. EXT_INT0:   MOV     A,CONT_A        ;Intercambio de variables
  91.             INC     A               ;Incrementa A
  92.             MOV     CONT_A,A        ;Carga CONT_A con valor incrementado
  93.             RETI                    ;Retorno de interrupción
  94. ;        
  95. EXT_INT1:   MOV     A,CONT_A        ;Intercambio de variables
  96.             DEC     A               ;Incrementa A
  97.             JC      CERO            ;Validación de que CONT_A no sea menor que cero
  98.             MOV     CONT_A,A        ;Carga CONT_A con valor incrementado  
  99.             RETI                    ;Retorno de interrupción
  100. CERO:       MOV     CONT_A,#00H     ;Mueve cero a CONT_A
  101.             RETI                    ;Retorno de interrupción
  102. ;
  103.             END                     ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement