|
Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3
158 159 ;------------------------------------------------- 160 EC9A [05] 4E8B92 161 mov upress,cmp1 162 163 ;- Процедура ожидания окончания накачки манжеты -- 164 165 ;- Задержка 0.7 секунды с индикацией текущего давления -------- 166 167 loop: EC9D [04] 6E0093 168 mov #$0,del 169 loop2: ECA0 [01] 4F 170 clra ECA1 [04] C7FFFF 171 sta $ffff ;Сброс WDOG 172 loop1: ECA4 [01] 4A 173 deca ECA5 [03] 26FD 174 bne loop1 ;Если аккумулятор=0 то переход на loop1 ECA7 [05] 4E8B8C 175 mov upress,udav ;код напряжения с датчика заносим в udav ECAA [03] 450000 176 ldhx #$0 ECAD [05] CDEE74 177 jsr VOLTS_PRESSURE_RET ;Вызов подпрограммы перекодировки напряжение в давление ECB0 [05] 4E8E8F 178 mov dav,y ECB3 [05] CDEE85 179 jsr BCD_RET ECB6 [04] 6E0483 180 mov #$04,adres ;занести адрес начала индикации ECB9 [05] CDEEC1 181 jsr IND_RET ECBC [04] 3A93 182 dec del ECBE [03] 26E0 183 bne loop2 ;Если del=0 то переход на loop2 ECC0 [05] 069104 184 brset 3,bitf1,lop ;Если 3 бит=0 то задержка происходит снова ECC3 [04] 1691 185 bset 3,bitf1 ;Установить 3 бит в 1 ECC5 [03] 20D6 186 bra loop ;Переход на loop 187 lop: ECC7 [04] 1789 188 bclr 3,bitf ;Сбросить 3 бит в 1 189 190 ;------------------------------------------------- ECC9 [04] C7FFFF 191 sta $ffff ECCC [03] B68B 192 lda upress ;Загружаем upress в аккумулятор для сравнения ECCE [03] B192 193 cmp cmp1 ;с cmp1 ECD0 [03] 2502 194 blo ampmet ;Если А>cmp1, то накачка манжеты всё ещё идет ECD2 [03] 20C9 195 bra loop ;поэтому переходим на loop 196 197 ;------- Определение амплитуды ------------------- 198 тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 5 199 ampmet: ECD4 [04] C7FFFF 200 sta $ffff ECD7 [04] 1089 201 bset 0,bitf ;Устанавливаем аналоговый вход РТВ1 ECD9 [04] 6E3023 202 mov #$30,TMODH ;Инициализация таймера, период счёта до 12499 ECDC [04] 6ED324 203 mov #$d3,TMODL ; частота тактирования 125000 Гц ECDF [04] 6E4320 204 mov #$43,TSC ;Запуск таймера 205 dvbm: ECE2 [04] C7FFFF 206 sta $ffff ECE5 [05] 0A8902 207 brset 5,bitf,rm ;Если цикл продолжается больше 5 секунд ECE8 [03] 2003 208 bra m55 ;то выводим сообщение об ошибки 209 rm: ECEA [03] CCEDFC 210 jmp rorm 211 m55: ECED [03] B68A 212 lda upress1 ECEF [03] B194 213 cmp por ;Сраниваем upress1 c порогом por ECF1 [03] 25EF 214 blo dvbm ;Если upress1<por то переходим на dvbm ECF3 [03] 3F95 215 clr ovsec ;Сброс OVsec ECF5 [05] 4E8A96 216 mov upress1,cmpad ;----------------------------- 217 loopamp: ECF8 [04] C7FFFF 218 sta $ffff ;----------------- ECFB [04] 1989 219 bclr 4,bitf ;----------------- ECFD [05] 0989FD 220 brclr 4,bitf,$ ;Идентификация амплитуды ED00 [03] B68A 221 lda upress1 ;----------------- ED02 [03] B196 222 cmp cmpad ;----------------- ED04 [03] 22F2 223 bhi loopamp ;Если upress1>cmpad то переходим на loopamp 224 225 ;---------- Сброс и перезапуск таймера ----------- 226 ED06 [04] 1A20 227 bset 5,TSC ED08 [04] 1820 228 bset 4,TSC ED0A [04] 6E4320 229 mov #$43,TSC 230 231 ;------------------------------------------------- 232 ED0D [05] 4E9697 233 mov cmpad,amp2 ;В amp2 находится значение амплитуды ED10 [04] 1189 234 bclr 0,bitf ;Устанавливаем аналоговый вход РТВ0 ED12 [04] 1789 235 bclr 3,bitf ;Обнуляем бит СОСО1 ED14 [05] 0789FD 236 brclr 3,bitf,$ ;Если СОСО1=0 то зациклеваемся ED17 [05] 4E8B8C 237 mov upress,udav ;Код напряжения с тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 6 датчика в udav ED1A [04] 1089 238 bset 0,bitf ;Устанавливаем аналоговый вход РТВ1 ED1C [04] 3C90 239 inc pulse ;В pulse кол-во амплитуд ED1E [03] B697 240 lda amp2 ED20 [03] B198 241 cmp amp1 ED22 [03] 220B 242 bhi proim ;Если amp2>amp1 то переход на proim ED24 [05] 4E98A4 243 mov amp1,pmem1 ;----------------- ED27 [05] 4E9798 244 mov amp2,amp1 ;Меняем местами amp2 с amp1 ED2A [05] 4EA497 245 mov pmem1,amp2 ;----------------- ED2D [04] 1E89 246 bset 7,bitf ;Устанавливаем в 1 бит cb 247 248 ;--- Процедура вычисления производной амплитуды -- 249 proim: ED2F [04] C7FFFF 250 sta $ffff ED32 [05] 00913E 251 brset 0,bitf1,mtime ;Если вход в процедуру 2-ой раз то переход на mtime ED35 [04] 1091 252 bset 0,bitf1 ;Устанавливаем sb в 1 ED37 [03] BE99 253 ldx sec ED39 [02] A60A 254 lda #!10 ED3B [05] 42 255 mul ;Умножаем sec на 10 ED3C [01] 8C 256 clrh ED3D [01] 5F 257 clrx ED3E [03] BB9A 258 add sec10 ;Результат умноженияскладываем с sec10, 259 ;получаем время импульса ED40 [03] B79B 260 sta time1 ;Время импульса заносим в time1 261 cbm: ED42 [05] 0F8908 262 brclr 7,bitf,perem ;Если amp2 и amp1 менялись местами то ED45 [04] 1F89 263 bclr 7,bitf ;меняем их обратно ED47 [05] 4E97A4 264 mov amp2,pmem1 ;------------------- ED4A [05] 4E9897 265 mov amp1,amp2 ;------------------- 266 perem: ED4D [05] 4E9798 267 mov amp2,amp1 ;amp2 заносим в amp1 268 269 ;- Задержка с индикацией текущего давления 0.3 секунды ---------------------; 270 271 ED50 [04] 6E0093 272 mov #$0,del 273 loop20: ED53 [01] 4F 274 clra ED54 [04] C7FFFF 275 sta $ffff ;Сброс WDOG 276 loop11: ED57 [01] 4A 277 decaтонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 7ED58 [03] 26FD 278 bne loop11 ED5A [05] 4E8B8C 279 mov upress,udav ED5D [03] 450000 280 ldhx #$0 ED60 [05] CDEE74 281 jsr VOLTS_PRESSURE_RET;Вызов подпрограммы перекодировки напряжение в давление ED63 [05] 4E8E8F 282 mov dav,y ED66 [05] CDEE85 283 jsr BCD_RET ED69 [04] 6E0483 284 mov #$04,adres ;занести адрес начала индикации ED6C [05] CDEEC1 285 jsr IND_RET ED6F [04] 3A93 286 dec del ED71 [03] 26E0 287 bne loop20 288 289 290 ;--------------------------------------------- 293 mtime: ED73 [04] C7FFFF 294 sta $ffff ED76 [03] BE99 295 ldx sec ED78 [02] A60A 296 lda #!10 ED7A [05] 42 297 mul ;sec умножаем на 10 ED7B [03] BB9A 298 add sec10 ;sec10+результат умножения ED7D [05] 039108 299 brclr 1,bitf1,time2m ;Если pb=0 то переходим на time2m ED80 [03] B79B 300 sta time1 ;Время импульса в time1 ED82 [03] B09C 301 sub time2 ;Вычитаем из time1,time2 ED84 [04] 1391 302 bclr 1,bitf1 ;Обнуляем pb ED86 [03] 2006 303 bra raznom 304 time2m: ED88 [03] B79C 305 sta time2 ;Время импульса в time2 ED8A [03] B09B 306 sub time1 ;Вычитаем из time2,time1 ED8C [04] 1291 307 bset 1,bitf1 ;Устанавливаем pb 308 raznom: ED8E [03] B79D 309 sta time3 ;Разность времени в Time3 ED90 [03] B697 310 lda amp2 ;------------------- ------ ED92 [03] B098 311 sub amp1 ;Вычисляем разность амплитуд рез. в аккумуляторе ED94 [02] AE0A 312 ldx #!10 ;Разность амплитуд умножаем на 10 ED96 [05] 42 313 mul ;------------------- ------------- ED97 [03] BFA4 314 stx pmem1 ED99 [04] 55A4 315 ldhx pmem1 ED9B [03] BE9D 316 ldx time3 ED9D [07] 52 317 div ;Разность амплитуд умноженная на 10 делим на time3 318 ;в результате получаем производную амплитуд 319 тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 8 320 ;--------------------- Процедура определения давления ----------------------------------; 321 ED9E [05] 049109 322 brset 2,bitf1,pr2m ;Если qb=1 то переходим на pr2m EDA1 [03] B19E 323 cmp pr1 ;pr1 - порог для систолического давления EDA3 [03] 2505 324 blo pr2m ;Если производная меньше pr1 то переход на pr2m EDA5 [05] 4E8C9F 325 mov udav,sis ;Заносим значение давления в sis EDA8 [04] 1489 326 bset 2,bitf ;Устанавливаем qb в 1 327 pr2m: EDAA [04] C7FFFF 328 sta $ffff EDAD [03] B1A0 329 cmp pr2 ;pr2 - порог для диастолического давления EDAF [03] 2591 330 blo cbm ;Если производная меньше pr2 то переход на cbm EDB1 [05] 4E8CA1 331 mov udav,dia ;Значение давления заносим в dia EDB4 [02] A600 332 lda #!0 EDB6 [03] B19F 333 cmp sis EDB8 [03] 2342 334 bls rorm ;Если sis=<0 то переходим на rorm EDBA [02] A63C 335 lda #!60 ;Вычисляем усреднённое значение пульса EDBC [03] BE99 336 ldx sec ;----------------- EDBE [07] 52 337 div ;----------------- EDBF [03] BE90 338 ldx pulse ;----------------- EDC1 [05] 42 339 mul ;----------------- EDC2 [03] B7A2 340 sta pul ;----------------- 341 342 ;--------------------- Индикация давления и пульса -----------------------------------; 343 EDC4 [04] C7FFFF 344 sta $ffff EDC7 [05] 4E9F8C 345 mov sis,udav ;Вывод систолического давления EDCA [05] CDEE74 346 jsr VOLTS_PRESSURE_RET ;Вызов подпрограммы перекодировки напряжение в давление EDCD [05] 4E8E8F 347 mov dav,y EDD0 [05] CDEE85 348 jsr BCD_RET EDD3 [04] 6E0483 349 mov #$04,adres ;занести адрес начала индикации EDD6 [05] CDEEC1 350 jsr IND_RET 351 EDD9 [05] 4EA18C 352 mov dia,udav ;Вывод диастолического давления EDDC [05] CDEE74 353 jsr VOLTS_PRESSURE_RET ;Вызов подпрограммы перекодировки напряжение в давление EDDF [05] 4E8E8F 354 mov dav,y EDE2 [05] CDEE85 355 jsr BCD_RETтонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 9 EDE5 [04] 6E4483 356 mov #$44,adres ;занести адрес начала индикации EDE8 [05] CDEEC1 357 jsr IND_RET 358 EDEB [04] C7FFFF 359 sta $ffff EDEE [05] 4EA28F 360 mov pul,y ;Вывод пульса EDF1 [05] CDEE85 361 jsr BCD_RET EDF4 [04] 6E4D83 362 mov #$4d,adres ;занести адрес начала индикации EDF7 [05] CDEEC1 363 jsr IND_RET EDFA [03] 2022 364 bra exitdav 365 rorm: EDFC [04] 1501 366 bclr 2,PTB EDFE [04] 1701 367 bclr 3,PTB EE00 [04] 6E0103 368 mov #$1,PTD ;Очистка дисплея EE03 [04] 6E1284 369 mov #!18,bcd100 ; "O" EE06 [04] 6E1385 370 mov #!19,bcd10 ; "Ш" EE09 [04] 6E0C86 371 mov #!12,bcd1 ; "И" EE0C [04] 6E0583 372 mov #$5,adres EE0F [05] CDEEC1 373 jsr IND_RET EE12 [04] 6E1484 374 mov #!20,bcd100 ; "Б" EE15 [04] 6E1585 375 mov #!21,bcd10 ; "К" EE18 [04] 6E0E86 376 mov #!14,bcd1 ; "А" EE1B [05] CDEEC1 377 jsr IND_RET 378 exitdav: 379
Страницы: 1, 2, 3, 4
|
|
|