Advertisement
Electgpl

8051 - Resumen de funciones

Aug 1st, 2017
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Configuración de vectores de interrupción
  2.             ORG     0000H           ;Dirección del origen del programa
  3.             JMP     SETUP           ;Salta al Inicio del programa
  4. ;
  5.             ORG     0003H           ;Dirección de interrupción externa INT0
  6.             JMP     EXT_INT0        ;Salta a subrutina de interrupción
  7. ;            
  8.             ORG     0013H           ;Dirección de interrupción externa INT1
  9.             JMP     EXT_INT1        ;Salta a subrutina de interrupción  
  10. ;  
  11.             ORG     0023H           ;Dirección de interrupción
  12.             JMP     UARTINT         ;Salta a la interrupción
  13.  
  14. ;Definición de variables de programa
  15. FLAG        EQU     50H             ;Reserva de dirección para el FLAG.
  16.  
  17. ;Configuración de interrupción externa por flanco    
  18. SETUP:      MOV     TMOD,#01H       ;Configuramos TMOD con 1 (TMR0 - Modo 0) 16bits
  19.             MOV     TCON,#01H       ;Configura IT0 externa por flanco
  20.             MOV     IE,#01H         ;Configura EX0 Interrupción Externa 0
  21.             MOV     IP,#00H         ;Des-habilita prioridad de interrupt
  22.             SETB    EA              ;Habilita interrupción global
  23.            
  24. ;Método de espera bloqueante de Flag
  25. ESPERA1:    JNB     FLAG,ESPERA1    ;Espera a que el FLAG sea 1
  26.  
  27. ;NOTA: TiempoOscilador: fXLS/Div = 12MHz/12=1us
  28. ;Valor del delay Tiempo[us]/TiempoOscilador[us]=10ms/1us=10000
  29. ;Calculando TLO y THO: 65536-10000=55536 -> D8F0
  30. TICKTMR:    MOV     TL0,#0F0H       ;Configuramos TL0 con F0h
  31.             MOV     TH0,#0D8H       ;Configuramos TH0 con D8h  
  32.             SETB    TR0             ;Start Timer
  33. ESPERA:     JNB     TF0,ESPERA      ;Espera al flag TF0=1 (espera que se desborde)
  34.             CLR     TR0             ;Stop Timer
  35.             CLR     TF0             ;Borra flag TF0                  
  36.             RET                     ;Retorno de Subrutina
  37.            
  38. ;Interrupción externa 0
  39. EXT_INT0:   SETB    FLAG            ;Pone FLAG a TRUE al entrar en la interrupción  
  40.             CPL     P2.2            ;Toggle en la salida P2.2
  41.             RETI                    ;Retorno de interrupción  
  42.            
  43. ;Recorrido de una tabla
  44.             MOVC    A,@A+DPTR       ;Trae el valor cargado en acum desde la tabla
  45.             MOV     P1,A            ;Muestra el valor del acum en el puerto
  46.            
  47. ;Función de división y resto  
  48. DEC2BCD:    MOV     A,P2            ;Carga acum con el valor del ADC del puerto P2
  49.             MOV     B,#10D          ;Carga B con 10
  50.             DIV     AB              ;Divide A/B=A, Resto en B
  51.             MOV     R0,B            ;Mueve Resto B a R0
  52.            
  53. ;Delay bloqueante básico
  54. DELAY:      MOV     R7,#255         ;Carga R7 con 255
  55.             DJNZ    R7,$            ;Decremento R7
  56.             RET                     ;Retorna subrutina
  57.            
  58. ;Definición de tabla por bytes
  59. TABLE:      DB      00111111B       ;Numero 0 en Display de 7 segmentos  
  60.             DB      00000110B       ;Numero 1 en Display de 7 segmentos
  61.            
  62. ;Definición de tabla por string
  63. TABLA:      DB      "UTN INSPT ",0  ;Tabla de 10 datos a enviar por UART           
  64.  
  65. ;Función para buscar el valor mayor (guarda dato y direccion)          
  66. BUSCMAX:    MOV     A,@R0           ;Cargamos el Acumulador con el valor apuntado por R0
  67.             SUBB    A,VALMAX        ;Calculamos A - VALMAX
  68.             JC      CARRY0          ;Si JC=1 (es menor), salta a Carry
  69.             MOV     VALMAX,@R0      ;Si JC=0 (es mayor), lo guarda en VALMAX
  70.             MOV     DIRMAX,R0       ;Al mismo tiempo guarda la dirección en DIRMAX
  71. CARRY0:     INC     R0              ;Incrementa valor del puntero en la tabla
  72.             DJNZ    CONT,BUSCMAX    ;Realiza las iteraciones preestablecidas
  73.             RET                     ;Retorno de la subrutina  
  74.  
  75. ;Función para buscar el valor menor (guarda dato y direccion)  
  76. BUSCMIN:    MOV     A,@R0           ;Cargamos el Acumulador con el valor apuntado por R0
  77.             SUBB    A,VALMIN        ;Calculamos A - VALMIN
  78.             JNC     CARRY1          ;Si JC=0 (es mayor), salta a Carry
  79.             MOV     VALMIN,@R0      ;Si JC=1 (es menor), lo guarda en VALMIN
  80.             MOV     DIRMIN,R0       ;Al mismo tiempo guarda la dirección en DIRMIN
  81. CARRY1:     INC     R0              ;Incrementa valor del puntero en la tabla
  82.             DJNZ    CONT,BUSCMIN    ;Realiza las iteraciones preestablecidas
  83.             RET                     ;Retorno de la subrutina
  84.  
  85. ;Función para comparar un valor
  86. COMPARA:    MOV     A,P0            ;Cargamos el valor del puerto P0 en el Acumulador
  87.             CJNE    A,CONST,NOTEQ   ;Si A != CONST, si es distinto salta a NOTEQ
  88.             SJMP    IGUAL           ;Si A = CONST, si es igual salta a IGUAL
  89. NOTEQ:      JC      MENOR           ;Si Carry = 1, salta a MENOR
  90.             SJMP    MAYOR           ;Si Carry = 0, salta a MAYOR
  91. IGUAL:      SETB    P1.1            ;Enciende led igual
  92.             CLR     P1.0            ;Apaga led mayor
  93.             CLR     P1.2            ;Apaga led menor
  94.             RET                     ;Retorno de subrutina
  95. MAYOR:      SETB    P1.0            ;Enciende led mayor
  96.             CLR     P1.2            ;Apaga led menor
  97.             CLR     P1.1            ;Apaga led igual
  98.             RET                     ;Retorno de subrutina
  99. MENOR:      SETB    P1.2            ;Enciende led menor  
  100.             CLR     P1.0            ;Apaga led igual
  101.             CLR     P1.1            ;Apaga led mayor
  102.             RET                     ;Retorno de subrutina
  103.  
  104. ;Configuración para el uso de UART en 9600bps
  105. SETUP:      MOV     SCON, #50h      ;UART en MODO 1 (8BIT), REN=1
  106.             ORL     TMOD, #20h      ;TIMER 1 en MODO 2
  107.             MOV     TH1, #0FDh      ;9600bps @ 11.059MHz
  108.             MOV     TL1, #0FDh      ;9600bps @ 11.059MHz
  109.             SETB    ES              ;Habilitación de Interrupción Serial
  110.             SETB    EA              ;Habilitación de Interrupciones Globales  
  111.  
  112. ;Interrupción por dato presente en UART
  113. UARTINT:    JNB     RI,UARTINT      ;Espera el dato Serie
  114.             MOV     A,SBUF          ;Mueve el dato del buffer al acumulador    
  115.             CLR     RI              ;Borra el flag de recepción
  116.             MOV     P0,A            ;Mueve valor recibido a puerto 0
  117.             RETI                    ;Retorno de Interrupción
  118.  
  119. ;Envió de datos por UART      
  120. SEND:       MOV     SBUF,A          ;Cargo el dato en Buffer de salida Serie
  121. EOB:        JNB     TI,EOB          ;Envía hasta el ultimo bit    
  122.             CLR     TI              ;Borra el flag de transmisión
  123.             RET                     ;Retorno de subrutina                      
  124.            
  125. ;Fin de un programa
  126.             END                     ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement