Electgpl

HC08 - Monitor Cardíaco

Dec 30th, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;-------------------------------------------------------------------------
  2. ;- MONITOR CARDIACO PARA VISUALIZAR EL RITMO EN PPM                      -
  3. ;-------------------------------------------------------------------------
  4. $Include 'jl3regs.inc'       ;Libreria para el MC68HC908JL3
  5. ;-------------------------------------------------------------------------
  6. ;- DEFINICION DE CONSTANTES Y VARIABLES                                  -
  7. ;-------------------------------------------------------------------------
  8. RamSt   equ    $0080         ;Direccion de origen de memoria RAM
  9. RomSt   equ    $EC00         ;Direccion de origen de memoria ROM
  10. ResetV  equ    $FFFE         ;Vector de Reset
  11. ;
  12.         org    RamSt         ;Se apunta al origen de memoria RAM
  13. ;
  14. varUni  rmb    1             ;Variable para separacion de Unidades
  15. varDec  rmb    1             ;Variable para separacion de Decenas
  16. varCen  rmb    1             ;Variable para separacion de Centenas
  17. varDel  rmb    1             ;Variable para Loop del Delay
  18. varCont rmb    1             ;Variable para el contador de pulsos
  19. varMue  rmb    1             ;Variable para el muestreo
  20. ;
  21.         org    RomSt         ;Se apunta al origen de memoria ROM
  22. ;-------------------------------------------------------------------------
  23. ;- CONFIGURACION                                                         -
  24. ;-------------------------------------------------------------------------
  25. MAIN    mov    #$11,CONFIG1  ;Deshabilita el COP y LVI
  26.         mov    #$FF,DDRA     ;Configura puerto A como salidas
  27.         clr    PORTA         ;Inicializa el puerto A
  28.         mov    #$FF,DDRB     ;Configura puerto B como salidas
  29.         clr    PORTB         ;Inicializa el puerto B
  30. ;-------------------------------------------------------------------------
  31. ;- CONFIGURACION DEL TIMER Y CAPTURA 1MHz/64=15625Hz -> 65535/15625=4.19s-
  32. ;-------------------------------------------------------------------------
  33. CONFIG  bset   5,TSC         ;Timer (STOP)
  34.         mov    #$04,TSC0     ;Captura por flanco de subida ELS0A
  35.         clra                 ;inicializo A
  36.         mov    #$00,varCont  ;Inicializa varCont
  37.         mov    #$03,varMue   ;Inicializa varMue
  38.         jsr    DEC2BCD       ;Rutina de conversion de Decimal a BCD
  39. ;-------------------------------------------------------------------------
  40. ;- INICIO                                                                -
  41. ;-------------------------------------------------------------------------
  42. INICIO  bset   4,TSC         ;reset de contador TCNT y prescaler
  43.         mov    #$26,TSC      ;Inicializa timer (STOP), prescaler:64
  44.         bclr   5,TSC         ;Timer (START)
  45.         clra                 ;Inicializa A
  46. PULSO   brclr  7,TSC0,SIGUE  ;Espera flanco de subida TOF
  47.         bclr   7,TSC0        ;Baja flag
  48.         inc    varCont       ;Sumo varCont=varCont+1
  49. SIGUE   jsr    MUXDISP       ;Rutina de Multiplexado de displays
  50.         brclr  7,TSC,PULSO   ;Espera a overflow
  51.         bclr   7,TSC         ;Baja flag
  52.         dec    varMue        ;Decrementa varMue
  53.         beq    UPDATE        ;Si varMue=0 salta a UPDATE
  54.         bra    INICIO        ;Si no es igual a 0 salta a INICIO
  55. UPDATE  mov    #$03,varMue   ;Asigna valor 3 a varMue
  56.         ldx    #$05          ;Cargo 5 en X
  57.         lda    varCont       ;Cargo varCont en A
  58.         mul                  ;A*X=A
  59.         jsr    DEC2BCD       ;Rutina de conversion de Decimal a BCD
  60.         mov    #$00,varCont  ;Inicializa varCont
  61.         jmp    INICIO        ;Salta a INICIO
  62. ;-------------------------------------------------------------------------
  63. ;- CONVERSION DE DECIMAL A BCD SEPARADO POR DIGITOS                      -
  64. ;-------------------------------------------------------------------------
  65. DECTBCD ldhx   #$0A          ;Carga X con 10
  66.         div                  ;Divide A/X=A, Resto en H
  67.         sthx   varUni        ;Mueve H a varUni
  68.         clrh                 ;Borra H
  69.         ldhx   #$0A          ;Carga X con 10
  70.         div                  ;Divide A/X=A
  71.         sthx   varDec        ;Mueve H a varDec
  72.         sta    varCen        ;Mueve A a varCen
  73.         rts                  ;Retorno de subrutina
  74. ;-------------------------------------------------------------------------
  75. ;- MULTIPLEXADO DE DISPLAYS                                              -
  76. ;-------------------------------------------------------------------------
  77. MUXDISP clrh                 ;Inicializa H  
  78.         ldx    varCen        ;Carga el valor de Centenas en X
  79.         lda    TABLA,X       ;Busca en la tabla el equivalente
  80.         mov    #$01,PORTA    ;xxxxx001, Disp1=1,Disp2=0,Disp3=0
  81.         sta    PORTB         ;Carga el PORTB con el valor de la tabla
  82.         jsr    DELA100       ;Llama a rutina de Delay 100us
  83.         ldx    varDec        ;Carga el valor de Decenas en X
  84.         lda    TABLA,X       ;Busca en la tabla el equivalente
  85.         mov    #$02,PORTA    ;xxxxx010, Disp1=0,Disp2=1,Disp3=0
  86.         sta    PORTB         ;Carga el PORTB con el valor de la tabla
  87.         jsr    DELA100       ;Llama a rutina de Delay 100us
  88.         ldx    varUni        ;Carga el valor de Unidades en X
  89.         lda    TABLA,X       ;Busca en la tabla el equivalente
  90.         mov    #$04,PORTA    ;xxxxx100, Disp1=0,Disp2=0,Disp3=1
  91.         sta    PORTB         ;Carga el PORTB con el valor de la tabla
  92.         jsr    DELA100       ;Llama a rutina de Delay 100us
  93.         rts                  ;Retorno de subrutina
  94. ;-------------------------------------------------------------------------
  95. ;- RUTINA DE DELAY DE 100us                                              -
  96. ;- (9+(10*9))+5=104us                                                    -
  97. ;-------------------------------------------------------------------------
  98. DELA100 mov    #$09,varDel  ;[5]Se carga el valor 9 a varDel
  99. LOOP    dec    varDel       ;[4]Se decrementa varDel
  100.         beq    FIN05        ;[3]Si varDel=0 salta a FIN05
  101.         bra    LOOP         ;[3]Salta a LOOP
  102. FIN05   rts                 ;[4]Retorno de subrutina
  103. ;-------------------------------------------------------------------------
  104. ;- TABLA DE VALORES PARA EL DISPLAY DE 7 SEGMENTOS                       -
  105. ;- Bits del display XGFEDCBA                                             -
  106. ;-------------------------------------------------------------------------
  107. TABLA   db    %00111111     ;Numero 0
  108.         db    %00000110     ;Numero 1
  109.         db    %01011011     ;Numero 2
  110.         db    %01001111     ;Numero 3
  111.         db    %01100110     ;Numero 4
  112.         db    %01101101     ;Numero 5
  113.         db    %01111100     ;Numero 6
  114.         db    %00000111     ;Numero 7
  115.         db    %01111111     ;Numero 8
  116.         db    %01100111     ;Numero 9
  117. ;-------------------------------------------------------------------------
  118. ;- FINAL                                                                 -
  119. ;-------------------------------------------------------------------------
  120.         org   ResetV        ;Se apunta al Vector de Reset
  121.         dw    MAIN          ;Salta a MAIN
  122.         end                 ;Fin del programa
Advertisement
Add Comment
Please, Sign In to add comment