• 検索結果がありません。

A7ECG圧縮Z80program.doc

N/A
N/A
Protected

Academic year: 2021

シェア "A7ECG圧縮Z80program.doc"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

A.7 心電図データ圧縮装置用プログラム

A.7.1 概要

このプログラムは 4.5 節の実験で用いたハードウェアを動作させるためのプロ

グラムである.ハードウェアは Z80CPU を中心として構築されており,したがっ

てプログラムは Z80 のアセンブリ言語で記述されている.また,プログラムのア

センブルにはシステムロード社の XA-80 を使用し,動作確認およびデバッグには

同社の ROMエミュレータ型 ICE(In-Circuit Emulator)である Z-Vision Proを用いた.

プログラム全体の動作はまず,ペリフェラルおよびサンプルデータを保存する

メモリ領域の初期化後,スイッチの検出状態に入り,スイッチが押されるまで待

機する.青のスイッチが押されると計測が開始され,A/D コンバータからの割込

を有効にされて計測および処理の状態に入る. A/D コンバータは CPU の動作と

は別に,4ms ごとに心電図データを変換し,変換終了ごとに CPU に割込を要求す

る.1 回の割込つまり 1 サンプルごとに基線変動の除去,心電図波形の検出およ

び診断処理が行われ,結果がメモリ領域に保存される.200s 間のデータが保存さ

れると心電図の処理は終了し, RS-232C を通じて PC にデータが転送され,一連

の処理を終了した後,プログラムの先頭に戻って計測開始の待機状態となる.

A.7.2 メインプログラム

プログラムのリストを list.A.7.1 に示す.メインプログラムにはメモリ領域やペ

リフェラルの初期設定,押しボタンの検出と状態の表示,そして A/D コンバータ

からの割込処理ルーチンが含まれている.プログラムの主要な部分はサブルーチ

ン化され,これらを呼び出して処理を行うようになっている.List.A.7.2 以降のソ

ースはすべて,list.A.7.1 に示したメインプログラム中に include されている.

List.A.7.1 bank10.asm

;+++++++++++++++++++++++ ; ECG 波 形 の分 類 ・ 診 断 ;+++++++++++++++++++++++

INCLUDE "DEFIO.ASM" ; I/O ポ ー ト の ア ド レ ス( 定 数) INCLUDE "DEFPARA.ASM" ; 各 種 定 数 INCLUDE "DEFADDR.ASM" ; ア ド レ ス 定 義 INCLUDE "HEADER.ASM" ; メ モ リ 領 域 の 先 頭の 初 期 化 ORG PGMTOP INCLUDE "INITPIO.ASM" ; P I O の初 期 化 INCLUDE "INITCTC.ASM" ; CTC の 初 期 化 INCLUDE "INITSIO.ASM" ; SIO の初 期 化 LOOPALL:

CALL INITMEM ; メ モ リ 領 域 の 初期化 LD A,5EH ; LED 表 示(SE 11) OUT (PPI1B),A LD A,11H OUT (PPI1A),A ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; 測 定 開 始 ・ 終 了 のための プ ッ シ ュ ボ タ ン 検 出 ; 測 定 開 始 :青 ボ タ ン 終 了 : 赤 ボタン ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LOOP0: IN A,(PIOBDAT) AND 30H ; ボ タ ン 操 作 の 検 出 XOR 30H JP Z,LOOP0 AND 20H ; 赤 の ボ タ ン を 検 出し 終 了 JP NZ,PGMEND

LD A,22H ; LED 表 示(SE 22) OUT (PPI1A),A ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; CTC CH1 を 割 り 込 み 可 に 変 更 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD HL,CTCTBLX LD B,CTCXEND- CTCTBLX LD C,CTCCH1 O T I R ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; 計 測 開 始 ま で の カ ウ ン ト ダ ウ ン ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD A,WAITING+1 EI

LOOP1: OUT (PPI1B),A ; 残 り 時 間 を LED 出 力(?? 22) AND 0FFH

JP NZ,LOOP1

OUT (PPI1B),A ; 残 り 時 間 を LED 出 力(?? 22) ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; CTC CH1 を 割 り 込 み 不 可 に 変 更 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD HL,CTCTBL1 LD B,CTC1END -CTCTBL1 LD C,CTCCH 1 O T I R ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; A/D コ ン バ ー タ からの 割 り 込 み を 有 効 に 変 更 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD HL,PIOXTBL LD B,PIOXEND - PIOXTBL LD C,PIOBCMD O T I R EI LD A,33H ; LED 表 示(00 33) OUT (PPI1A),A ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=

(2)

; メ モ リ バ ン ク 数( 表 の C レ ジ ス タ) の 初期化 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD C,00H LD A,C OUT (PPI1C),A ; メ モ リ バ ン ク の 初期化 LD B,BANKNUM ; バ ン ク 数( 表 の B レ ジ ス タ) の 初 期 化 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; 心 電 図 計 測 ・ 診断開始 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LOOP2: LD A,C OUT (PPI1B),A ; 現 在 の バ ン ク 番 号 を L E D 表 示(?? 33) CP B ; 現 在 の バ ン ク 番 号 の check JP NZ,LOOP2 ; 終 了 条 件(B=C) DI ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; A/D コ ン バ ー タ からの 割 り 込 み を 不 可 に 変 更 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD HL,PIOBTBL LD B,PIOBEND - PIOBTBL LD C,PIOBCMD O T I R

LD A,5EH ; LED 表 示(SE 44) OUT (PPI1B),A LD A,44H OUT (PPI1A),A ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; ボ タ ン が 押 され る まで RS- 232C へ の データ 送 信 を 保 留 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LOOP3: IN A,(PIOBDAT) AND 10H ; 青 ボ タ ン 操 作 の 検出 JP NZ,LOOP3 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; RS-232C か ら 結 果 を 伝 送 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD A,5EH ; LED 表 示(?? 5E) OUT (PPI1A),A LD HL,ARRYECG CALL SEND2PC LD A,5DH ; LED 表 示( ? ? 5 D ) OUT (PPI1A),A LD HL,ARRYWAV CALL SEND2PC ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; 先 頭 に j u m p し てボ タ ン 入 力 を 待 つ ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= JP LOOPALL PGMEND: ; 終 了 処 理 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= ; メ モ リ バ ン ク の 初期化 ;-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-= LD A,00H OUT (PPI1C),A

LD A,0EEH ; LED 表 示(EE EE) OUT (PPI1A),A OUT (PPI1B),A JR $ ;+++++++++++++++++++++++ ; A/D コ ン バ ー タ による 割 り 込 み ル ー チ ン ;+++++++++++++++++++++++ PIOBINT: EXX ; 割 込 み ル ー チ ン では 裏 reg.を 使用 EX AF,AF' LD IX,XORGDET ; ECG 波 形 の読 込 み と 保 存 CALL SAVEORG LD IX,XECGDIF ; 元 ECG 波 形 に 対 する 二 次 差 分 値 計 算 CALL DIFF2ND LD IX,XDIFAV1 ; 二 次 差 分 の 平 均値計 算 CALL AVERAGE LD IX,XQRSREJ ; QRS 波 除 去 CALL QRSREJ LD IX,XECGAVE ; ト レ ン ド の 計 算 CALL AVERAGE LD IX,XORGDET ; ト レ ン ド 除 去 と 結果 の 保 存 CALL SAVEDET LD IX,XDETDIF ; 二 次 差 分 値 の 計 算と 保 存 CALL DIFF2ND LD IX,XDIFAV2 ; 二 次 差 分 値 の 平 均値計 算 CALL AVERAGE LD IX,XWAVDET ; 波 形 検 出 CALL WAVEDET CALL WAVEDIAG ; 波 形 診 断 LD IX,XWAVDIA ; 波 形 検 出 ・ 診 断 結 果 保 存 CALL SAVEWAV LD IX,PTRAREA ; 波 形 保 存 位 置 指 示 pointer の 更 新 CALL INCPTR EXX ; 表 レ ジ ス タ の 復 帰 EX AF,AF' EI RETI ;+++++++++++++++++++++++ ; タ イ マ(CH1) による 割 り 込 み ル ー チ ン ;+++++++++++++++++++++++ CTC1INT: DEC A ; 時 間 カ ウ ン タ の デ ク リ メ ン ト EI RETI CTC0INT: CTC2INT: CTC3INT: PIOAINT: SIOATE: SIOARE: SIOARS: SIOAST: SIOBTE: SIOBRE: SIOBRS: SIOBST: RETI ;+++++++++++++++++++++++ ; サ ブ ル ー チ ン ・ データの 取 込 み ;+++++++++++++++++++++++ INCLUDE "SAVEORG.ASM" ; 心 電 図 デ ー タ の 保存 INCLUDE "QRSREJ3.ASM" ; QRS 波 除 去 INCLUDE "SAVEDET.ASM" ; ト レ ン ド の 除 去 と保 存 INCLUDE "DIFF2ND.ASM" ; 二 次 差 分 の 計 算 と保 存 INCLUDE "WAVEDET2.ASM" ; ECG 波形検出 INCLUDE "WAVDIAG2.ASM" ; ECG 波形診断 INCLUDE "SAVEWAV.ASM" ; ECG 波 形 認 識 結 果 の 保 存 INCLUDE "INCPTR2.ASM" ; 各 pointer の 位 置 の 更 新 INCLUDE "INITMEM.ASM" ; デ ー タ 保 存 領 域 の初 期 化 INCLUDE "SND2PC3.ASM" ; RS232C に よ る P C へ の 転 送 INCLUDE "AVERAGE.ASM" ; 平 均 値 の 計 算 と データの 保 存 INCLUDE "INITTBL.ASM" ; I/O の 初 期 化 デ ー タ INCLUDE "INIMEMTB.ASM" ; RAM 領 域 へ の 初期化 デ ー タ END

A.7.3 定数の定義

List.A.7.2 から listA.7.4 に示したソースは各種定数 の定義である.List.A.7.2 に

示した defio.asm では I/O アドレスの定義を,list.A.7.3 に示した defpara.asm では

処理に使用する各種パラメータの定義を行い,list.A.7.4 に示した defaddr.asm では

データが保存される領域のアドレス定義を行っている.

List.A.7.2 defio.asm

;+++++++++++++++++++++++ ; 定 数 の 初 期 化(I/O ア ド レ ス) ( 共 通) ;+++++++++++++++++++++++ ; PERIPHERAL ADDRESSES CTCCH0 EQU 10H CTCCH1 EQU 11H CTCCH2 EQU 12H

CTCCH3 EQU 13H ; CLOCK GENERATOR FOR SIO SIOADAT EQU 18H

SIOACMD EQU 19H SIOBDAT EQU 1AH SIOBCMD EQU 1BH PIOADAT EQU 1CH

PIOACMD EQU 1DH

PIOBDAT EQU 1EH ; Interrupt Input from SW and A / D PIOBCMD EQU 1FH

PPI0A EQU 30H ; I nput data from A/D Converter (LSB) PPI0B EQU 31H ; I nput data from A/D Converter(MSB) PPI0C EQU 32H

PPI0CMD EQU 33H

PPI1A EQU 34H ; 7 SEGMENT LED OUTPUT (LSB) PPI1B EQU 35H ; 7 SEGMENT LED OUTPUT (MSB) PPI1C EQU 36H ; FOR MEMORY BANK SWITCHING PPI1CMD EQU 37H

WDTMODE EQU 0F0H WDTCMD EQU 0F1H DCHAIN EQU 0F4H

(3)

List.A.7.3 defpara.asm

;+++++++++++++++++++++++ ; 定 数 の 初 期 化 ( パ ラ メ ー タ) ;+++++++++++++++++++++++ ; PARAMETERS

SAVLEN1 EQU 16384 ; 保 存 さ れ る ECG 元波形 の data 長[byte] SAVLEN2 EQU 2048 ; 保 存 さ れ る 元波形 以外 の data 長[byte] BANKNUM EQU 3 ; メ モ リ バ ン ク 数

AVENUM1 EQU 8 ; 平 均 す る デ ー タ の長 さ の べ き AVENUM2 EQU 256 ; 平 均 す る デ ー タ の長 さ [word] AVENUM3 EQU 2 ; 2次差分, 絶 対 値 平 均 用 data 数 の べ き AVENUM4 EQU 4 ; 2 次 差 分, 絶 対 値 平 均 用 data 数[word] DIFDIST EQU 16 ; 2 次 差 分 の 元 data か ら の 距 離[byte] SENDNUM EQU 16384 ; 送 信 す る デ ー タ 数[bytes] OFFSET EQU 45 ; ト レ ン ド 除 去 時 に加 え る o f f s e t 値 ;

; PARAMETERS FOR QRS REJECTION REJQRS EQU -200

REJ2DTH EQU 200 REJDRY EQU 125 ;

; PARAMETERS FOR WAVE DETECTION PTH EQU 30 ; P 波 始 点 検 出 の 閾 値

RTH EQU 300 ; R 検 出 閾 値( 初 期 状 態 からの 検 索 の み) QRSTH EQU -200 ; QRS 検 出 の 閾 値

TTH EQU 40 ; T 波 始 点 検 出 閾 値

INIDRY EQU 125 ; start 時 の 波 形 検 出 開 始 待 ち 時 間(0.5s) PDELAY EQU 25 ; P 波 検 出 開 始 待 ち 時 間(0.1s) TDELAY EQU 20 ; T 波 検 出 開 始 待 ち 時 間(0.08s) ;

; PARAMETERS FOR WAVE DIAGNOSIS ; AMPLITUDE (x0.00244[mV]) PAMPH EQU 205 ;P 波 の 振 幅の 上 限(0.5mV) PAMPL EQU 20 ;P 波 の 振 幅の 下 限(0.05mV) TAMPH EQU 327 ;T 波 の 振 幅 の 上 限(0.8mV) TAMPL EQU 41 ;T 波 の 振 幅 の 下 限(0.1mV) RAMPH EQU 1230 ; R 波 の振 幅 の 上 限(3.0mV) RAMPL EQU 205 ; R 波 の振 幅 の 下 限(0.5mV) ; ; TIME or DULATION (x0.004[s]) QRSTIMN EQU 20 ;QRS 波 の 持続時間 の 正 常 値(0.08s) PTIMEH EQU 50 ;P 波 の 持続時間 の 上 限 25(0.1s) PTIMEL EQU 3 ;P 波 の 持続時間 の 下 限 15(0.06s) PQTIMEH EQU 20 ;PQ 間 隔 の 上 限(0.08s) PQTIMEL EQU 3 ;PQ 間 隔 の 下 限(0.012s) QRSTIMH EQU 40 ;QRS 波 の 持続時間 の 上 限(0.16s) QRSTIML EQU 10 ;QRS 波 の 持続時間 の 下 限(0.04s) QTTIMEH EQU 125 ;QT 間 隔 の 上 限(0.5s) QTTIMEL EQU 37 ;QT 間 隔 の 下 限(0.15s) RRTIMEH EQU 375 ;RR 間 隔 の 上 限 250(1.5s) RRTIMEL EQU 100 ;RR 間 隔 の 下 限 150(0.4s) ;

; ERROR NUMBER IN WAVE DIAGNOSIS ; PERROR1 EQU 00100000B ; P 波 持 続 時 間 異 常 PERROR2 EQU 01000000B ; P 波 振 幅 過 剰 PERROR3 EQU 10000000B ; P 波 振 幅 不 足 QRSERR1 EQU 00100000B ; QRS 持 続 時 間 異 常 QRSERR2 EQU 01000000B ; R- R 間 隔 の 異 常 QRSERR3 EQU 10000000B ; R 波 振 幅 の 異 常 TERROR1 EQU 00100000B ; Q -T 時 間 過 剰 TERROR2 EQU 01000000B ; T 波 振幅過 剰 TERROR3 EQU 10000000B ; T 波 振幅不 足 ; ; デ ー タ 計測開始 ま で の 待 ち 時 間 WAITING EQU 15

List.A.7.4 defaddr.asm

;+++++++++++++++++++++++ ; 定 数 の 初 期 化( メ モ リ ア ド レ ス) ;+++++++++++++++++++++++ ; ; I/O 割 り 込 み ア ド レ ス

SIOINTV EQU 0020H ; Interrupt Vector of SIO (0020H-002FH) PIOAIV EQU 0040H ; Interrupt Vector of PIO PORT A PIOBIV EQU 0042H ; Interrupt Vector of PIO PORT B CTCINTV EQU 0050H ; Interrupt Vector of CTC (0050H -0058H) ;

; プ ロ グ ラ ム 領 域 の先 頭 番 地

PGMTOP EQU 0100H ; TOP OF THE MAIN ROUTINE ;

; デ ー タ 指 示pointer ドレス

PTRAREA EQU 4000H ; 各 種data 保 存 位 置 指 示pointer領域先頭 PTRNUM EQU 4000H ; pointer 数 保 存 用

PTRBANK EQU 4001H ; バ ン ク 切 替 監 視 用pointer の 指 定 用 PTRECG EQU 4002H ; ECG保 存 用

PTRDF1R EQU 4002H ; 元ECG の 二 次 差 分 計 算 用( 右) PTRDF1C EQU 4006H ; 元ECG の 二 次 差 分 計 算 用( 中 央) PTRDF1L EQU 400AH ; 元ECG の 二 次 差 分 計 算 用( 左) PTRREJS EQU 400EH ; QRS波 除 去 処 さ れ る元 ECG 用 PTRDETS EQU 4012H ; ト レ ン ド 除 去 用 元ECG 用 PTRDF1S EQU 4016H ; 元ECG の 二 次 差 分 計 算 用( 保 存 位 置) PTRAV1R EQU 4016H ; 元ECG の 二 次 差 分 の 平 均 用( 足 し 算) PTRAV1C EQU 401AH ; 元ECG の 二 次 差 分 の 平 均 用( 保 存 位 置) PTRREJD EQU 401AH ; QRS波除去結果保存用

PTRTRDR EQU 401AH ; ト レ ン ド 計 算( 平 均) 用( 足 し 算) PTRAV1L EQU 401EH ; 元ECG の 二 次 差 分 の 平 均 用( 引 き 算) PTRTRDC EQU 4022H ; ト レ ン ド 計 算( 平 均) 結果保 存用 PTRDETD EQU 4022H ; Trend Rej.結 果 保 存 用

PTRDF2R EQU 4022H ; Trend Rej.結 果 の 2 次 差 分. 計 算 用( 右) PTRTRDL EQU 4026H ; ト レ ン ド 計 算( 平 均) 用( 減 算) PTRDF2C EQU 402AH ; Trnd Rj.結 果 の 2 次 差 分 計 算 用( 中 央) PTRAV2R EQU 402 AH ; Trnd Rj.結 果 2 次 差 分 平 均 計 算 用( 加 算) PTRDF2L EQU 402EH ; Trnd Rj.結 果 の 2 次 差 分 値 計 算 用( 左) PTRAV2C EQU 4032H ; Trnd Rj.結 果 の 2 次 差 分 値 計 算 用( 左) PTRWAV EQU 4002H ; 波形検出結果保存用 PTRAV2L EQU 4036H ; Trnd Rj.結 果 2 次 差 分 平 均 計 算 用( 減 算) ; ; パ ラ メ ー タ 保存領域

XORGDET EQU 4040H ; 元 ECG保 存 (SAVEORG),Trnd Rj.(SAVEDET)

XECGDIF EQU 4050H ; 元ECG の 二 次 差 分 値 計 算 用 XDIFAV1 EQU 4060H ; 二 次 差 分 値 の 平 均 値 計 算 用(15BYTE) XQRSREJ EQU 4070H ; QRS波 除 去 用(16BYTE)

XECGAVE EQU 4080H ; ECG平 均 値 用(15BYTE)

XDETDIF EQU 4090H ; Trnd Rj.後 の ECG の 二 次 差 分 値 計 算 用 XDIFAV2 EQU 40A0H ; 二 次 差 分 の 平均値用 (15BYTE) XWAVDET EQU 40B0H ; 波 形 検 出 用(8BYTE) XWAVDIA EQU 40B8H ; 診 断 結 果 保 存 用(4BYTE) MODEFLG EQU 40BFH ; 波 形 検 出 モ ー ド 保存領域(1BYTE) QRSPARA EQU 40C0H ; QRS波 検 出 結 果 保 存 領 域 (16BYTE) PPARA EQU 40D0H ; P 波 検 出 結 果 保 存 領 域(12BYTE) TPARA EQU 40E0H ; T 波 検 出 結 果 保 存 領 域(10BYTE) ;

; 波 形 デ ー タ 保存領域

ARRYDF1 EQU 4800H ; 元ECG の 二 次 差 分 値 保 存 領 域 ARRYAV1 EQU 5000H ; 元ECG の 二 次 差 分 の 平均値保存領域 ARRYREJ EQU 5800H ; QRS波 除 去 結 果 保 存 領 域

ARRYTRD EQU 6000H ; ト レ ン ド 計 算 結 果 保 存 領 域 ARRYDET EQU 6800H ; ト レ ン ド 除 去 後 のデ ー タ 保 存 領 域 ARRYDF2 EQU 7000H ; 2次 差 分 保 存 領 域

ARRYAV2 EQU 7800H ; 2次差分の 平 均 値 保 存 領 域 ARRYECG EQU 8000H ; ECG保 存 領 域

ARRYWAV EQU 0C000H ; 波 形 検 出 結 果 保 存 領 域 ;

; ス タ ッ ク の 最 上 位ア ド レ ス

STACK EQU 47F0H ; SETTINGS FOR STACK POINTER

A.7.4 プログラム の先頭部分と割込ベクタ定義

List.A.7.5 はメインプログラムの先頭部分であり,実行開始時に行う処理および

プログラムの先頭部分に置かれる割込ベクタの設定を行う.

(4)

List.A.7.5 header.asm

;*************** ; PROGRAM HEADER ;*************** ;

; 1. STACK POINTER INITIALIZATION ; 2. INTURRUPT VECTOR INITIALIZATION

ORG 0000H DI IM 2 LD SP, STACK LD A,00H LD I,A JP PGMTOP ;

; INTERRUPT VECTOR FOR SIO ORG SIOINTV

DEFW SIOBTE ; CH B TRANSMITTER BUFFER EMPTY DEFW SIOBST ; CH B EXTERNAL STATUS INTERRUPT DEFW SIOBRE ; CH B RECERVING DATA ENABLE

DEFW SIOBRS ; CH B SPECIAL RECEIVING STATUS DEFW SIOATE ; CH A TRANSMITTER BUFFER EMPTY DEFW SIOAST ; CH A EXTERNAL STATUS INTERRUPT DEFW SIOARE ; CH A RECERVING DATA ENABLE DEFW SIOARS ; CH A SPECIAL RECEIVING STATUS ;

; INTERRUPT VECTOR FOR PIO ORG PIOAIV

DEFW PIOAINT ; CH A INTURRUPT VECTOR ORG PIOBIV

DEFW PIOBINT ; CH B INTURRUPT VECTOR ;

; INTERRUPT VECTOR FOR CTC ORG CTCINTV DEFW CTC0INT DEFW CTC1INT DEFW CTC2INT DEFW CTC3INT

A.7.5 ペリフェラルの初期設定

List.A.7.6 から list.A.7.8 に示したソースはペリフェラルの初期設定を行うルー

チンである.List.A.7.6 は PIO (Parallel Input Output)の初期設定,list.A.7.7 は CTC

(Counter/Timer Circuit)の初期設定,そして list.A.7.8 はシリアルポート の初期設定

を行うルーチンであり,メインプログラムの先頭部分で実行される.これらのル

ーチンはプログラム領域中に書き込まれた list.A.7.9 に示すデータを読み込んで

初期設定を行う.

List.A.7.6 initpio.asm

;******************************** ; INITIALIZATION OF PARALLEL PORT ;******************************** ; ; PIO A PORT LD HL,PIOATBL LD B,PIOAEND - PIOATBL LD C,PIOACMD O T I R ; ; PIO B PORT LD HL,PIOBTBL LD B,PIOBEND - PIOBTBL LD C,PIOBCMD O T I R ; ; PPI CH0 PORT LD A,(PPI0TBL) OUT (PPI0CMD),A ;

; PPI CH1 PORT IS OUTPUT PORT

List.A.7.7 initctc.asm

;********************** ; INITIALIZATION OF CTC ;********************** LD HL,CTCTBL0 LD B,CTC0END -CTCTBL0 LD C,CTCCH0 OT I R LD HL,CTCTBL1 LD B,CTC1END -CTCTBL1 LD C,CTCCH1 O T I R LD HL,CTCTBL2 LD B,CTC2END -CTCTBL2 LD C,CTCCH2 O T I R LD HL,CTCTBL3 LD B,CTC3END -CTCTBL3 LD C,CTCCH3 O T I R

List.A.7.8 initsio.asm

;********************** ; INITIALIZATION OF SIO ;********************** ; CHANNEL A LD HL,SIOATBL LD B,SIOAEND- SIOATBL LD C,SIOACMD O T I R ; ; CHANNEL B LD HL,SIOBTBL LD B,SIOBEND- SIOBTBL LD C,SIOBCMD O T I R

List.A.7.9 inittbl.asm

;+++++++++++++++++++++++ ; INITIALIZATION FOR PERIPHERALS ;+++++++++++++++++++++++ ; INITIALIZATION COMMAND FOR CTC ; FOR CTC CH0

CTCTBL0: ; Output Connected to CTC Channel 1 DEFB 00110101B ;InterruptDisable ,TimerMode ,Prescaler=1/256 DEFB 00H ;Time constant = 256

DEFB CTCINTV ;INTERRUPT VECTOR

CTC0END: ;

; FOR CTC CH1

CTCTBL1: ; Output Connected to CTC Channel 2 DEFB 01010101B ; InterruptDisable , CounterMode DEFB 1 ; T ime constant = 1(1/256/256/150 = 1sec) CTC1END:

;

(5)

CTCTBL2:

DEFB 01010101B ; InterruptDisable , CounterMode DEFB 0AH ; T im e constant = 10 DEFB 00000011B ;Stop CTC CTC2END:

;

; FOR CTC CH3

CTCTBL3: ; Output connected to SIO A p o r t CLK (38400baud) DEFB 00010101B ; InterruptDisable ,TimerMode,Prescaler= 1/16 DEFB 01H ; T ime constant = 1

CTC3END: ;

; Before count down for measurement, interrupt enabled on CTC ch1 CTCTBLX:

DEFB 11010101B ; InterruptDisable , CounterMode

DEFB 150 ; T ime constant = 150(1/256/256/150 = 1sec) CTCXEND:

;

; INITIALIZATION COMMAND FOR SIO ; FOR SIO A CHANNEL

SIOATBL:

DEFB 18H ;Re s e t command (WR0) DEFB 01H,00H ;Clear all registors DEFB 03H,00H

DEFB 04H,00H DEFB 05H,00H DEFB 06H,00H DEFB 07H,00H

DEFB 04H,01000100B ;1/16,1 STOP BIT,NON PARITY(WR4) DEFB 01H,00001000B ;trans. int .disable ,recv. int.enable ( W R 1 ) DEFB 03H,11000001B ;Receiving mode ,8 bit( W R

DEFB 05H,11101010B ;Transmission mode ,8 bit(WR5) SIOAEND:

;

; FOR SIO B CHANNEL

SIOBTBL:

DEFB 18H ;Re s e t command (WR0) DEFB 02H,SIOINTV ;Interrupt vector (WR2) DEFB 01H,00000100B ;Interrupt mode (WR1) SIOBEND:

;

; FOR PIO A PORT PIOATBL:

DE FB PIOAIV ;Interrupt vector

DEFB 00001111B ;MODE SELECT (MODE 0,OUTPUT PORT) DEFB 00000111B ;INTERRUPT MODE (DISABLE) PIOAEND:

;

; FOR PIO B PORT PIOBTBL:

DEFB PIOBIV ; I nterrupt vector

DEFB 11001111B ;Mode select (MODE 3,BIT MODE) DEFB 11111111B ; Setting all port for input DEFB 00000111B ;Interrupt disabled PIOBEND:

;

; After count down for measurement, interrupt enabled on PIO B port PIOXTBL:

DEFB PIOBIV ; I nterrupt vector

DEFB 11001111B ; Mode select (MODE 3,BIT MODE) DEFB 11111111B ; Setting all port for input

DEFB 10010111B ;Interrupt by "L"edge or condition , w i t h m a s k DEFB 11111110B ;m a s k (MONITOR D0)

PIOXEND: ;

; FOR PPI CHO PPI0TBL:

DEFB 10010010B ;MODE 0, A,B=INPUT, C=OUTPUT PPI0END:

A.7.6 データ保存用メモリ領域の初期化

List.A.7.10 に示したソースは処理中のサンプルデータを保存するメモリ領域の

初期設定を行うルーチンである.これらのルーチンはプログラム領域中に書き込

まれた list.A.7.11 に示すデータを読み込んで初期設定を行う.

List.A.7.10 initmem.asm

;+++++++++++++++++++++++ ; デ ー タ 保 存 領 域 の初 期 化 ;+++++++++++++++++++++++ INITMEM: ; 波 形 保 存 領 域 の 初期化 LD HL,ARRYECG ; ECG保 存 領 域 の 初 期 化 LD BC,SAVLEN1 CLR00: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR00 LD HL,ARRYDF1 ; 元ECG の 2 次 差 分 値 保 存 領 域 の 初 期 化 LD BC,SAVLEN1 CLR01: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR01 LD HL,ARRYAV1 ; 元E C G 2 次 差 分 平 均 値 保 存 領 域 初 期 化 LD BC,SAVLEN1 CLR02: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR02 LD HL,ARRYREJ ; QRS波 除 去 結 果 保 存 領 域 の 初 期 化 LD BC,SAVLEN1 CLR03: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR03 LD HL,ARRYTRD ; ト レ ン ド 計 算 結 果 保 存 領 域 の 初 期 化 LD BC,SAVLEN1 CLR04: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR04 LD HL,ARRYDET ; ト レ ン ド 除 去 結 果 保 存 領 域 の 初 期 化 LD BC,SAVLEN1 CLR05: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR05 LD HL,ARRYDF2 ; ECGの 二 次 差 分 保 存 領 域 初 期 化 LD BC,SAVLEN1 CLR06: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR06 LD HL,ARRYAV2 ; ECGの 2 次 差 分 平 均 値 保 存 領 域 初 期 化 LD BC,SAVLEN1 CLR07: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR07 LD HL,ARRYWAV ; 波 形 検 出 結 果 保 存 領 域 初 期 化 LD BC,SAVLEN1 CLR08: LD (HL),00H DEC BC INC HL LD A,B OR C JP NZ,CLR08 ; ; 各 種 ポ イ ン タ ・ パ ラメー タ 保 存 領 域 の 初 期 化 LD DE,PTRAREA ; 初 期 化 す る RAM 領 域 の 先 頭 番 地 LD HL,PARAMTBLSTT ; 初 期 値 保 存 領 域 の先 頭 番 地 LD BC,PARAMTBLEND – PARAMTBLSTT ; init. data byte 数 L D I R

(6)

List.A.7.11 inimemtb.asm

;++++++++++++++++++++++++++++ ; RAMメ モ リ領 域 初 期 化 デ ー タ ;++++++++++++++++++++++++++++ ; ポ イ ン タ 領 域 PARAMTBLSTT: DEFB 0EH ; ポ イ ン タ の 数

DEFB 0EH ; バ ン ク 切 換 え 実行時 にc h e c kす る pointer ; ECG保 存 位 置 用(PTRECG)+ 元ECG の 2次 差 分 用( 右)(PTRDF1R) ;+ 波 形 検 出 結 果 保 存 用(PTRWAV)

DEFW 0000H DEFW SAVLEN1 - 1

; 元ECG の 2 次 差 分 計 算 用 (中 央)(PTRDF1C) DEFW SAVLEN1 - DIFDIST

DEFW SAVLEN1 - 1

; 元ECG の 2 次 差 分 計 算 用 (左 )(PTRDF1L) DEFW SAVLEN1 - 2 * DIFDIST DEFW SAVLEN1 - 1

; QRS波 除 去 処 さ れ る元 ECG 用(PTRREJS) DEFW SAVLEN1 - DIFDIST - AVENUM4 + 2 DEFW SAVLEN1 - 1

; ト レ ン ド 除 去 用 元ECG 用(PTRDETS)

DEFW SAVLEN1 - DIFDIST - AVENUM4 - AVENUM2 + 4 DEFW SAVLEN1 - 1 ; 元ECG の 二 次 差 分 計 算 結 果 保 存 用(PTRDF1S) ;+ 元ECG の 二 次 差 分 の平 均 用( 足 し 算 す る 値)(PTRAV1R) DEFW 0000H DEFW SAVLEN2 - 1 ; 元ECG の 2 次 差 分 の平 均 保 存 用(PTRAV1C) ;+QRS波 除 去 結 果 保 存 用(PTRREJD) ;+ Trend 計 算( 平 均) 用( 足 し 算 す る 値)(PTRTRDR) DEFW SAVLEN2 - AVENUM4 + 2

DEFW SAVLEN2 - 1

; 元ECG の 2 次 差 分 の平 均 用( 引 き 算)(PTRTRDL) DEFW SAVLEN2 - 2 * AVENUM4 + 2 DEFW SAVLEN2 - 1

; Trend 計 算( 平 均) 結 果 保 存 用(PTRTRDC) ;+ Trend 除 去 結 果 保 存 用(PTRDETD)

;+ Trend 除 去 結 果 の 二次 差 分値 の 計 算 用( 右)(PTRDF2R) DEFW SAVLEN2 - AVENUM4 - AVENUM2 + 4 DEFW SAVLEN2 - 1

; Trend 計 算( 平 均) 用( 減 算 す る 値)(PTRTRDL) DEFW SAVLEN2 - AVENUM4 - 2 * AVENUM2 + 4 DEFW SAVLEN2 - 1

; Trend 除 去 結 果 の2 次 差 分 値 の 計 算 用( 中 央)(PTRDF2C) ;+ Trend 除 去 結 果 の2 次差分平均値計算用 ( 加算 )(PTRAV2R) DEFW SAVLEN2 - DIFDIST - AVENUM4 - AVENUM2 + 4 DEFW SAVLEN2 - 1

; Trend 除 去 結 果 の2 次 差 分 値 計 算 用( 左)(PTRDF2L) DEFW SAVLEN2 - 2 * DIFDIST - AVENUM4 - AVENUM2 + 4 DEFW SAVLEN2 - 1

; Trend 除 去 結 果 の2 次 差 分 平 均 値 計 算 結果保 存用(PTRAV2C) DEFW SAVLEN2 - DIFDIST - 2 * AVENUM4 - AVENUM2 + 6 DEFW SAVLEN2 - 1

; Trend 除 去 結 果 の 二 次 差 分 平 均 値 計 算 用( 引 き 算)(PTRAV2L) DEFW SAVLEN2 - DIFDIST - 3 * AVENUM4 - AVENUM2 + 6 DEFW SAVLEN2 - 1 ; [[ 未 定 義]] DEFW 0000H DEFW 0000H DEFW 0000H ; ; パ ラ メ ー タ 保存領域

; 元ECG 保 存(SAVEORG)+Trend除去 (SAVEDET) 共 用 領 域 ; (XORGDET=4040H)

DEFW ARRYECG ; 元ECG 保 存 領 域 の 先 頭 番 地

DEFW PTRECG ; 元ECG 波 形 保 存 位 置 へ のpointer 格納番地 DEFW PTRDETS ; Trnd Rj.用 元 ECG 保存位置 pointer 格 納 番 地 DEFW ARRYDET ; Trnd Rj.結 果 格 納 領 域 の 先 頭 番 地 DEFW PTRDETD ; Trnd Rj.結 果 保 存 位 置 pointer の 格 納 番 地 DEFW ARRYTRD ; Trend data 格納領域 の 先 頭 番 地 DEFW PTRTRDC ; Trend data 格納位置 pointer の 格 納 番 地 DEFW OFFSET ; Trnd Rj.の 際 に 加 え る オ フ セ ッ ト 値 ;

; 元ECG の 二 次 差 分 計 算(DIFF2ND) 用(XECGDIF=4050H) DEFW ARRYECG ; 元ECG 保 存 領 域 の 先 頭 番 地 DEFW PTRDF1C ; 元ECG 保 存 位 置 pointer 格 納 番 地( 中 央) DEFW PTRDF1R ; 元ECG 保 存 位 置 pointer の 格 納 番 地( 右) DEFW PTRDF1L ; 元ECG 保 存 位 置 pointer の 格 納 番 地( 左) DEFW ARRYDF1 ; 2次 差 分 計 算 結 果 保 存 領 域 の 先頭番地 DEFW PTRDF1S ; 2次 差 分 計 算 結 果 保 存 位 置pointer 格納番地 DEFW 0000H ; [[ 未 定 義]] DEFW 0000H ; [[ 未 定 義]] ; ; 元ECG の 二 次 差 分 の 平 均 値 計 算 用(XDIFAV1=4060H) DEFW ARRYAV1 ; 元E C G 2 次 差 分 平 均 値 格 納 領 域 先 頭 番 地 DEFW PTRAV1C ; 元E C G 2 次 差 分 平 均 値 保 存 位 置 pointer DEFW ARRYDF1 ; 元E C G 2 次 差 分 格 納 領 域 の 先 頭 番 地 DEFW PTRAV1L ; 減 算 す るdata へ のpointer 格納番地 DEFW PTRAV1R ; 加 算 す るdata へ のpointer 格納番地 DEFW 0000H ; 積 算 値(4BYTE の 下 位2BYTE) の 初 期 化 DEFW 0000H ; 積 算 値(4BYTE の 上 位2BYTE) の 初 期 化 DEFB AVENUM3 ; 平 均 す る デ ー タ 数の べ き

DEFB 00H ; [[ 未 定 義]] ;

; Q R S 波 除 去 用(XQRSREJ=4070H)

DEFW 0000H ; 補 間 用 デ ー タ( 初 期 化 の必 要 な し) DEFW ARRYECG ; 元ECG 波 形 保 存 領 域 の 先 頭 番 地 DEFW PTRREJS ; 元ECG 波 形 保 存 位 置pointer 格 納 番 地 DEFW ARRYAV1 ; 2次差分の 平 均 値 格 納 領 域 の 先頭番地 DEFW PTRAV1C ; 2次差分の 平 均 値 へ のpointer の 格納番地 DEFW ARRYREJ ; QRS除去結果保存領域 の 先 頭 番 地 DEFW PTRREJD ; QRS除 去 結 果 保 存位置 pointer 格 納 番 地 DEFB 00H ; 検 出 モ ー ド の 初期化

DEFB REJDRY ; 不 応 期 カ ウ ン タ の初 期 化 ;

; Trend(QRS除 去 後 のECG 波 の 平 均 値) 計 算 用(XECGAVE=4080H) DEFW ARRYTRD ; Trend 計 算 結 果 保 存 領 域の 先 頭 番 地 DEFW PTRTRDC ; Trend 計 算 結 果 保 存 位 置pointer 格 納 番 地 DEFW ARRYREJ ; QRS除去結果保存領域 の 先 頭 番 地 DEFW PTRTRDL ; 減 算 す るdata へ のpointer の 格 納番 地 DEFW PTRTRDR ; 加 算 す るdata へ のpointer の 格納番地 DEFW 0000H ; 積 算 値(4BYTE の 下 位2BYTE) の 初 期 化 DEFW 0000H ; 積 算 値(4BYTE の 上 位2BYTE) の 初 期 化 DEFB AVENUM1 ; 平 均 す る デ ー タ 数の べ き

DEFB 00H ; [[ 未 定 義]] ;

; ト レ ン ド 除 去 後 のECG 波 形 の 二 次 差 分 計 算 用(XDETDIF=4090H) DEFW ARRYDET ; ECG保 存 領 域 の 先 頭 番 地

DEFW PTRDF2C ; ECG波 形 保 存 位 置 pointer の 格 納 番 地( 中 央) DEFW PTRDF2R ; ECG波 形 保 存 位 置 pointer の 格 納 番 地( 右) DEFW PTRDF2L ; ECG波 形 保 存 位 置 pointer の 格 納 番 地( 左) DEFW ARRYDF2 ; 2次 差 分 計 算 結 果 保 存 領 域 の 先頭番地 DEFW PTRDF2C ; 2次 差 分 計 算 結 果 保 存 位 置pointer 格納番地 DEFW 0000H ; [[ 未 定 義]]

DEFW 0000H ; [[ 未 定 義]] ;

; Trend 除 去 後 のECG 波 形 2次 差 分 平 均 値 計 算 用(XDIFAV2=40A0H) DEFW ARRYAV2 ; 2次差分の 平 均 値 保 存 領 域 の 先頭番地 DEFW PTRAV2C ; 2次差分の 平 均 値 保 存 位 置pointer 格納番地 DEFW ARRYDF2 ; 2次 差 分 結 果 保 存 領 域 の 先 頭 番 地 DEFW PTRAV2L ; 減 算 す るdata へ のpointer の 格納番地 DEFW PTRAV2R ; 加 算 す るdata へ のpointer の 格納番地 DEFW 0000H ; 積 算 値(4BYTE の 下 位2BYTE) の 初 期 化 DEFW 0000H ; 積 算 値( 4BYTE の 上 位2BYTE) の 初 期 化 DEFB AVENUM3 ; 平 均 す る デ ー タ 数の べ き

DEFB 00H ; [[ 未 定 義]] ;

; 波 形 検 出 用(XWAVDET=40B0H)

DEFW ARRYAV2 ; 2次差分の 平 均 値 保 存 領 域 の 先頭番地 DEFW PTRAV2C ; 2次差分の 平 均 値 保 存 位 置pointer 格納番地 DEFW ARRYDET ; Trnd Rj.結 果 格 納 領 域 の 先 頭 番 地 DEFW PTRAV2C ; Trnd Rj.結 果 保 存 位 置 pointer 格 納 番 地 ;

; 診 断 結 果 保 存 用(XWAVDIA=40B8H)

DEFW ARRYWAV ; 診 断 結 果 保 存 領 域の 先 頭 番 地 DEFW PTRWAV ; 診 断 結 果 保 存 位 置pointer 格 納 番 地 DEFW 0000H ; [[ 未 定 義]]

DEFB 00H ; [[ 未 定 義]] ;

; 波 形 検 出 用 パ ラメー タ の 初 期 化

DEFB 00H ; 波 形 検 出 モ ー ド(FOR WAVEDET) DEFW INIDRY ; 検 出開始 待 ち 時 間 初 期 化(QRSPARA+0) ;

PARAMTBLEND:

A.7.7 心電図データの読込と保存

List.A.7.12 に示したソースは A/D コンバータ からの心電図データを PIO を通じ

て読み込み,メモリ領域に保存するルーチンである.

(7)

List.A.7.12 saveorg.asm

;+++++++++++++++++++++++ ; 心 電 図 デ ー タ の 保存 ;+++++++++++++++++++++++ SAVEORG: LD L,(IX+2) ; 保 存 先pointer( オ フ セ ッ ト) の 読込 み LD H,(IX+3) LD E,(HL) INC HL LD D,(HL) LD L,(IX+0) ; 保 存 先 先 頭 番 地 の読 込 み LD H,(IX+1) ADD HL,DE ; 保 存 先 ア ド レ ス の決 定 IN A,(PPI0A) ; 下 位 デ ー タ の 読 込み LD (HL),A ; 下 位 デ ー タ の 保 存 INC HL IN A,(PPI0B) ; 上 位 デ ー タ の 読 込み LD (HL),A ; 上 位 デ ー タ の 保 存 RET

A.7.8 心電図からの QRS 波の除去

List.A.7.13 に示したソースはメモリ上の心電図データから QRS 波のような大き

な凹凸を除去するルーチンである.除去される波形は二次微分の平均値が一定レ

ベルを超えたものであり,凹凸の部分はその開始点の振幅で置き換えられる.な

お,除去の基準として用いる二次微分の平均値は list.A.7.15 および list.A.7.16 の

ルーチンによりあらかじめ計算され,メモリ領域に保存されたデータを用いる.

List.A.7.13 qrsrej3.asm

;+++++++++++++++++++++++ ; 元 波 形 か ら の 凸波除去 ;+++++++++++++++++++++++ QRSREJ: LD A,(IX+14) ; モ ー ド フ ラ グ の 読込 み LD L,(IX+8) ; 二次差分値保存位置 へ の pointer 読 込 み LD H,(IX+9) LD C,(HL) INC HL LD B,(HL) LD L,(IX+6) ; 二次差分値保存領域 の 先 頭 番 地 読 込 み LD H,(IX+7) ADD HL,BC ; 二次差分値保存位置 の 計 算 LD C,(HL) ; 二 次 差 分 デ ー タ の読 込 み( 下 位) INC HL LD B,(HL) ; 二 次 差 分 デ ー タ の読 込 み( 上 位) ; ; モ ー ド(A レ ジ ス タ) の 値 に よ っ て 異な る ル ー チ ン にjump ; (Aレ ジ ス タ は00H ∼ 04H の 偶 数) LD HL,QRSREJJP0 LD E,A LD D,00H ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) QRSREJJP0: DEFW QRSREJWAIT DEFW QRSREJRSTT DEFW QRSREJRDET ; ; QRS波 除 去 結 果 の 保存 ; DE レジスタ -> 保 存 す る デ ー タ QRSREJEND: LD L,(IX+12) ; 除 去 結 果 保 存 位 置へ の pointer 読 込 み LD H,(IX+13) LD C,(HL) INC HL LD B,(HL) LD L,(IX+10) ; 除 去 結 果 保 存 領 域の 先 頭 番 地 読 込( 下 位) LD H,(IX+11) ; 除 去 結 果 保 存 領 域の 先 頭 番 地 読 込( 上 位) ADD HL,BC ; 除 去 結 果 保 存 位 置の 計 算 LD (HL),E ; 除 去 結 果 の 保 存( 下 位) INCHL LD (HL),D ; 除 去 結 果 の 保 存( 上 位) RET ; ル ー チ ン の 終 了 ; ; 検 出 不 応 期( モ ー ド=00H) ; 凸波終点検出後 の 待 ち 時 間 QRSREJWAIT: LD L,(IX+15) ; 不 応 期 カ ウ ン タ の読 込 み DEC L ; 不 応 期 カ ウ ン タ のデ ク リ メ ン ト JP NZ,QRSREJJP2 LD HL,REJ2DTH AND A SBC HL,BC JP M,QRSREJJP1 INC A ; 次 の モ ー ド に 変 更(00H->02H) INC A LD (IX+14),A ; モ ー ド の 保 存 QRSREJJP1: LD (IX+15),REJDRY; 不 応 期 カウンタ の 初 期 化 CALL QRSREJRD ; 元ECG 波 形 の 読 込 み( D E レジスタ ) JP QRSREJEND

QRSREJJP2:

LD (IX+15),L ; 不 応 期 カ ウ ン タ の保 存

CALL QRSREJRD ; 元ECG 波 形 の 読 込 み( D E レジスタ ) JP QRSREJEND ; ; 凸 波 始 点 検 出( モ ー ド=02H) ; 二 次 差 分 振 幅が REJ2DTH の 値 を 上 回 っ た ら ; 凸 波 開 始 と 見な し 、 R波 検 出 モ ー ド に 移行 ; 呼 出 時 のBCレ ジ ス タ -> 二 次 差 分 値 QRSREJRSTT:

CALL QRSREJRD ; 元ECG 波 形 の 読 込 み( D E レジスタ ) LD HL,REJ2DTH ; 検 出 閾 値 の 読 込 み AND A SBC HL,BC ; 二 次 差 分 値 と 閾 値の 比 較 JP P,QRSREJEND ; 閾 値 よ り 大 な らjump INCA ; 次 の モ ー ド に 変 更(02H->04H) INCA LD (IX+14),A ; モ ー ド の 保 存 LD (IX+0),E ; 補 間 用 デ ー タ の 保存 ( 下位 ) LD (IX+1),D ; 補 間 用 デ ー タ の 保存 ( 上位 ) JP QRSREJEND ; ; ; 凸 波 検 出 中( モ ー ド=04H) ; 呼 出 時 のBCレ ジ ス タ -> 二 次 差 分 値 QRSREJRDET: CALL QRSREJRD ; 現 在 の 振 幅 の 読 込み LD L,(IX+0) ; 補 間 用 デ ー タ の 読込 み (下 位) LD H,(IX+1) ; 補 間 用 デ ー タ の 読込 み (上 位) AND A SBC HL,DE ; 補 間 用 デ ー タ と 現在 の 振 幅 の 比 較 JP M,QRSREJJP3 ; 補 間 用 デ ー タ が 小な らj u m p LD A,00H ; 次 の モ ー ド に 変 更(04H->00H) LD (IX+14),A ; モ ー ド の 保 存 JP QRSREJEND QRSREJJP3: LD E,(IX+0) ; 補 間 用 デ ー タ の 読込 み (下 位) LD D,(IX+1) ; 補 間 用 デ ー タ の 読込 み (上 位) JP QRSREJEND ; ; 元ECG 波 形 の 読 込 み ; 読 み 込 ま れ たECG デ ー タ -> DE レ ジ ス タ QRSREJRD:

LD L,(IX+4) ; 元ECG 波 形 保 存 位 置 へ のpointer 読 込 LD H,(IX+5) LD E,(HL) INC HL LD D,(HL) LD L,(IX+2) ; 元ECG 波 形 保 存 領 域 の 先頭番地読込 LD H,(IX+3)

ADD HL,DE ; 元ECG 波 形 保 存 位 置 の 計 算 LD E,(HL) ; 元ECG 波 形 デ ー タ の 読 込 み( 下 位) INC HL

LD D,(HL) ; 元ECG 波 形 デ ー タ の 読 込 み( 上 位) RET

(8)

A.7.9 基線変動の除去と結果の保存

List.A.7.14 に示したソースは基線変動成分 を元の心電図波形から差し引くこと

により基線変動の除去を行うルーチンである.基線変動成分はすでにメモリ領域

に保存されているものを用いるため,このルーチンの前にまず list.A.7.13 のルー

チンにより QRS 波を除去した波形を計算し,これに list.A.7.16 のルーチンによる

移動平均処理を施して,その結果を基線変動成分としてメモリ領域に格納してお

く必要がある.

List.A.7.14 savedet.asm

;+++++++++++++++++++++++ ; ト レ ン ド の 除 去 と保 存 ;+++++++++++++++++++++++ SAVEDET:

LD L,(IX+4) ; 元ECG デ ー タ へ の pointer 読 込 み LD H,(IX+5) LD E,(HL) INC HL LD D,(HL) LD L,(IX+0) ; 元ECG デ ー タ 格 納 領 域 の 先 頭 番 地 読 込 み LD H,(IX+1)

ADD HL,DE ; 元ECG デ ー タ 格 納 番 地 の 計 算 LD E,(HL) ; 元ECG デ ー タ の 読 込 み( 下 位) INCHL LD D,(HL) ; 元ECG デ ー タ の 読 込 み( 上 位) LD L,(IX+12) ; ト レ ン ド デ ー タ 格納位置 へ の pointer 読 込 LD H,(IX+13) LD C,(HL) INC HL LD B,(HL) LD L,(IX+10) ; ト レ ン ドdata 格 納 領 域 の 先 頭 番 地 読 込 み LD H,(IX+11) ADD HL,BC ; ト レ ン ド デ ー タ 格納番地 の 計 算 LD C,(HL) ; ト レ ン ド デ ー タ の読 込 み( 下 位) INC HL LD B,(HL) ; ト レ ン ド デ ー タ の読 込 み( 上 位) EX DE,HL AND A ; Carry フ ラ グ ク リ ア SBC HL,BC ; ト レ ン ド の 除 去 LD E,(IX+14) ; オ フ セ ッ ト 値 の 読込 み LD D,(IX+15) ADD HL,DE ; オ フ セ ッ ト 値 の 加算 EX DE,HL LD L,(IX+8) ; 結 果 保 存 位 置 へ のpointer 読 込 み LD H,(IX+9) LD C,(HL) INC HL LD B,(HL) LD L,(IX+6) ; 結 果 保 存 領 域 の 先 頭 番 地 読 込 み LD H,(IX+7) ADD HL,BC ; ト レ ン ド 除 去 結 果 格 納 番 地 の 計 算 LD (HL),E ; ト レ ン ド 除 去 結 果の 格 納( 下 位) INC HL LD (HL),D ; ト レ ン ド 除 去 結 果の 格 納( 上 位) RET

A.7.10 二次微分の計算と結果の保存

List.A.7.15 に示したソースは二次微分波形 を計算するルーチンである.さらに

計算された二次微分データに対しては,list.A.7.18 に示す移動平均が計算され,

QRS 波の除去や心電図波形の検出に用いられる .

List.A.7.15 diff2nd.asm

;+++++++++++++++++++++++ ; 二 次 差 分 値 の 計 算と 保 存 ;+++++++++++++++++++++++ DIFF2ND: LD L,(IX+2) ; 元 デ ー タ( 中 央) 格 納 番 地 への pointer 読 込 LD H,(IX+3) LD E,(HL) INC HL LD D,(HL) LD L,(IX+0) ; 元 デ ー タ 格 納 場 所の 先 頭 番 地 の 読 込 み LD H,(IX+1) PUSH HL ; 先 頭 番 地 を 待 避 EX DE,HL ; 先 頭 番 地 をDE レ ジ ス タ に 保 存 ADD HL,DE ; 元 デ ー タ( 中 央) 格 納 番 地 の計 算 LD C,(HL) ; 元 デ ー タ( 中 央) C kの 読 込 み( 下 位) INC HL LD B,(HL) ; 元 デ ー タ( 中 央) C kの 読 込 み( 上 位) SLA C ; 2倍 RL B PUSH BC ; 元 デ ー タ( 中 央) の2 倍 2* C kの 待 避 LD L,(IX+4) ; 元 デ ー タ( 右) C k+dへ のpointer読 込 み LD H,(IX+5) LD C,(HL) INC HL LD B,(HL) EX DE,HL ; HLレジスタ に 先 頭 番 地 を 戻 す ADD HL,BC ; 元 デ ー タ( 右) C k+d格 納 番 地 計 算 LD C,(HL) ; 元 デ ー タ( 右) C k+d読 込 み( 下 位) INC HL LD B,(HL) ; 元 デ ー タ( 右) C k+d読 込 み( 上 位) POP HL ; 元 デ ー タ( 中 央) の2 倍 2* C kの 取 出 し AND A SBC HL,BC ; 2* C k - C k+d EX DE,HL ; 途 中 経 過 デ ー タ( 2 * C k - C k+d) の 待 避 LD L,(IX+6) ; 元 デ ー タ( 左) C k-d へ のpointer 読 込み LD H,(IX+7) LD C,(HL) INC HL LD B,(HL) POP HL ; 元 デ ー タ 格 納 場 所の 先 頭 番 地 取 出 し ADD HL,BC ; 元 デ ー タ( 左) C k-d 格 納 番 地 計 算 LD C,(HL) ; 元 デ ー タ( 左) C k-d 読 込 み( 下 位) INC HL LD B,(HL) ; 元 デ ー タ( 左) C k-d 読 込 み( 上 位) EX DE,HL ; 途 中 経 過( 2 * C k - C k+d) の 取 出 し AND A SBC HL,BC ; 2* C k - C k+d - C k-d EX DE,HL LD L,(IX+10) ; 計 算 結 果 格 納 先 への pointer 読 込 み LD H,(IX+11) LD C,(HL) INC HL LD B,(HL) LD L,(IX+8) ; 計 算 結 果 格 納 先 の先 頭 番 地 読 込 み LD H,(IX+9) ADD HL,BC ; 計 算 結 果 格 納 番 地の 計 算 LD (HL),E ; 計 算 結 果 の 格 納( 下 位) INC HL LD (HL),D ; 計 算 結 果 の 格 納( 上 位) RET

(9)

A.7.11 平均値の計算

List.A.7.16 に示したソースは移動平均 を計算するルーチンである.移動平均 は

二次微分の平均値計算および基線変動波形の算出に用いられるため,プログラム

の複数の箇所から呼び出される.

List.A.7.16 average.asm

;+++++++++++++++++++++++ ; 平 均 値 の 計 算 ;+++++++++++++++++++++++ AVERAGE: LD L,(IX+6) ; 引 き 算 す る 数 へ のポ イ ン タ 読 込 LD H,(IX+7) LD C,(HL) INC HL LD B,(HL) LD L,(IX+4) ; 平 均 す るdata 領 域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,BC ; 引 き 算 す る 数 の 格 納 場 所 計 算 CALL SUB32 ; 古 い デ ー タ を 引 き算 LD L,(IX+8) ; 足 し 算 す る 数 へ のポ イ ン タ 読 込 LD H,(IX+9) LD C,(HL) INC HL LD B,(HL) LD L,(IX+4) ; 平 均 す るdata 領 域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,BC ; 足 し 算 す る 数 の 格 納 場 所 計 算 CALL ADD32 ; 新 し い デ ー タ を 足し 算 CALL CALCAVE ; 平 均 値 の 計 算 と 保存 RET ;+++++++++++++++++++++++ ; 16 ビ ッ ト の 減 算 を行 い 、 結 果 を 32 ビ ッ ト で 求 める ; 16bit数 保 存 場 所->HL registor ; 32bit数 保 存 場 所->IX+10∼IX+13 ;+++++++++++++++++++++++ SUB32: LD C,(HL) ; 16bit data( 減 数) の読 込 INC HL LD B,(HL)

LD DE,0000H ; 32bit減 数 の 上 位16bit の 初 期 化 BIT 7,B

JP Z,SUBJP0 ; 減 数 が 負 の 場 合 には DE=FFFFH DEC DE

SUBJP0: LD L,(IX+10) ; 積 算 値 デ ー タ の 下位 16bit の 読 込 LD H,(IX+11)

AND A ; キ ャ リ ー フ ラ グ のク リ ア SBC HL,BC ; 下 位16bitの 引 き算

LD (IX+10),L ; 32bit binary data( 下 位 16bit) の 書 込 LD (IX+11),H

LD L,(IX+12) ; 32bit data の 上 位 16bitの 読 込 み LD H,(IX+13)

SBC HL,DE ; 上 位16bitの 引 き算

LD (IX+12),L ; 32bit binary data( 上 位 16bit) の 書 込 LD (IX+13),H RET ;+++++++++++++++++++++++ ; 16 ビ ッ ト の 加 算 を行 い 、 結 果 を 32 ビ ッ ト で 求 める ; 16bit数 保 存 場 所->HL registor ; 32bit数 保 存 場 所->IX+10∼IX+13 ;+++++++++++++++++++++++ ADD32: LD C,(HL) ; 16bitデ ー タ( 加 数) の 読 込 INC HL LD B,(HL)

LD DE,0000H ; 32bit加 数 の 上 位16bit の 初 期 化 BIT 7,B

JP Z,ADDJP0 ; 加 数 が 負 の 場 合 には DE=FFFFH DEC DE

ADDJP0: LD L,(IX+10) ; 積 算 値 デ ー タ の 下位 16bit の 読 込 LD H,(IX+11)

AND A ; キ ャ リ ー フ ラ グ のク リ ア ADC HL,BC ; 下 位16bitの 足 し算

LD (IX+10),L ; 32bit binary data( 下 位 16bit) の 書 込 LD (IX+11),H

LD L,(IX+12) ; 32bit binary data の 上 位16bitの 読込 LD H,(IX+13)

ADC HL,DE ; 上 位16bitの 足 し算

LD (IX+12),L ; 32bit binary data( 上 位 16bit) の 書 込 LD (IX+13),H RET ;+++++++++++++++++++++++ ; 平 均 値 の 計 算 ;+++++++++++++++++++++++ CALCAVE: LD E,(IX+10) ; 積 算 デ ー タ の 読 込 LD D,(IX+11) LD C,(IX+12) LD B,(IX+13) LD L,(IX+14) ; 平 均 す る デ ー タ 数の べ き の 読 込 AVELOOP: ; ビ ッ ト シ フ ト(2^nの 除 算) SRA B RR C RR D RR E DEC L JP NZ,AVELOOP LD L,(IX+2) ; 結 果 格 納 位 置 へ のポ イ ン タ 読 込 LD H,(IX+3) LD C,(HL) INC HL LD B,(HL) LD L,(IX+0) ; 結 果 格 納 領 域 の 先 頭 番 地 読 込 LD H,(IX+1) ADD HL,BC ; 結 果 格 納 番 地 計 算 LD (HL),E ; 平 均 値 の 格 納( 下 位) INC HL LD (HL),D ; 平 均 値 の 格 納( 上 位) RET

A.7.12 心電図波形検出

List.A.7.17 に示したソースは計算済みの二次微分の平均値データを用いて心電

図波形の検出を行う.検出は 16 の状態を次々と移動しながら行われ,T 波の終点

を検出した時点で list.A.7.18 に示した診断ルーチンが実行される.

List.A.7.17 wavedet2.asm

;+++++++++++++++++++++++ ; ECG波 形 検 出 ;+++++++++++++++++++++++ ; WAVEDET: LD A,(MODEFLG) AND 1EH ; 波 形 検 出 終 了 フラグ の リ セ ッ ト LD (MODEFLG),A LD HL,(QRSPARA+6) ; R- R間 隔 カウンタ の increment INC HL LD (QRSPARA+6),HL LD L,(IX+2) ; 2次差分の 平 均 値 格 納 位 置pointer 読 込 LD H,(IX+3) LD C,(HL) INC HL LD B,(HL) LD L,(IX+0) LD H,(IX+1) ADD HL,BC LD C,(HL) ; 2次差分の 平 均 値 の 読 込( 下 位)

(10)

INC HL LD B,(HL) ; 2次差分の 平 均 値 の 読 込( 上 位) ; ; MODEFLG の 値 に よ っ て 異な る サ ブ ル ー チ ン にjump ; (MODEFLG は 0∼ 30 の 偶 数) LD HL,JMPADDRSTT LD E,A LD D,00H ADD HL,DE LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) JMPADDRSTT: DEFW INIDETDRY DEFW INIDETSTT DEFW INIDETPEAK DEFW INIDETEND DEFW PDETECTDRY DEFW PDETECTSTT DEFW PDETECTPEAK DEFW PDETECTEND DEFW TDETECTDRY DEFW TDETECTSTT DEFW TDETECTPEAK DEFW TDETECTEND DEFW QRSDETSTT DEFW QRSDETQRS DEFW QRSDETPEAK DEFW QRSDETEND WAVEDETEND: RET ; ;+++++++++++++++++++++++ ; 初 期 状 態 か ら のR波 検 出( 始 点 検 出 開 始 ま で の 待ち )(A REG.=00H) ;+++++++++++++++++++++++ INIDETDRY: LD HL,(QRSPARA+0) ; 待 ち 時 間 の デ ク リ メ ン ト DEC HL LD (QRSPARA+0),HL BIT 7,H JP Z,INIDETJP0 ; 待 ち 時 間<0 な ら 以 下 を 実 行 LD HL,RTH ; R検 出 閾 値 を越 え て い る か 検 査 AND A SBC HL,BC JP M,INIDETJP0 ; 閾 値 以 下 な らINIDETJP0ま で 実 行 INC A ; モ ー ド を00H か ら02H に 変 更 INC A LD (MODEFLG),A INIDETJP0: JP WAVEDETEND ; ;+++++++++++++++++++++++ ; 初 期 状 態 か ら のR波 検 出( R波 始 点 検 出 中)(A REG.=02H) ;+++++++++++++++++++++++ INIDETSTT: LD HL,RTH ; R波 検 出 閾 値を 越 え て い る か 検 査 AND A SBC HL,BC JP P,INIDETJP1 ; 閾 値< な らINIDETJP 1 ま で 実 行 LD HL,0000H LD (QRSPARA+6),HL ; R- R間 隔 カウンタ 初 期 化 LD (QRSPARA+14),BC ; 前 の2 次 差 分 値 初 期 化 INC A ; モ ー ド を02H か ら04H に 変 更 INC A LD (MODEFLG),A INIDETJP1: JP WAVEDETEND ; ;+++++++++++++++++++++++ ; 初 期 状 態 か ら のQ R S波 検 出( R波 ピ ー ク 検 索)(A REG.=04H) ;+++++++++++++++++++++++ INIDETPEAK: LD HL,QRSTH ; QRS検 出 閾 値 を 下 回っ て い る か 検 査 AND A SBC HL,BC JP M,INIDETJP2 ; QRS閾 値 以 下 な ら 次の JP ま で を 実 行 INC A ; モ ー ド を04H か ら06H に 変 更 INC A LD (MODEFLG),A JP INIDETJP3 INIDETJP2: LD HL,(QRSPARA+14) AND A SBC HL,BC JP P,INIDETJP3 ; 2次差分が 増 加-> I NI D E T J P 3まで 実 行 LD HL,0000H LD (QRSPARA+6),HL ; R- R間 隔 カウンタ の 初 期 化 INIDETJP3: JP WAVEDETEND ; ;+++++++++++++++++++++++ ; 初 期 状 態 か ら のR波 検 出( S波 終 点 検 索)(A REG.=06H) ;+++++++++++++++++++++++ INIDETEND: LD HL,(QRSPARA+14) ; 2つの 二 次 差 分 の 平 均 値 を 比 較 AND A SBC HL,BC JP M,INIDETJP 4 ; 2次差分が 増 加-> I N I D E T J P 4まで 実 行 LD HL,TDELAY ; T 波 検 出 ま で の 遅 延 時 間 の初 期 化 LD (TPARA+0),HL

LD A,00010001B ; 終 了flag を 立 てT 検 出mode(11H) へ LD (MODEFLG),A INIDETJP4: JP WAVEDETEND ; ;+++++++++++++++++++++++ ; P 波 検 出( 始 点 検 出 までの待 ち 状 態)(A REG.=08H) ;+++++++++++++++++++++++ PDETECT DRY: LD HL,(PPARA+0) ; 遅 延 時 間 カ ウ ン タの デ ク リ メ ン ト DEC HL LD (PPARA+0),HL BIT 7,H JP Z,PDETJP0 ; 遅 延 期 間 終 了-> P D E T J P 0まで 実 行 LD (PPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 を 初 期 化 INC A ; モ ー ド を28H か ら2AH に 変 更 INC A LD (MODEFLG),A PDETJP0: JP WAVEDETEND ; ;+++++++++++++++++++++++ ; P 波 検 出( 始 点 検 出)(A REG.=0AH) ;+++++++++++++++++++++++ PDETECTSTT: LD HL,(PPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 AND A SBC HL,BC LD (PPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 更 新 JP M,PDETJP1 ; 2次差分値 が 減 少->PDETJP1ま で 実 行 LD HL,0000H ; P 波 持 続 時 間 の 初期化 LD (PPARA+2),HL

LD L,(IX+6) ; Trnd Rj .data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 み (下 位) INC HL LD D,(HL) ; Trnd Rj.data の 読込 み (上 位) LD (PPARA+6),DE ; P 波 始 点 レ ベ ル の初 期 化 PDETJP1: LD HL,PTH ; 2次差分の 平 均> P T H-> 始 点 検 出 終 了 AND A SBC HL,BC JP P,WAVEDETEND

LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 ) LD (PPARA+8),DE ; P 波 頂 点 レ ベ ル の更 新 INC A ; モ ー ド を2AH か ら2CH に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; P 波 検 出( ピ ー ク 検 出)(A REG.=0CH) ;+++++++++++++++++++++++ PDETECTPEAK: LD HL,(PPARA+2) ; P 波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (PPARA+2),HL LD HL,(PPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 み AND A SBC HL,BC LD (PPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 更 新 JP P,PDETJP2 ; 2次差分値 が 前 よ り 大 な ら 以 下 を実 行 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 み LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5)

(11)

ADD HL,DE LD E,(HL) ; ト レ ン ド 除 去 データ の 読 込 み( 下 位) INCHL LD D,(HL) ; ト レ ン ド 除 去 データ の 読 込 み( 上 位) LD (PPARA+8),DE ; P 波 頂 点 レ ベ ル の更 新 PDETJP2: BIT 7,B ; 2次差分の 平 均 値 の 符 号 を 調 べ る JP P,WAVEDETEND ; 2次 差 分 平 均 値<0 => 以 下 を 実 行 INC A ; モ ー ド を2CH か ら 2EH に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; P 波 検 出( 終 点 検 出)(A REG.=0EH) ;+++++++++++++++++++++++ PDETECTEND: LD HL,(PPARA+2) ; P 波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (PPARA+2),HL LD HL,(PPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 AND A SBC HL,BC LD (PPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 更 新 JP P,WAVEDETEND ; 2次 差 分 値 が 前 よ り 大 な ら 以 下 を 実 行

LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 ) SRA D ; P 波 終 了 点 振 幅 を2 で 割 る RR E LD HL,(PPARA+8) ; P 波 頂 点 レ ベ ル の読 込 AND A SBC HL,DE ; Pp - Ps/2 LD DE,(PPARA+6) ; P 波 始 点 振 幅 の 読込 み SRA D ; P 波 始 点 振 幅 を2 で 割 る RR E AND A SBC HL,DE ; Pp - (Ps+Pe)/2 LD (PPARA+10),HL; P 波 振 幅 の 保 存 LD HL,0000H ; P 終 了 か らQ 検 出 ま で の 時間初 期化 LD (QRSPARA+0),HL

LD A,00011001B ; 終 了flag を 立 てQRS mode へ(A=19H) LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; QRS波 検 出( 始 点 検 出1)(A REG.=18H) ;+++++++++++++++++++++++ QRSDETSTT: LD HL,(QRSPARA+0) ; Q 波 検 出 待 ち 時 間 のINCREMENT INC HL LD (QRSPARA+0),HL LD HL,QRSTH ; “< Q R S 始 点 検 出 閾 値” を検 査 AND A SBC HL,BC JP M,WAVEDETEND ; 下 回 っ た ら 以 下 を実 行 LD (QRSPARA+14),BC ; 前 の 二 次 差 分 の 平均値を 初 期 化 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 ) LD (QRSPARA+8),DE ; Q 波 始 点 レ ベ ル の 初 期 化 INC A INC A ; モ ー ド を18H か ら1AH に 変 更 LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; QRS波 検 出( 始 点 検 出2)(A REG.=1AH) ;+++++++++++++++++++++++ QRSDETQRS: LD HL,(QRSPARA+0) ; Q 波 検 出 待 ち 時 間 のINCREMENT INC HL LD (QRSPARA+0),HL

LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(H L ) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 ) LD HL,(QRSPARA+14) ; 前 の2 次 差 分 の 平 均 値 読 込 LD (QRSPARA+14),BC ; 前 の2 次 差 分 の 平 均 値 更 新 BIT 7,B JP Z,QRSDETJP0 ; 2次差分平 均 値 が 負 な ら 以 下 を 実行 AND A SBC HL,BC JP M,WAVEDETEND ; 2次 差分減 少=> 次 の JPま で を 実 行 LD (QRSPARA+8),DE ; Q 波 始 点 レ ベ ル の 更 新 LD HL,0000H ; QRS波 持 続 時 間 の 初期化 LD (QRSPARA+2),HL JP WAVEDETEND QRSDETJP0: LD (QRSPARA+10),DE ;R波 最 大 値 の 初 期 化 INC A ; モ ー ド を1AH か ら1CH に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; QRS波 検 出( R波 ピーク 検 出)(A REG.=1CH) ;+++++++++++++++++++++++ QRSDETPEAK: LD HL,(QRSPARA+2) ; QRS波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (QRSPARA+2),HL LD HL,QRSTH AND A SBC HL,BC LD HL,(QRSPARA+14) ; 前 の2 次 差 分 の 平 均 値 読 込 LD (QRSPARA+14),BC ; 前 の2 次 差 分 の 平 均 値 を 更 新 JP P,QRSDETJP1 ; 2次差分<QRSTH な らJUMP AND A SBC HL,BC JP P,WAVEDETEND ; 2次差分が 増 加 な ら 以 下 を 実 行 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; ト レ ン ド 除 去 データ の 読 込( 上 位) LD (QRSPARA+10),DE ; R波 最 大 レベル の 更 新 LD HL,(QRSPARA+6) ; R- R間 隔 の 更新 LD (QRSPARA+4),HL JP WAVEDETEND QRSDETJP1: LD HL,(QRSPARA+6) ; R- R間 隔 用 カウンタ の 初 期 化 LD BC,(QRSPARA+4) AND A SBC HL,BC LD (QRSPARA+6),HL INC A ; モ ー ド を1CH か ら 1EH に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; QRS波 検 出( 終 点 検 出)(A REG.=1EH) ;+++++++++++++++++++++++ QRSDETEND: LD HL,(QRSPARA+2) ; QRS波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (QRSPARA+2),HL LD HL,(QRSPARA+14) ; 前 の2 次 差 分 の 平 均 値 読 込 LD (QRSPARA+14),BC ; 前 の2 次 差 分 の 平 均 値 を 更 新 AND A SBC HL,BC JP P,WAVEDETEND ; 2次差分が 増 加 な ら 以 下 を 実 行 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 み LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格 納 領 域 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 )

(12)

SRA D ; S波 終 了 点 振 幅 を2 で 割 る RR E LD HL,(QRSPARA+10) ; R波 レ ベ ル の読 込 AND A SBC HL,DE ; R - S/2 LD DE,(QRSPARA+8) ; Q 波 始 点 振 幅 の 読 込 SRA D ; 2で割 る RR E AND A SBC HL,DE ; R - (Q+S)/2 LD (QRSPARA+12),HL ; R波 振 幅 の 保存 LD HL,TDELAY ; T 波 検 出 ま で の 遅 延 時 間 の初 期 化 LD (TPARA+0),HL

LD A,00010001B ; 終 了flag+T 検 出mode(A=11H) LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; T 波 検 出( 始 点 検 出 ま で の 待 ち状 態 )(A REG.=10H) ;+++++++++++++++++++++++ TDETECTDRY: LD HL,(TPARA+0) ; 遅 延 時 間 カ ウ ン タの decriment DEC HL LD (TPARA+0),HL BIT 7,H JP Z,WAVEDETEND ; 遅 延 期 間 が 終 了=>以 下 を 実 行 LD (TPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 を 初 期 化 LD HL,0000H ; T 波 持 続 時 間 の 初 期 化 LD (TPARA+2),H L INC A ; モ ー ド を10H か ら12H に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; T 波 検 出( 始 点 検 出)(A REG.=12H) ;+++++++++++++++++++++++ TDETECTSTT: LD HL,(TPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 AND A SBC HL,BC LD (TPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 更 新 JP M,TDETJP0 ; 2次差分値 が 減 少=>TDETJP0ま で 実 行 LD HL,0000H ; T 波 持 続 時 間 の 初 期 化 LD (TPARA+2),HL TDETJP0: LD HL,TTH ; 2次差分 平均>TTH => 始 点 検 出 終 了 AND A SBC HL,BC JP P,WAVEDETEND

LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上位 ) LD (TPARA+6),DE ; T 波 頂 点 レ ベ ル の 更 新 INC A ; モ ー ド を12H か ら14H に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; T 波 検 出( T 波ピ ー ク 検 出)(A REG.=14H) ;+++++++++++++++++++++++ TDETECTPEAK: LD HL,(TPARA+2) ; T 波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (TPARA+2),HL LD HL,(TPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 AND A SBC HL,BC LD (TPARA+4),BC ; 前 の2 次 差 分 の 平 均 値 更 新 JP P,TDETJP1 ; 二 次 差 分 値 増 加=>TDETJP1ま で 実行 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格納領域 の 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 み (下 位) INC HL LD D,(HL) ; Trnd Rj.data の 読込 み (上 位) LD (TPARA+6) , D E ; T 波 頂 点 レ ベ ル の 更 新 TDETJP1: BIT 7,B ; 2次差分の 平 均 値 の 符 号 を 調 べ る JP P,WAVEDETEND ; 2次 差 分 平 均 値< 0 なら 以 下 を 実 行 INC A ; モ ー ド を34H か ら36H に 変 更 INC A LD (MODEFLG),A JP WAVEDETEND ; ;+++++++++++++++++++++++ ; T 波 検 出( 終 点 検 出)(A REG.=16H) ;+++++++++++++++++++++++ TDETECTEND: LD HL,(TPARA+2) ; T 波 持 続 時 間 の イ ン ク リ メ ン ト INC HL LD (TPARA+2),HL LD HL,(TPARA+4) ; 前 の2 次 差 分 の 平 均 値 読 込 AND A SBC HL,BC LD (TPARA+4),BC ; 前 の 二 次 差 分 の 平 均値更 新 JP P,WAVEDETEND ; 2次差分値 が 増 加 な ら 以 下 を 実 行 LD L,(IX+6) ; Trnd Rj.data へ のpointer 読 込 LD H,(IX+7) LD E,(HL) INC HL LD D,(HL) LD L,(IX+4) ; Trnd Rj.data 格 納 領 域 先 頭 番 地 読 込 LD H,(IX+5) ADD HL,DE LD E,(HL) ; Trnd Rj.data の 読込 ( 下位 ) INC HL LD D,(HL) ; Trnd Rj.data の 読込 ( 上 位) LD HL,(TPARA+6) ; T 波 頂 点 レ ベ ル の 読 込 AND A SBC HL,DE ; T 波 振 幅 の 計 算 LD (TPARA+8),HL ; T 波 振 幅 の 保 存 LD HL,PDELAY ; P 波 検 出 ま で の 遅延時間 の 初 期 化 LD (PPARA+0),HL LD A,00001001B ; 終 了フ ラ グ+P 検 出mode(A=09H) LD (MODEFLG),A JP WAVEDETEND

A.7.13 心電図パラメータの診断

List.A.7.18 に示したソースは検出した波形パラメータ が定めた範囲内にあるか

どうかを検査することにより,検出した心電図が正常か異常かを判定する.

List.A.7.18 wavdiag2.asm

;+++++++++++++++++++++ ;ECG 波 形 診 断 ;+++++++++++++++++++++ WAVEDIAG: LD A,(MODEFLG)

BIT 0,A ; 波 形 検 出 終 了 時 か ど う かcheck JP Z,WAVEDIAGEND ; 波 形 検 出 終 了 時 以 外 は 診 断 し な い ;

; MODEFLGの 値 に よ っ て 異 な る サ ブ ル ー チ ン へj u m p

AND 1EH ; 不 要 な ビ ッ ト(BIT0,5 -7) を ク リ ア LD HL,JMPADRSET ; jump先 へ の pointer 番 地 計 算 LD E,A LD D,00H ADD HL,DE LD E,(HL) ; jump先 番 地 読 込 み INC HL LD D,(HL) EX DE,HL JP (HL) ; そ れ ぞ れ の 番 地 にjump JMPADRSET: DEFW INIDIAG DEFW INIDIAG DEFW INIDIAG DEFW INIDIAG DEFW TDIAG DEFW TDIAG

(13)

DEFW TDIAG DEFW TDIAG DEFW QRSDIAG DEFW QRSDIAG DEFW QRSDIAG DEFW QRSDIAG DEFW PDIAG DEFW PDIAG DEFW PDIAG DEFW PDIAG WAVEDIAGEND: RET ; ;+++++++++++++++++++++ ; 初期状態 か ら 検 出 し たQ R S 波 の 終了時 ;+++++++++++++++++++++ INIDIAG: LD HL,QRSTIMN ; QRS波 持 続 時 間 に 正常値を セ ッ ト LD (QRSPARA+2),HL ; QRS波 持 続 時 間 の 保存 JP WAVEDIAGEN D ; ; ;+++++++++++++++++++++ ;P 波 検 出 終 了 時 ;+++++++++++++++++++++ PDIAG: LD HL,(PPARA+2) ; P 波 持 続 時 間 の 診断 EX DE,HL LD HL,PTIMEH ; 正 常 範 囲 を 超 えてい るかc h e c k AND A SBC HL,DE JP P,PDIAGJP0 ; 異 常 検 出 時 にPDIAGJP0ま で 実 行 LD C,PERROR1 ; 異 常 波 形 番 号 読 み込 み OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 PDIAGJP0: LD HL,PTIMEL ; 正 常 範 囲 を 下 回 っ て い る か をc h e c k AND A SBC HL,DE JP M,PDIAGJP1 ; 異 常 検 出 時 に はPDIAGJP1ま で を 実 行 LD C,PERROR1 ; 異 常 波 形 番 号 読 み込 み OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 PDIAGJP1: LD HL,(PPARA+10); P 波 振 幅 の 診 断 EX DE,HL LD HL,PAMPH ; 正 常 範 囲 を 超 え て い る か をc h e c k AND A SBC HL,DE JP P,PDIAGJP2 ; 異 常 検 出 時 に はPDIAGJP2ま で を 実 行 LD C,PERROR2 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 PDIAGJP2: LD HL,PAMPL ; 正 常 範 囲 を 下 回 っ て い る か をc h e c k AND A SBC HL,DE JP M,PDIAGJP3 ; 異 常 検 出 時 に はPDIAGJP3ま で を 実 行 LD C,PERROR3 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 PDIAGJP3: LD (MODEFLG),A ; MODEFLG の 保 存 JP WAVEDIAGEND ; 波 形 診 断 ル ー チ ン終 了 ; ;+++++++++++++++++++++ ;T 波 検 出 終 了 時 ;+++++++++++++++++++++ TDIAG: LD HL,(QRSPARA+2) ; Q -T 時 間 の 診断 EX DE,HL LD HL,TDELAY ; Q -T 時 間=QRS + S ->T + T ADD HL,DE EX DE,HL LD HL,(TPARA+2) ADD HL,DE EX DE,HL LD HL,QTTIMEH ; 正 常 範 囲 を 超 え て い る か をc h e c k AND A SBC HL,DE JP P,TDIAGJP0 ; 異 常 検 出 時 に はTDIAGJP0ま で を実 行 LD C,TERROR1 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 TDIAGJP0: LD HL,QTTIMEL ; 正 常 範 囲 を 下 回 っ て い る か をc h e c k AND A SBC HL,DE JP M,TDIAGJP1 ; 異 常 検 出 時 に はTDIAGJP1ま で を実 行 LD C,TERROR1 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 TDIAGJP1: LD HL,(TPARA+8) ; T 波 振 幅 の 診 断 EX DE,HL LD HL,TAMPH ; 正 常 範 囲 を 超 え て い る か をc h e c k AND A SBC HL,DE JP P,TDIAGJP2 ; 異 常 検 出 時 に はTDIAGJP2ま で を実 行 LD C,TERROR2 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 TDIAGJP2: LD HL,TAMPL ; 正 常 範 囲 を 下 回 っ て い る か をc h e c k AND A SBC HL,DE JP M,TDIAGJP3 ; 異 常 検 出 時 に はTDIAGJP3ま で を実 行 LD C,TERROR3 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 TDIAGJP3: LD (MODEFLG),A ; MODEFLG の 保 存 JP WAVEDIAGEND ; ;+++++++++++++++++++++ ;QRS波 検 出 終 了 時 ;+++++++++++++++++++++ QRSDIAG: ; LD HL,(QRSPARA+0) ; PQ 時 間 の 診 断 ; EX DE,HL ; LD HL,PQTIMEH ; 正 常 範 囲 を 超 え て い る か をc h e c k ; AND A ; SBC HL,DE ; JP M,BITSET ; LD HL,PQTIMEL ; 正 常 範 囲 を 下 回 っ て い る か をc h e c k ; AND A ; SBC HL,DE ; JP P,BITSET LD HL,(QRSPARA+2) ; QRS波 持 続 時 間 の 診断 EX DE,HL LD HL,QRSTIMH ; 持 続 時 間 の 正 常 範 囲 を 超 え て い る か をcheck AND A SBC HL,DE JP P,QRSDIAGJP0 ; 異 常 検 出 時 にQRSDIAGJP0ま で 実 行 LD C,QRSERR1 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP0: LD HL,QRSTIML ; 持 続 時 間 の 下限以上 か をc h e c k AND A SBC HL,DE JP M,QRSDIAGJP1; 異 常 検 出 時 にQRSDIAGJP1ま で 実 行 LD C,QRSERR1 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP1: LD HL,(QRSPARA+4) ; R- R間 隔 の 診断 EX DE,HL LD HL,RRTIMEH ; 正 常 範 囲 を 超 え て い る か をc h e c k AND A SBC HL,DE JP P,QRSDIAGJP2 ; 異 常 検 出 時 にQRSDIAGJP2ま で 実 行 LD C,QRSERR2 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP2: LD HL,RRTIMEL ; 正 常 範 囲 を 下 回 っている か をc h e c k AND A SBC HL,DE JP M,QRSDIAGJP3; 異 常 検 出 時 にQRSDIAGJP3ま で 実 行 LD C,QRSERR2 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP3: LD HL,(QRSPARA+10) ; R波 振 幅 の 診断 EX DE,HL LD HL,RAMPH ; 正 常 範 囲 を 超 え て い る か をc h e c k AND A SBC HL,DE JP P,QRSDIAGJP4 ; 異 常 検 出 時 にQRSDIAGJP 4 ま で 実 行 LD C,QRSERR3 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP4: LD HL,RAMPL ; 振 幅 の 下 限 以 上 かをc h e c k AND A SBC HL,DE JP M,QRSDIAGJP5; 異 常 検 出 時 に は QRSDIAGJP5ま で を 実 行 LD C,QRSERR3 OR C ; MODEFLG に 異 常 波 形 の 情報 を 追 加 QRSDIAGJP5: LD (MODEFLG),A ; MODEFLG の 保 存 JP WAVEDI AGEND

参照

関連したドキュメント

・広告物を掲出しようとする場所を所轄する市町村屋外広告物担当窓口へ「屋

あらまし MPEG は Moving Picture Experts Group の略称であり, ISO/IEC JTC1 におけるオーディオビジュアル符号化標準の

平成 26 年の方針策定から 10 年後となる令和6年度に、来遊個体群の個体数が現在の水

北海道の来遊量について先ほどご説明がありましたが、今年も 2000 万尾を下回る見 込みとなっています。平成 16 年、2004

当監査法人は、我が国において一般に公正妥当と認められる財務報告に係る内部統制の監査の基準に

Wiese, Dihedral Galois representations and Katz modular forms, Doc. Wiles, Modular elliptic curves and Fermat’s

本品は、シリンダー容積 2,254

〒020-0832 岩手県盛岡市東見前 3-10-2