Paso 5: Código con comentarios para analizador del pulso (algunas notas en la sección siguiente).
; Seleccione el procesador de p24FJ32GA002
.equ __p24FJ32GA002, 1
; incluyen las definiciones de procesador
.include "p24FJ32GA002.inc"
;..............................................................................
; Configuration bits ;..............................................................................
configuración __CONFIG1 0x3f7f
configuración __CONFIG2 0x79cf
; Comparación de registros en nombres que son fáciles de usar.
.equ ad1con1, 0x320; registro de control ad básica
.equ ad1con3, 0x324; control del anuncio registrar para ajuste de velocidad de reloj de conversión
.equ ad1buf0, 0 x 300; resultados ad terminan aquí
.equ ad1chs0, 0x0328; canal ad seleccione registrar
.equ ad1pcfg, 0x32c; Este registro isused para configurar entradas analógica o digital
.global __reset; La etiqueta de la primera línea de código. ;
..............................................................................
; Sección de código en la memoria de programa; (ESTO ES DONDE EL PROGRAMA SE ACTIVARÁ DESPUÉS DE REINICIAR);...;
.Text; Inicio de la sección del código
__reset:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; pin conexión;;
Salida: RB4 pin11; Entrada: Pin2 RA0
; UART: rx: pin6; TX: pin7
; AN9: pin26 S/H salidas a este pin (este pin es una entrada para microcontrolador)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Connectin con UART2: traducir el código de serialcomm.pb para logochip
; escribe $02c $f0a4 8
MOV #0XF0A4, W0
MOV W0, TRISB
; escribe $6c 2 $0500
MOV #0X0500, W0
MOV W0, RPOR1
; escribe $6a6 $1f02
MOV #0X1F02, W0
MOV W0, RPINR19
; escribe $238 51; velocidad de ajuste
MOV #51, W0
MOV W0, U2BRG
; escribe $230 $8800
MOV #0X8800, W0
MOV W0, U2MODE
; escribe $232 $400
MOV # 0, W0 X 400
MOV W0, U2STA
; inicializar registros
MOV #0x8200, W0
MOV W0, ad1con1; convierte a/d, salida va ser justificada a la izquierda
MOV #6, W0
MOV W0, ad1con3; aproximadamente 4 ciclos por tad
MOV #0x1ff, W0
MOV W0, ad1pcfg; 4 puertos de entrada de la LC en analógico, descansar a digital
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCLR TRISB, #4; situado a la salida
BSET TRISA, #0; tomar la señal del generador de funciones
BSET ad1pcfg, #0; configurar el pin que entrada digital
; LOOP1 y 2 controles es un bucle de borde de levantamiento:
BSET LATB, #4; DA UNA SEÑAL DE SALIDA: MUESTRA
LOOP1: BTSS PORTA, #0; SALTAR SI EL NIVEL ES ALTO
BRA LOOP1
NOP; ESPERAR UN CORTO PERÍODO DE TIEMPO
NOP
BCLR LATB, #4; ESTABLECE BAJO EN START S/H: HOLD
; hacer un una conversión A/D en AN9(pin 26)
MOV #9, W0
MOV W0, ad1chs0; Seleccione AN9 para la conversión de un/d
BSET ad1con1, #1; iniciar toma de muestras y empezar a convertir
MOV #7, W0; esperar 7 ciclos para la muestra interna y mantener el condensador en cargarse
cycledelay: dec W0, W0; decremento W0
nz Bra, cycledelay; ahora esperar para que la conversión hasta el final
BClr ad1con1, #1; Inicio holding
hecho: ad1con1 btss, #0;
sujetador de hecho; esperar para que la conversión a realizar
; resultados justificados izquierda figuran en ad1buf0
MOV ad1buf0, W0
LSR W0, #8, W0; Mueva la copia del ad1buf0, desplazado 8 bits a la derecha, a W0
MOV W0, U2TXREG; escribir los 8 bits altos en tx; Espere la transmisión hasta el final
txdone: btss U2STA, #8;
sujetador txdone
MOV #0x0c0, W0; máscara para seleccionar los bits 6 y 7
y # 0 x 300, W0; y pone copia de bits 6 y 7 en W0, todos los otros bits son cero
MOV W0, U2TXREG; escribir estos bits a tx, recuerda a procesar correctamente en MATLAB
LOOP2: BTSC PORTA, #0
LOOP2 SUJETADOR; SALTAR SI EL NIVEL ES BAJO
LAZO DEL SUJETADOR