Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3
ит QB позволяет сначала определять систолическое давление, и только потом определять диастолическое давление, причём если систолическое давление определенно, то в последующем определяется только диастолическое давление. Рис.4.2.1.2. Рис.4.2.1.2.(продолжение) Рис.4.2.1.2.(продолжение) Рис.4.2.1.2.(продолжение) Рис.4.2.1.2.(продолжение) Рис.4.2.1.2.(продолжение)4.2.2 БСА обработчика прерывания от таймераБСА обработчика прерывания от таймера, представлена на рис.4.2.2.1. Для правильной работы обработчика, необходимо частоту тактирования таймера сделать равной 125кГц, т.е. Fbus/8, а в регистр периода загрузить число 12499. Тогда через каждые 0,1 S будет вызываться обработчик прерывания от таймера.В начале подпрограммы обработчика необходимо сбросить флаг TOF(бл.1), иначе в противном случае следующий запрос на прерывание “потеряется”.После того, как флаг будет сброшен, подпрограмма переходит к выполнению блока 2, в котором она делает инкремент ячейки памяти Sec10(в ней находятся 10-е доли секунды). Как только Sec10 станет равным 9-и (бл.3), происходит очистка, т.е. обнуление, Sec10 (бл.4) и делается инкримент ячейки памяти Sec (в которой находятся целые секунды).В блоках 6,7 происходит отсчёт времени до 2-х минут, после чего устанавливается бит Dvb(бл.8), который контролирует время нахождения в программы в цикле (бл.30,31,29) см. рис.4.2.1.2.Рис.4.2.2.1.4.2.3 БСА обработчика прерываний от АЦПБСА обработчика прерываний от АЦП представленна на рис.4.2.3.1.Бит ab (бл.1) определяет аналоговый вход АЦП, или РТВ0, или РТВ1. Рассмотрим случай когда аналоговым входом является линия РТВ0, т.е. ab=0.В блоке 2 определяется, был ли ранее у АЦП аналоговый вход РТВ0:Если не был (ab2=0), то происходит сброс бита ab1, который выполняет аналогичную функцию, только показывает, был ли ранее у АЦП, аналоговый вход РТВ1. После чего происходит установка бита ab2 в 1 (бл.4), и запуск АЦП с аналоговым входом РТВ0 (бл.7). Далее программа выходит из обработчика.Если был (ab2=1), то в блоке 5 устанавливается бит СОСО1, сигнализирующий о том, что преобразование завершено, после чего результат из регистра данных АЦП переносится в ячейку памяти Upress, и происходит запуск АЦП с аналоговым входом РТВ0 (бл.7). После чего программа выходит из обработчика.В случае когда аналоговым входом является линия РТВ1 (ab=1), всё происходит аналогично.Бит ab2 и ab1 необходимы для корректной работы подпрограммы. То есть, если аналоговым входом является линия РТВ0, то при смене аналогового входа на РТВ1, первый результат преобразования окажется ложным, он не будет соответствовать значению сигнала на входе РТВ1. Поэтому чтобы этого не случилось, вводятся биты ab2 и ab1.Рис.4.2.3.1.4.2.4 БСА подпрограммы табличной перекодировки напряжение в давление.БСА подпрограммы табличной перекодировки напряжения в давление представленна на рис. 4.2.4.1.В начале подпрограммы происходит сохранение регистров CPU в стеке (бл.1). Далее происходит вычисление истинного давления(бл.2), после чего результат проделанной операции заносится в Udav (бл.3). В блоке 4 происходит загрузка числа в регистр Х, затем следует команда табличной перекодировки ( бл.5), где TCP - начало таблицы перекодировки. После чего, в блоке 6, перекодированное число заносится в Udav, в блоке 7 восстанавливаются из стека регистры CPU, и программа выходит из обработчика.Рис.4.2.4.1.4.2.5 БСА подпрограммы вывода числа на индикациюБСА вывода числа на индикацию представлена на рис.4.2.5.1.В ячейку памяти ci заносится число (бл.2) равное кол-ву цифр выводимых на индикатор.В блоке 5 происходит загрузка числа для табличной перекодировки, в регистр Х. После чего в бл.6 следует команда табличной перекодировки числа для индикации, где TCI - это начало кодовой таблицы. После этой команды, происходит передвижение по ячейкам BCDxxx.В блоках 8,9 происходит запись перекодированного числа в одну из ячеек памяти INDxxx, после чего в блоке 10 идёт передвижение по ячейкам INDxxx.В блоке 11 происходит настройка индикатора на приём адреса, после чего в блоке 12 адрес передаётся в индикатор, который стробируется импульсом образованным блоками 13-15. После этого следует задержка 30 мкС, в течении которой индикатор выполняет, свои внутренние операции.Как только задержка окончилась, в бл.17,18 индикатор настраивается на приём данных, и далее происходит передача данных (бл.19), которые стробируются импульсом образованным блоками 20-22. После чего в блоке 23 происходит задержка, после которой декрементируется ячейка памяти ci, в блоках 25-27 происходит подготовка для вывода следующего числа на индикацию, и в бл.28 проверяется, если ci 0, то подпрограмма переходит к выполнению бл.6 и всё начинается заново. Если ci=0, то программа выходит из обработчика. Рис.4.2.5.1.Рис.4.2.5.1.(продолжение)4.2.6 БСА подпрограммы перевода числа в BCD форматБСА подпрограммы перевода числа в BCD формат представлена на рис.4.2.6.1.В начале подпрограммы, регистры CPU сохраняются в стеке. В блоке 1 происходит проверка:Если число больше 99, то в блоке 3 происходит деление числа на 100, в результате этой операции, целое частное помещается в аккумулятор, а остаток деления в регистр H. Целое частное - это сотни числа, поэтому они заносятся в ячейку памяти BCD100 (бл.4), после чего остаток загружается в аккумулятор (бл.5), и делится на 10 (бл.6). В результате этой операции, в аккумуляторе получаются десятки числа, которые заносятся в BCD10 (бл.7), а остаток числа показывает единицы и заносится в BCD1 (бл.8).Если число меньше 99, то оно проверяется в блоке 2, если оно меньше 9, то в ячейку памяти BCD100,BCD10 записывается код пробела (бл. 11,12), после чего данное число записывается в BCD1 (бл.13). Если оно больше 9, то число записывается в аккумулятор (бл.9), в ячейку памяти BCD100 записывается код пробела, после чего происходит деление числа на 10 (бл.6) и далее всё происходит как в пункте 1, только начиная с блока 6. Рис.4.2.6.1.5. Принципиальная схема устройстваПринципиальная схема устройства изображена на рис.5.1.ЗаключениеОбратите внимание на принципиальную схему прибора, в ней как видно минимум элементов. Это объясняется применением в схеме, микроконтроллера. Причем всё измерение осуществляется в полуавтоматическом режиме и происходит в микроконтроллере. Тем самым пользователь прикладывает минимум усилий для измерения своего давления. Таким образом применение микропроцессорных систем в устройствах различного типа, позволяет сократить кол-во элементов в схеме, сделать устройство более качественным, а также позволяет осуществить наиболее “дружелюбный” интерфейс с пользователем.Программа для данного устройства была написана на ассемблере CASM08, оттранслированна и отлажена на ICS08JL, листинг программы приведён в приложении.Список литературыПанфилов Д.И. Датчики фирмы MOTOROLA. Москва. ДОДЭКА. 2000. 96 с.БЭК. Жидкокристалические индикаторы фирмы DATA INTERNATIONAL. Москва. 1999. 64 с.Technical Data. MC68HC908JL3.Technical Data. MPX5050DP.Приложениетонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 10000 1 PTA equ $0 0000 2 PTB equ $1 0000 3 PTD equ $3 0000 4 DDRA equ $4 0000 5 DDRB equ $5 0000 6 DDRD equ $7 0000 7 PDCR equ $A 0000 8 PTAPUE equ $D 0000 9 KBSCR equ $1A 0000 10 KBIER equ $1B 0000 11 CONFIG2 equ $1E 0000 12 CONFIG1 equ $1F 0000 13 TSC equ $20 0000 14 TCNTH equ $21 0000 15 TCNTL equ $22 0000 16 TMODH equ $23 0000 17 TMODL equ $24 0000 18 ADSCR equ $3C 0000 19 ADR equ $3D 0000 20 ADICLK equ $3E 21 22 23 0080 24 org $80 ;ОЗУ 25 0080 26 ind rmb 3 0083 01 27 adres db 1 0084 01 28 BCD100 db 1 0085 01 29 BCD10 db 1 0086 01 30 BCD1 db 1 0087 01 31 indx db 1 0088 01 32 ci db 1 0089 01 33 bitf db 1 008A 01 34 upress1 db 1 008B 01 35 upress db 1 008C 01 36 udav db 1 008D 01 37 const db 1 008E 01 38 dav db 1 008F 01 39 y db 1 0090 01 40 pulse db 1 0091 01 41 bitf1 db 1 0092 01 42 cmp1 db 1 0093 01 43 del db 1 0094 01 44 por db 1 0095 01 45 ovsec db 1 0096 01 46 cmpad db 1 0097 01 47 amp2 db 1 0098 01 48 amp1 db 1 0099 01 49 sec db 1 009A 01 50 sec10 db 1 009B 01 51 time1 db 1 009C 01 52 time2 db 1 009D 01 53 time3 db 1 009E 01 54 pr1 db 1 009F 01 55 sis db 1 00A0 01 56 pr2 db 1 00A1 01 57 dia db 1 00A2 01 58 pul db 1тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 2 00A3 01 59 bcdx db 1 00A4 01 60 pmem1 db 1 61 EC00 62 org $ec00 ;программа 63 64 start: 65 ;--------------------------- Инициализация ----- 66 EC00 [01] 4F 67 clra EC01 [01] 5F 68 clrx 69 EC02 [04] 6EFF07 70 mov #$ff,DDRD ;Настраиваем линии порта PTD на вывод EC05 [04] 6E1C05 71 mov #$1c,DDRB ;Настраиваем линии РТВ2,РТВ3,РТВ4 на вывод 72 73 ;Инициализация индикатора 74 EC08 [04] 1501 75 bclr 2,PTB EC0A [04] 1701 76 bclr 3,PTB EC0C [04] 6E0603 77 mov #$6,PTD ;Установка режима ввода EC0F [04] 1801 78 bset 4,PTB ;Формирование стробирующего импульса EC11 [01] 9D 79 nop EC12 [01] 9D 80 nop EC13 [01] 9D 81 nop EC14 [01] 9D 82 nop EC15 [01] 9D 83 nop EC16 [04] 1901 84 bclr 4,PTB EC18 [05] CDEF08 85 jsr deleysret EC1B [04] 6E3803 86 mov #$38,PTD ;Установка выполняемыхфункций EC1E [04] 1801 87 bset 4,PTB ;Формирование стробирующего импульса EC20 [01] 9D 88 nop EC21 [01] 9D 89 nop EC22 [01] 9D 90 nop EC23 [01] 9D 91 nop EC24 [01] 9D 92 nop EC25 [04] 1901 93 bclr 4,PTB EC27 [05] CDEF08 94 jsr deleysret ;Задержка 30 мкС EC2A [04] 6E0803 95 mov #$8,PTD EC2D [04] 1801 96 bset 4,PTB ;Формирование стробирующего импульса EC2F [01] 9D 97 nop EC30 [01] 9D 98 nop EC31 [01] 9D 99 nop EC32 [01] 9D 100 nop EC33 [01] 9D 101 nop EC34 [04] 1901 102 bclr 4,PTB EC36 [05] CDEF08 103 jsr deleysret ;Задержка 30 мкС 104 105 ;--------------------------------------------- 106 107 main:тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 3 EC39 [02] A628 108 lda #!40 EC3B [02] AE80 109 ldx #$80 110 sbm: EC3D [02] 7F 111 clr ,X ; Обнуление ячеек памяти EC3E [01] 5C 112 incx EC3F [01] 4A 113 deca EC40 [03] 26FB 114 bne sbm EC42 [04] 6E5994 115 mov #!89,por EC45 [04] 6E089E 116 mov #!8,pr1 ;Порог для систоличе ского EC48 [04] 6E0DA0 117 mov #!13,pr2;Порог для диастолического 118 EC4B [02] 9A 119 cli ;Разрешаем прерывания 120 EC4C [04] 6E403C 121 mov #$40,ADSCR ;Запуск АЦП вход РТВ0 EC4F [05] 0789FD 122 brclr 3,bitf,$ EC52 [04] 1789 123 bclr 3,bitf EC54 [05] 4E8B8D 124 mov upress,const 125 126 ;--------------------------- ИНДИКАЦИЯ сис,диа,пул 127 EC57 [04] 6E0B84 128 mov #!11,bcd100 ;$34 - код буквы "C" EC5A [04] 6E0C85 129 mov #!12,bcd10 EC5D [04] 6E0B86 130 mov #!11,bcd1 EC60 [04] 6E0083 131 mov #$0,adres EC63 [05] CDEEC1 132 jsr IND_RET ;Вывод на индикацию EC66 [04] 6E0D84 133 mov #!13,bcd100 ;Вывод "ДИА" EC69 [04] 6E0C85 134 mov #!12,bcd10 EC6C [04] 6E0E86 135 mov #!14,bcd1 EC6F [04] 6E4083 136 mov #$40,adres EC72 [05] CDEEC1 137 jsr IND_RET EC75 [04] 6E0F84 138 mov #!15,bcd100 ;Вывод "ПУЛ" EC78 [04] 6E1085 139 mov #!16,bcd10 EC7B [04] 6E1186 140 mov #!17,bcd1 EC7E [04] 6E4983 141 mov #$49,adres EC81 [05] CDEEC1 142 jsr IND_RET 143 144 ;---------------------------------------------- 145 146 147 ;---------- ИНДИКАЦИЯ 0 в разделе сис ------------------------------; 148 EC84 [04] 6E0A84 149 mov #$a,bcd100 ;Символ пробела EC87 [04] 6E0A85 150 mov #$a,bcd10 EC8A [04] 6E0386 151 mov #$03,bcd1 ;Символ "0" EC8D [04] 6E4683 152 mov #$46,adres ;Запись адреса EC90 [05] CDEEC1 153 jsr IND_RET EC93 [04] 1501 154 bclr 2,PTB EC95 [04] 1701 155 bclr 3,PTB EC97 [04] 6E0C03 156 mov #$c,PTD ;Включить дисплей 157 тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 4
Страницы: 1, 2, 3, 4
|
|