Electgpl

8051 - CARGA TABLA, ENVIA POR UART EN 30H

Jun 14th, 2017
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;-------------------------------------------------------------------------------------
  2. ;Programa que envía una cadena de caracteres por UART cada 1s. con 8051 @ 8952.
  3. ;El dato es envidado por la UART cada 1s bloqueante.
  4. ;Se requiere de un cristal de 11.059MHz para el baudrate de 9600bps.
  5. ;Utilización de UART en Modo 1 y Timer 1 en Modo 2.                      
  6. ;Archivo: EnviaUART30h.s03
  7. ;Fecha de realización: 13/06/2017
  8. ;Autor: Sebastian Caccavallo - electgpl.blogspot.com.ar
  9. ;Modificación:
  10. ;-------------------------------------------------------------------------------------
  11.             ORG     0000H           ;Dirección del Reset      
  12.             JMP     SETUP           ;Salta al Inicio del programa
  13. ;            
  14. SETUP:      MOV     SCON, #50h      ;UART en MODO 1 (8BIT), REN=1
  15.             ORL     TMOD, #20h      ;TIMER 1 en MODO 2
  16.             MOV     TH1, #0FDh      ;9600bps @ 11.059MHz
  17.             MOV     TL1, #0FDh      ;9600bps @ 11.059MHz
  18.             SETB    TR1             ;Activa TIMER 1  
  19. ;                        
  20. LOOP:       ACALL   LOAD            ;Carga de datos
  21.             ACALL   SEND            ;Rutina de envió UART
  22.             SJMP    LOOP            ;Loop principal    
  23. ;
  24. LOAD:       MOV     R0,#0AH         ;Cargo 10 en R0
  25.             MOV     DPTR,#30H       ;Cargo 30h en DPTR (Origen de la tabla)  
  26.             MOV     R1,#41H         ;Cargo el numero 41h en R1
  27. SIGUE1:     MOV     A,R1            ;Cargo en el acumulador el valor de R1
  28.             MOVX    @DPTR,A         ;Cargo el valor apuntado en el acumulador
  29.             INC     DPTR            ;Incrementamos DPRT
  30.             INC     R1              ;Incremento R1            
  31.             DJNZ    R0,SIGUE1       ;Itera hasta que se complete 10 veces          
  32.             RET                     ;Retorno de Interrupción
  33. ;      
  34. SEND:       MOV     R0,#0AH         ;Cargo 10 en R0
  35.             MOV     DPTR,#30H       ;Cargo 30h en DPTR (Origen de la tabla)
  36. SIGUE2:     MOVX    A,@DPTR         ;Cargo el valor apuntado en el acumulador
  37.             MOV     SBUF,A          ;Envio el valor del acumulador por UART
  38. EOB:        JNB     TI,EOB          ;Envía hasta el ultimo bit    
  39.             CLR     TI              ;Borra el flag de transmisión
  40.             INC     DPTR            ;Incrementamos DPRT              
  41.             ACALL   DELAY           ;Rutina de Delay de 1s  
  42.             CPL     P1.0            ;Toggle LED en P1.0  
  43.             DJNZ    R0,SIGUE2       ;Itera hasta que se complete 10 veces          
  44.             RET                     ;Retorno de Interrupción
  45. ;      
  46. DELAY:      MOV     R7,#6D          ;[2]Cargamos R7 con 6
  47. WAIT1:      MOV     R6,#185D        ;[2]Cargamos R6 con 185  
  48. WAIT2:      MOV     R5,#200D        ;[2]Cargamos R5 con 200
  49. WAIT3:      DJNZ    R5,WAIT3        ;[2]Decrementamos R5 y Salta a WAIT3
  50.             DJNZ    R6,WAIT2        ;[2]Decrementamos R6 y Salta a WAIT2        
  51.             DJNZ    R7,WAIT1        ;[2]Decrementamos R7 y Salta a WAIT1
  52.             RET                     ;[2]Retorno de Subrutina  
  53. ;
  54.             END                     ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment