Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,09 Mb
  • Опубликовано:
    2010-12-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3

МО РФ

Новосибирский колледж электроники



 

 

 

 

КУРСОВОЙ ПРОЕКТ

По дисциплине микроконтроллеры

На тему: “Разработка ЦИФРОВОГО ИЗМЕРИТЕЛЯ КРОВЯНОГО ДАВЛЕНИЯ на микроконтроллере MC68HC908JL3”

Выполнил: Мамаев А.С.

Гр. 9Вт-454

Проверил: Брикман А.И.








2003

Содержание


Введение

1.       Техническое задание

2.       Выбор и обоснование элементной базы

2.1     Выбор микроконтроллера

3.       Структурная схема устройства

3.1     Состав и назначение отдельных элементов

3.2     Анализ ресурсов ввода-вывода

4.       Структура алгоритма программы

4.1     Обобщённая БСА

4.2     Рабочая БСА

4.2.1 БСА основной программы.

4.2.2 БСА обработчика прерывания от таймера

4.2.3 БСА обработчика прерываний от АЦП

4.2.4 БСА подпрограммы табличной перекодировки напряжение в давление

4.2.5 БСА подпрограммы вывода числа на индикацию

4.2.6 БСА подпрограммы перевода числа в BCD формат

5. Принципиальная схема устройства

Заключение         

Список литературы

Приложение

Введение.

С развитием микроэлектронной индустрии, а в частности с развитием микроконтроллеров, появилась возможность делать малогабаритные и сравнительно дешёвые электронные изделия.

На сегодняшний день, в каждой аптеке и специализированных магазинах, можно увидеть в продаже различные медицинские приборы. Например, цифровой термометр, цифровой измеритель давления крови и многое другое.

Появление таких приборов на прилавках магазинов, обусловлено прогрессивным развитием цифровой техники, в том числе и микроконтроллерных систем.

Микроконтроллеры позволяют меньше использовать типовые элементы в разработках, т.к. практически всё можно сделать программными средствами, тем самым электронные изделия сделанные на базе микроконтроллеров являются малогабаритными и стоят сравнительно не дорого.

В настоящее время, большая часть медицинских приборов построенна на цифровой логике, главным элементом которой является микроконтроллер, и индикация происходит на цифровых индикаторах, большую часть из которых составляют ЖКИ.

Поэтому, тема для разработки была выбранна: “Цифровой измеритель кровяного давления”. Этот прибор является наиболее нужным в каждой семье. Ведь если ты чувствуеш себя не важно, то в любой момент можно померить давление и из полученных результатов сделать вывод, надо бежать в больницу или нет.

1.Техническое задание

Устройство – цифровой измеритель кровяного давления.

Основные технические характеристики прибора:

1. Общий диапазон измерения:

а. Систолическое/диастолическое давление: от 0 до 250 мм.рт.ст.

б. Пульс: от 0 до 133 уд. в мин.

2. Минимальный шаг индикации: 1.5 мм.рт.ст.

3. Точность измерения:

а. Статическое давление: 3 мм.рт.ст.

б. Пульс: 5% показаний.

4. Индикатор: ЖКИ-модуль.

Информация о давлении и пульсе отображается на 16-ти разрядном, 2-х строчном ЖКИ-модуле.

Измерение происходит в полуавтоматическом режиме.

2. Выбор и обоснование элементной базы

В данном устройстве, информация о систолическом, диастолическом давлении и пульсе должна выводиться одновременно. С учётом всего этого, был выбран ЖКИ-модуль DV-16210NRB/R, который имеет две строки, по 16 разрядов в каждой строке.

Датчик давления в рассматриваемом устройстве, должен отвечать следующим требованиям:

1. Датчик должен быть со стандартным выходным сигналом, то есть при минимальном значении давления должен иметь выходной сигнал не более 0,3V, а при максимальном давлении не более 4,8V, это обеспечивает непосредственное соединение датчика с микроконтроллером.

2. Датчик должен измерять относительное давление(относительно атмосферы).

3. Максимальное измеряемое давление должно лежать в пределах от 30 кПа до 50 кПа, так как диапазон измерения систолического/диастолического давления составляет от 0 до 250 мм.рт.ст.

Взяв во внимание все эти 3-и пункта был выбран датчик давления фирмы MOTOROLA MPX5050DP.

2.1 Выбор микроконтроллера

Выбор микроконтроллера осуществляется с учётом следующих параметров:

1.   Линий ввода-вывода должно быть не менее 13, т.к. 11 линий необходимо для работы с индикатором, а две линии для работы с сигналами поступающими от датчика давления.

2.   Микроконтроллер должен иметь встроенный АЦП, для работы с аналоговыми сигналами поступающими от датчика давления MPX5050DP на входы АЦП микроконтроллера.

Поэтому, принимая во внимание, эти два главных параметра, был выбран маловыводной микроконтроллер фирмы MOTOROLA MC68HC908JL3.

3.   Структурная схема устройства

3.1 Состав и назначение отдельных элементов

Структурная схема устройства приведена на рис.3.1.1.

Основой устройства является микроконтроллер. Основная функция микроконтроллера, это прием данных от датчика и активного фильтра(АФ), обработка этих данных, т.е. вычисление систолического, диастолического давления и усреднённой частоты пульса. После того, как все измерения будут произведены, микроконтроллер выводит информацию на индикатор.

Датчик предназначен для перевода давления в манжете, в электрический сигнал, т.е. напряжение.

АФ высокой частоты предназначен для выделения и усиления сигнала, пульсирующего с частотой 1Гц, наложенного на медленно изменяющийся сигнал 0.04Гц. Выделение сигнала необходимо, потому что давление распознаётся по производной сигнала, пульсирующего с частотой 1Гц, а значение давления смотрится по медленно изменяющемуся сигналу (0,04Гц). Поэтому у микроконтроллера задействованы 2-а входа АЦП.

При разработке данного устройства существовала сложность в том, что датчик при неинвазивных применениях(без проникновения во внутренние полости организма) не может быть расположен непосредственно внутри системы, в которой измеряется давление. Поэтому пришлось разработать нестандартную систему измерений, в которой датчик помещается внутри манжеты, на которое наложены небольшие по амплитуде и более быстрые пульсации, соответствующее изменению давления в кровеносной системе.

С внешней стороной этого метода измерения давления крови, называемого осциллометрическим, знакомы практически все. При этом рука сжимается кольцевой надувной манжетой, накачиваемой вручную. Затем вентиль манжеты слегка приоткрывается, и давление в манжете постепенно падает, и, когда оно становится близким к артериальному давлению, амплитуда пульсации давления возрастает. Пульсации давления определяются работой сердца.

Когда давление в манжете изменяется от систолического до диастолического, пульсации давления достаточно велики, за границей этого диапазона они резко снижаются. Определить этот диапазон можно, прослушивая манжету с помощью стетоскопа, но, имея датчик давления, лучше превратить пульсации давления в электрический сигнал и далее анализировать его с помощью микропроцессорного устройства.

Такой электрический сигнал на протяжении всего времени измерения представлен на рис.3.1.2.а. Сначала идёт этап ручной подкачки манжеты(на рис.3.1.2.а. видны повышения давления при каждом нажатии груши), затем в момент t1 прекращается подкачка и открывается вентиль. Давление, которое в момент t1 превышает систолическое, постепенно понижается.

В то же время, как это видно из рис.3.1.2.а. на определённом участке пульсации давления растут, но относительная величина этих пульсаций очень невелика по сравнению с усреднённой величиной давления. Чтобы было удобно работать с сигналом пульсаций, необходимо отфильтровать низкочастотную усреднённую составляющую и усилить сигнал пульсаций. Это можно сделать с помощью активного фильтра на базе операционного усилителя (на структурной схеме АФ). Такой отфильтрованный и усиленный сигнал представлен на рис.3.1.2.б в диапазоне выделенном на рис.3.1.2.а прямоугольником.

Диаграммы рис.3.1.2. хорошо иллюстрируют основную идею измерения давления крови, которая сводится в получении и анализе данных, приходящих с датчика и активного фильтра.

Структурная схема устройства.

MCU

 

Индикатор

 

Датчик

 
 


 11

 

Рис.3.1.1.

Диаграммы измерения кровяного давления

Рис.3.1.2.

3.2 Анализ ресурсов ввода-вывода

Микроконтроллеры семейства HC08 фирмы MOTOROLA имеют закрытую архитектуру, которая характеризуется отсутствием линий магистралей адреса и данных на выводах корпуса микроконтроллера. Микроконтроллер представляет собой законченную систему обработки данных, наращивание памяти или периферийных устройств с использованием параллельных магистралей адреса и данных не предполагается. Поэтому анализ ресурсов ввода-вывода, должен происходить в самом начале разработки, т.к. в противном случае может возникнуть ситуация нехватки линий ввода-вывода.

На принципиальной схеме изображённой на рис.5.1. можно подсчитать, что у микроконтроллера должно быть не менее 13 линий ввода-вывода(11 линий для работы с ЖКИ-модулем и две линии для работы с датчиком давления).

В данном случае был выбран микроконтроллер MC68HC908JL3, который имеет 22 линии ввода-вывода. То есть, по сути дела у нас остаётся свободными, 9-ть линий ввода-вывода, которые можно использовать для различных усовершенствований прибора. Например, можно дополнительно в приборе сделать часы, также можно сделать, чтобы прибор измерял давление в автоматическом режиме, для этого необходим компрессор, который будет нагнетать давление в манжету. Все эти доработки непосредственно повлекут за собой, задействование дополнительных линий ввода-вывода.

4. Структура алгоритма программы

4.1 Обобщённая БСА

Обобщённая БСА программы, управляющей системой, приведена на рис.4.1.2. После включения питания происходит инициализация всей системы. После этого микроконтроллер ждёт накачки манжеты, осуществляя циклическую проверку окончания накачки. Когда сигнал датчика уменьшается в течении более чем 0,75 секунд, это свидетельствует, что пользователь больше не накачивает манжету, и микроконтроллер начинает анализировать сигнал колебания. Анализ сигнала колебания сводится к идентификации амплитуды пульса и осуществляется в блоках 3 и 4.

Пороговый уровень для измерения частоты импульсов установлен равным 1,75V, чтобы устранить шумы или всплески. Как только амплитуда пульса идентифицирована, микроконтроллер игнорирует сигнал в течении 450 мS, чтобы предотвратить ложную идентификацию из-за наличия промежуточного максимума колебания. После чего в блоке 5 происходит вычисление производной амплитуды пульса. Именно по производной амплитуды пульса определяется давление крови, блок 6.

Из графика показанного на рис.4.1.1., можно увидеть, что основной принцип измерения основан на сравнении производной с 2-мя порогами, Порог1 и Порог2. Более подробно, это будет рассмотрено в пункте 4.2.

График производной амплитуды пульса.

 

   Порог2

 

   Порог1

 


Рис.4.1.1.


          После того как устройство определит давление и пульс, оно проверяет, есть ошибки в измерении или нет. Если ошибки есть, то микроконтроллер выводит сообщение об ошибки, после чего, если манжета спущена, т.е. давление внутри манжеты равно атмосферному давлению, то устройство начинает измерение по новому. Если ошибок нет, то информация о давлении и пульсе выводится на индикатор, после чего система опять смотрит, если манжета спущена, то измерение давления происходит по новому, если манжета не спущена, то программа зациклевается и ждёт спуска манжеты.

 


2. Процедура ожидания окончания накачки манжеты

 
          

 

                                                    Y                            N

 




                                                            Y                                              N                                                                    

                                                       

 






                                     Y                                     N            

                                 

 

                          N                                                           Y

                  

 






                              Y                                                 

Рис.4.1.2. Обобщённая БСА.

4.2 Рабочая БСА

4.2.1 БСА основной программы

Рабочая БСА придставленна на рис.4.2.1.2..В начале программы происходит инициализация, блок 1, в котором происходит инициализация портов ввода-вывода, АЦП и таймера. После чего в блоке 2 обнуляются все переменные, задействованные в данной программе. Как только, это всё выполнится, происходит запуск АЦП(блок 4), у которого аналоговым входом является линия РТВ0.

Первый результат преобразования аналогового сигнала, заносится в ячейку памяти CONST, и означает значение кода при нулевом давлении. После этого на индикатор выводятся символы как показано на рис.4.2.1.1., и в младшем разряде “сис:” зажигается 0. После чего, идёт процедура ожидания окончания накачки манжеты.

 

                                       сис х х 0

                          диа х х х            пул х х х

рис.4.2.1.1. Расположение символов на индикаторе.

Она заключается в следующем. В ячейку памяти del заносится число соответствующее задержке 0,75 секунды( бл.12). В блоках 16 и 15 организован цикл, после выполнения которого, происходит индикация текущего давления (бл. 17 – 21). После чего делается декремент ячейки памяти del. Если del0 то, программа переходит к выполнению бл.13. и все происходит заново. Если del=0, то в бл.25. происходит сравнение давления до задержки и после задержки. Если давление после задержки больше давления до задержки, то программа переходит к выполнению бл.12. и данная процедура повторяется. Если же давление после задержки меньше давления до задержки, то это означает, что пользователь прекратил накачку манжеты, и программа переходит на процедуру определения амплитуды.

В начале процедуры, в блоке 30 происходит сравнение напряжения снимаемого с активного фильтра (вход РТВ1) с заданным порогом напряжения (1,75V). Если пороговое напряжение больше напряжения снимаемого с АФ, то программа зациклевается и ожидает когда напряжение с АФ будет больше порогового. Причём, если в течении 5 секунд программа находится в цикле, то измерение прекращается и выводится сообщение об ошибки. Если Upress1>Пор, то происходит сброс ячейки памяти OVSEC, и далее происходит определение значения амплитуды (бл. 33 – 37).

Как только, амплитуда будет определенна, происходит сброс и перезапуск таймера, а также обнуление SEC10 и SEC (бл. 38). После чего значение амплитуды заносится в ячейку памяти АМР2 (бл. 39). Далее АЦП переключается на вход РТВ0 (бл. 40), и результат второго преобразования заносится в UDAV (этот результат показывает давление в манжете), после чего АЦП обратно переключается на вход РТВ1. Как только АЦП переключится на вход РТВ1, ячейка памяти PULSE, в которой находится кол-во пульсаций, инкрементируется. А далее идет процедура вычисления производной амплитуды.

Производная вычисляется по формуле:

,

где, AMP1 и AMP2 – амплитуды;

time – время между амплитудами.

При первом входе в процедуру SB=0 (бл.50), вычисляется время импульса и заносится в ячейку памяти time1 (бл.52 – 55). После чего проверяется (бл.56), если первая амплитуда находится в АМР2, а вторая в АМР1, то они меняются местами (бл.57 – 59) и программа переходит на выполнение бл.29, т.е. определение амплитуды начинается сначала. Если первая амплитуда находится в АМР1, а вторая в АМР2, то ничего не происходит, и определение амплитуды начинается заново.

При последующем входе SB=1, в начале также определяется время импульса, но далее смотрится:

1. Если РВ=0, то значение времени заносится в time2, после чего из time2 вычитается time1, и РВ устанавливается в “1” (бл.64 – 66).

2. Если РВ=1, то значение времени заносится в time1, после чего из time1 вычитается time2, и РВ устанавливается в “0” (бл.61 – 63).

И в первом, и во втором случае, результат преобразования заносится в time3 (бл.67).

В блоке 68 происходит определение разности между АМР2 и АМР1. Далее в блоках 69 – 73 вычисляется производная. После чего программа переходит к процедуре определения давления.

Из графика показанного на рис.4.2.1.1. видно, что первая производная, которая больше порога ПОРОГ1 является определяющей для систолического давления, т.е. по ней определяют систолическое давление. Последующее производные, которые больше порога ПОРОГ1, но меньше порога ПОРОГ2 не являются определяющими и игнорируются. Когда производная будет больше порога ПОРОГ2, то она станет определяющей для диастолического давления. Поэтому в процедуре определения давления, сначала определяется систолическое давление (бл.75). Если давление определилось, то значение давления заносится в SIS, после чего бит QB устанавливается в “1” (бл.77,78), и идёт определение диастолического давления. Если давление не определилось, то бит QB не устанавливается, и далее происходит определение диастолического давления.

Как только диастолическое давление будет определенно (бл.76), его значение переносится в DIA (бл.79). После чего осуществляется проверка (бл.80), если SIS=0, то выводится сообщение об ошибки, после чего устройство ожидает спуска манжеты (бл.81), перед повторным измерением. Если SIS0, то идёт вычисление частоты пульса (бл.82 – 84) и далее происходит индикация давления и пульса (бл.85), после чего устройство опять ожидает спуск манжеты перед повторной накачкой.

Бит QB позволяет сначала определять систолическое давление, и только потом определять диастолическое давление, причём если систолическое давление определенно, то в последующем определяется только диастолическое давление.

 

1.INIT

 
 







 

7.UpressConst

 

8.Индикация символов

 
 





Рис.4.2.1.2.

 





















                                    

 

                

 










                                                                                              

 



Рис.4.2.1.2.(продолжение)

26.Acmp1

 

24.UpressA

 
                     

 


                                                       






                                                                                                              

32.Вывод сообщения об ошибки

 
 

                                                                                         

 








                                               

 


                             

 








                                                   


Рис.4.2.1.2.(продолжение)

 







                                                 

 





                                                                                   

 







53.Обнуление H:X

 
                                                                                      

 




63.Сброс Pb

 

66.Уст Pb в 1

 
                         

 









Рис.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:

1.   Если не был (ab2=0), то происходит сброс бита ab1, который выполняет аналогичную функцию, только показывает, был ли ранее у АЦП, аналоговый вход РТВ1. После чего происходит установка бита ab2 в 1 (бл.4), и запуск АЦП с аналоговым входом РТВ0 (бл.7). Далее программа выходит из обработчика.

2.   Если был (ab2=1), то в блоке 5 устанавливается бит СОСО1, сигнализирующий о том, что преобразование завершено, после чего результат из регистра данных АЦП переносится в ячейку памяти Upress, и происходит запуск АЦП с аналоговым входом РТВ0 (бл.7). После чего программа выходит из обработчика.

В случае когда аналоговым входом является линия РТВ1 (ab=1), всё происходит аналогично.

Бит ab2 и ab1 необходимы для корректной работы подпрограммы. То есть, если аналоговым входом является линия РТВ0, то при смене аналогового входа на РТВ1, первый результат преобразования окажется ложным, он не будет соответствовать значению сигнала на входе РТВ1. Поэтому чтобы этого не случилось, вводятся биты ab2 и ab1.

3.Сброс Ab1

 

5.Уст. СОСО1 в 1

 

9.Сброс Ab2

 

11.Уст.СОСО в 1

 

4.Уст. Ab2 в 1

 

6.ADRUpress

 

10.Уст. Ab1 в 1

 

12.ADRUpress1

 
 







RTI

 
 




Рис.4.2.3.1.

4.2.4 БСА подпрограммы табличной перекодировки напряжение в давление.

БСА подпрограммы табличной перекодировки напряжения в давление представленна на рис. 4.2.4.1.

В начале подпрограммы происходит сохранение регистров CPU в стеке (бл.1). Далее происходит вычисление истинного давления(бл.2), после чего результат проделанной операции заносится в Udav (бл.3). В блоке 4 происходит загрузка числа в регистр Х, затем следует команда табличной перекодировки ( бл.5), где TCP – начало таблицы перекодировки. После чего, в блоке 6, перекодированное число заносится в Udav, в блоке 7 восстанавливаются из стека регистры CPU, и программа выходит из обработчика.

1.Загрузить в стек регистры CPU

 

2.Udav  - CONST

 

3.Рез.Udav

 

4.UdavX

 

5.LDA TCP,X

 

6.ADav

 

RTS

 
 



















Рис.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 происходит проверка:

1. Если число больше 99, то в блоке 3 происходит деление числа на 100, в результате этой операции, целое частное помещается в аккумулятор, а остаток деления в регистр H. Целое частное – это сотни числа, поэтому они заносятся в ячейку памяти BCD100 (бл.4), после чего остаток загружается в аккумулятор (бл.5), и делится на 10 (бл.6). В результате этой операции, в аккумуляторе получаются десятки числа, которые заносятся в BCD10 (бл.7), а остаток числа показывает единицы и заносится в BCD1 (бл.8).

2. Если число меньше 99, то оно проверяется в блоке 2, если оно меньше 9, то в ячейку памяти BCD100,BCD10 записывается код пробела (бл. 11,12), после чего данное число записывается в BCD1 (бл.13). Если оно больше 9, то число записывается в аккумулятор (бл.9), в ячейку памяти BCD100 записывается код пробела, после чего происходит деление числа на 10 (бл.6) и далее всё происходит как в пункте 1, только начиная с блока 6.

3.  

 



















Рис.4.2.6.1.

5. Принципиальная схема устройства

Принципиальная схема устройства изображена на рис.5.1.

Заключение

Обратите внимание на принципиальную схему прибора, в ней как видно минимум элементов. Это объясняется применением в схеме, микроконтроллера. Причем всё измерение осуществляется в полуавтоматическом режиме и происходит в микроконтроллере. Тем самым пользователь прикладывает минимум усилий для измерения своего давления.

Таким образом применение микропроцессорных систем в устройствах различного типа, позволяет сократить кол-во элементов в схеме, сделать устройство более качественным, а также позволяет осуществить наиболее “дружелюбный” интерфейс с пользователем.

Программа для данного устройства была написана на ассемблере CASM08, оттранслированна и отлажена на ICS08JL, листинг программы приведён в приложении.

Список литературы

1. Панфилов Д.И. Датчики фирмы MOTOROLA. Москва. ДОДЭКА. 2000. 96 с.

2. БЭК. Жидкокристалические индикаторы фирмы DATA INTERNATIONAL. Москва. 1999. 64 с.

3. Technical Data. MC68HC908JL3.

4. Technical Data. MPX5050DP.

Приложение

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 1

0000                   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  ;Установка режима ввода

                                                                         

                                                     стробирующего импульса

 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

                      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 7

ED58 [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 

291 ;---------------------------------------------

292  

                      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

                      379 

                      380  ;------ Проверка спущена манжета или нет ---------

 EE1E [04] C7FFFF     381          sta     $ffff

 EE21 [04] 1189       382          bclr    0,bitf

 EE23 [04] 1789       383          bclr    3,bitf

 EE25 [05] 0789FD     384          brclr   3,bitf,$  ;Если COCO1=0 происходит зациклевание

 EE28 [03] B68B       385          lda     upress

 EE2A [02] A105       386          cmp     #!5

 EE2C [03] 22F0       387          bhi     exitdav

 EE2E [03] CCEC39     388          jmp     main

                      389 

                      390  ;------------------------------------------------;

                      391 

                      392 

                      393 

                      394 

                      395 

                      396  ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                      397 

                      398 

                      399  ADC_INT:   ; обработчик прерывания от АЦП

 EE31 [02] 8B         400                  pshh

 EE32 [05] 018913     401                  brclr   0,bitf,adm1 ;если ав=0

то переход на adm1

 EE35 [05] 038907     402                  brclr   1,bitf,adm2 ;переход если ав1=0

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 10

EE38 [04] 1889       403                  bset    4,bitf

 EE3A [05] 4E3D8A     404                  mov     ADR,upress1

 EE3D [03] 2004       405                  bra     zap

                      406  adm2:

 EE3F [04] 1589       407                  bclr    2,bitf          ;сброс ав2

 EE41 [04] 1289       408                  bset    1,bitf          ;уст. ав1

                      409  zap:

 EE43 [04] 6E413C     410                  mov     #$41,ADSCR     ;команда

запуска АЦП вход PTB1

                      411 

 EE46 [03] 2011       412                  bra     exit

                      413  adm1:

 EE48 [05] 058907     414                  brclr   2,bitf,adm3   ;переход  если ав2=0

 EE4B [04] 1689       415                  bset    3,bitf

 EE4D [05] 4E3D8B     416                  mov     ADR,upress

 EE50 [03] 2004       417                  bra     zap1

                      418  adm3:

 EE52 [04] 1389       419                  bclr    1,bitf         ; сброс ав1

 EE54 [04] 1489       420                  bset    2,bitf         ; уст. ав2

                      421  zap1:

 EE56 [04] 6E403C     422                  mov     #$40,ADSCR    ;команда

запуска АЦП вход PTB0

                      423  exit:

 EE59 [02] 8A         424                  pulh

 EE5A [07] 80         425                  rti

                      426 

                      427 

                      428 

                      429  ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                      430 

                      431  timer_int:       ;Обработчи прерывания от таймера

 EE5B [04] 1F20       432                  bclr    7,TSC      ;Сброс TOF

 EE5D [04] 3C9A       433                  inc     sec10

 EE5F [03] B69A       434                  lda     sec10

 EE61 [02] A109       435                  cmp     #$9

 EE63 [03] 250E       436                  blo     exittime   ;Если sec10>9 то перхода нет

 EE65 [03] 3F9A       437                  clr     sec10

 EE67 [04] 3C99       438                  inc     sec

 EE69 [04] 3C95       439                  inc     ovsec

 EE6B [03] B695       440                  lda     ovsec

 EE6D [02] A105       441                  cmp     #!5

 EE6F [03] 2502       442                  blo     exittime

 EE71 [04] 1A89       443                  bset    5,bitf

                      444  exittime:

 EE73 [07] 80         445                  rti

                      446 

                      447 

                      448  ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

                      449 

                      450 

                      451  VOLTS_PRESSURE_RET:    ;подпрограмма табличной перекодировки напр. в давление

                      452                         ;число для перекодир

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 11

                      453                             ;начало таблицы -TCP

 EE74 [02] 87         454                  psha

 EE75 [02] 8B         455                  pshh

 EE76 [02] 89         456                  pshx

                      457 

 EE77 [03] B68C       458                  lda     udav

 EE79 [03] B08D       459                  sub     const   ;const- напряжение

                                                         при нулевом давлении

 EE7B [01] 97         460                  tax

 EE7C [04] D6EF14     461                  lda     TCP,x

 EE7F [03] B78E       462                  sta     dav     ;перекодированное

                                                           число в dav

                      463 

 EE81 [02] 88         464                  pulx

 EE82 [02] 8A         465                  pulh

 EE83 [02] 86         466                  pula

 EE84 [04] 81         467                  rts

                      468 

                      469 

                      470 

                      471 

                      472  ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

                      473 

                      474 

                      475 

                      476 

                      477  BCD_RET: ;подпрограмма перевода числа в BCD формат

                      478               ;число для перевода находится в "y"

                      479                                  ;BCD100 - сотни

                      480                                  ;BCD10 - десятки

                      481                                  ;BCD1 - единицы

                      482 

 EE85 [02] 87         483                  psha

 EE86 [02] 8B         484                  pshh

 EE87 [02] 89         485                  pshx

                      486 

 EE88 [03] B68F       487                  lda     y          ;Делимое в

                                                               аккумулятор

 EE8A [02] A163       488                  cmp     #!99

 EE8C [03] 2206       489                  bhi     bcd100m    ;если y>99 то переход на bcd100m

 EE8E [02] A109       490                  cmp     #!9

 EE90 [03] 2210       491                  bhi     bcd10m     ;если y>9 то переход на bcd10m

 EE92 [03] 2020       492                  bra     bcd1m

                      493  bcd100m:

 EE94 [02] AE64       494                  ldx     #!100      ;100-делитель

 EE96 [07] 52         495                  div

 EE97 [03] B784       496                  sta     BCD100     ;Результат в BCD100

 EE99 [04] 35A4       497                  sthx    pmem1

 EE9B [03] 450000     498                  ldhx    #!0

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 12

EE9E [03] B6A4       499                  lda     pmem1     ;Остаток в

                                                             аккумулятор

 EEA0 [03] 2003       500                  bra     mb1

                      501  bcd10m:

 EEA2 [04] 6E0A84     502                  mov     #$a,BCD100 ;Пробел в BCD100

                      503  mb1:

 EEA5 [02] AE0A       504                  ldx     #!10        ;10-делитель

 EEA7 [07] 52         505                  div                 ;Делим остаток на 10

 EEA8 [03] B785       506                  sta     BCD10       ;Результат в BCD10

 EEAA [04] 35A4       507                  sthx    pmem1

 EEAC [03] 450000     508                  ldhx    #!0

 EEAF [05] 4EA486     509                  mov     pmem1                                   BCD1

 EEB2 [03] 200C       510                  bra     exitb

                      511  bcd1m:

 EEB4 [04] 6E0A84     512                  mov     #$a,BCD100      ;Пробел в      BCD100

 EEB7 [04] 6E0A85     513                  mov     #$a,BCD10       ;Про         BCD10

 EEBA [05] 4E8F86     514                  mov     y,BCD1

                      515 

                      516 

 EEBD [02] 88         517                  pulx

 EEBE [02] 8A         518                  pulh

 EEBF [02] 86         519                  pula

 EEC0 [04] 81         520  exitb:          rts

                      521 

                      522 

                      523 

                      524 

                      525 

                      526  ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

                      527 

                      528 

                      529 

                      530  IND_RET:   ;Подпрограмма для вывода числа на индикацию

                      531             ;для подпрограммы необходимо:

                      532             ;- число или символ для индикации

                      533                                          ;(BCD100,BCD

                                                                       10,BCD1)

                      534              ;- адрес ячейки в индикаторе

 EEC1 [02] 87         535                  psha

 EEC2 [02] 8B         536                  pshh

 EEC3 [02] 89         537                  pshx

                      538 

 EEC4 [04] 6E0388     539                  mov     #$3,ci

 EEC7 [04] 6E8087     540                  mov     #$80,indx   ;заместо ind поставить адрес!!!!!!!!!!!!!!!!!

 EECA [04] 6E84A3     541                  mov     #$84,bcdx   ;адрес bcd100 в bcdx

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 13

EECD [03] BE84       542                  ldx     BCD100

                      543  stind:

 EECF [04] D6EFAE     544                  lda     TCI,x  ;TCI-началотаблицы перекодировки

 EED2 [04] 3CA3       545                  inc     BCDX

 EED4 [03] BE87       546                  ldx     indx

 EED6 [02] F7         547                  sta     ,x    ;Результат перекодировки в ячейку памяти с                       регистре Х

 EED7 [04] 3C87       548                  inc     indx   ;передвегаемся по ячейкам IND

 EED9 [04] 1501       549                  bclr    2,PTB            ;уст. в 0

                                                                           PTB2

 EEDB [04] 1701       550                  bclr    3,PTB

 EEDD [05] 4E8303     551                  mov     adres,PTD        ;Адрес

знакоместа в порт PTD

 EEE0 [04] 1801       552                  bset    4,PTB

 EEE2 [01] 9D         553                  nop

 EEE3 [01] 9D         554                  nop

 EEE4 [01] 9D         555                  nop       ;Формирование стробирующего импульса

 EEE5 [01] 9D         556                  nop

 EEE6 [01] 9D         557                  nop

 EEE7 [04] 1901       558                  bclr    4,PTB

 EEE9 [04] AD1D       559                  bsr     deleysret ;задержка 30mkc

 EEEB [04] 1401       560                  bset    2,PTB

 EEED [04] 1701       561                  bclr    3,PTB

 EEEF [04] 7E03       562                  mov     x+,PTD    ;Вывод числа на индикацию

 EEF1 [04] 1801       563                  bset    4,PTB

 EEF3 [01] 9D         564                  nop

 EEF4 [01] 9D         565                  nop      ;Формирование стробирующего импульса

 EEF5 [01] 9D         566                  nop

 EEF6 [01] 9D         567                  nop

 EEF7 [01] 9D         568                  nop

 EEF8 [04] 1901       569                  bclr    4,PTB

 EEFA [04] AD0C       570                  bsr     deleysret ;задержка 30mkc

 EEFC [04] 3C83       571                  inc     adres     ;Подготовка

                                                     к следующему циклу

 EEFE [03] BEA3       572                  ldx     BCDX             ;----

 EF00 [02] FE         573                  ldx     ,x               ;--------

 EF01 [05] 3B88CB     574                  dbnz    ci,stind   ;Если все числа выведены то выходим из подрограммы

                      575 

 EF04 [02] 88         576                  pulx

 EF05 [02] 8A         577                  pulh

 EF06 [02] 86         578                  pula

 EF07 [04] 81         579                  rts

                      580 

                      581  ;\\\\\\ Подпрограмма задержки на 30 мкС\\\\\\\\\\\

                      582 

                      583  deleysret:

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 14

                      584 

                      585 

                      586 

 EF08 [02] 87         587                  psha

 EF09 [02] 8B         588                  pshh

 EF0A [02] 89         589                  pshx

                      590 

 EF0B [02] A61E       591                  lda     #!30

                      592  loopdel:

 EF0D [01] 4A         593                  deca

 EF0E [03] 26FD       594                  bne     loopdel

                      595 

 EF10 [02] 88         596                  pulx

 EF11 [02] 8A         597                  pulh

 EF12 [02] 86         598                  pula

 EF13 [04] 81         599                  rts

                      600 

                      601  ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

                      602 

                      603  ;/////Таблица перекодировки для давлен ////////

                      604 

                      605  TCP:

                      606 

 EF14      00         607                  db      !0

 EF15      01         608                  db      !1

 EF16      03         609                  db      !3

 EF17      05         610                  db      !5

 EF18      06         611                  db      !6

 EF19      08         612                  db      !8

 EF1A      0A         613                  db      !10

 EF1B      0B         614                  db      !11

 EF1C      0D         615                  db      !13

 EF1D      0F         616                  db      !15

 EF1E      10         617                  db      !16

 EF1F      12         618                  db      !18

 EF20      14         619                  db      !20

 EF21      15         620                  db      !21

 EF22      17         621                  db      !23

 EF23      19         622                  db      !25

 EF24      1A         623                  db      !26

 EF25      1C         624                  db      !28

 EF26      1E         625                  db      !30

 EF27      1F         626                  db      !31

 EF28      21         627                  db      !33

 EF29      23         628                  db      !35

 EF2A      24         629                  db      !36

 EF2B      26         630                  db      !38

 EF2C      28         631                  db      !40

 EF2D      29         632                  db      !41

 EF2E      2B         633                  db      !43

 EF2F      2D         634                  db      !45

 EF30      2E         635                  db      !46

 EF31      30         636                  db      !48

 EF32      32         637                  db      !50

 EF33      33         638                  db      !51

 EF34      35         639                  db      !53

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 15

EF35      37         640                  db      !55

 EF36      38         641                  db      !56

 EF37      3A         642                  db      !58

 EF38      3C         643                  db      !60

 EF39      3D         644                  db      !61

 EF3A      3F         645                  db      !63

 EF3B      41         646                  db      !65

 EF3C      42         647                  db      !66

 EF3D      44         648                  db      !68

 EF3E      46         649                  db      !70

 EF3F      47         650                  db      !71

 EF40      49         651                  db      !73

 EF41      4B         652                  db      !75

 EF42      4C         653                  db      !76

 EF43      4E         654                  db      !78

 EF44      50         655                  db      !80

 EF45      51         656                  db      !81

 EF46      53         657                  db      !83

 EF47      55         658                  db      !85

 EF48      56         659                  db      !86

 EF49      58         660                  db      !88

 EF4A      5A         661                  db      !90

 EF4B      5B         662                  db      !91

 EF4C      5D         663                  db      !93

 EF4D      5F         664                  db      !95

 EF4E      60         665                  db      !96

 EF4F      62         666                  db      !98

 EF50      64         667                  db      !100

 EF51      65         668                  db      !101

 EF52      67         669                  db      !103

 EF53      69         670                  db      !105

 EF54      6A         671                  db      !106

 EF55      6C         672                  db      !108

 EF56      6E         673                  db      !110

 EF57      6F         674                  db      !111

 EF58      71         675                  db      !113

 EF59      73         676                  db      !115

 EF5A      74         677                  db      !116

 EF5B      76         678                  db      !118

 EF5C      78         679                  db      !120

 EF5D      79         680                  db      !121

 EF5E      7B         681                  db      !123

 EF5F      7D         682                  db      !125

 EF60      7E         683                  db      !126

 EF61      80         684                  db      !128

 EF62      82         685                  db      !130

 EF63      83         686                  db      !131

 EF64      85         687                  db      !133

 EF65      87         688                  db      !135

 EF66      88         689                  db      !136

 EF67      8A         690                  db      !138

 EF68      8C         691                  db      !140

 EF69      8D         692                  db      !141

 EF6A      8F         693                  db      !143

 EF6B      91         694                  db      !145

 EF6C      92         695                  db      !146

 EF6D      94         696                  db      !148

 EF6E      96         697                  db      !150

тонометр.asm           Assembled with CASM08Z  25.02.03  9:58:45  PAGE 16

 EF6F      97         698                  db      !151

 EF70      99         699                  db      !153

 EF71      9B         700                  db      !155

 EF72      9C         701                  db      !156

 EF73      9E         702                  db      !158

 EF74      A0         703                  db      !160

 EF75      A1         704                  db      !161

 EF76      A3         705                  db      !163

 EF77      A5         706                  db      !165

 EF78      A6         707                  db      !166

 EF79      A8         708                  db      !168

 EF7A      AA         709                  db      !170

 EF7B      AB         710                  db      !171

 EF7D      AF         712                  db      !175

 EF7E      B0         713                  db      !176

 EF7F      B2         714                  db      !178

 EF80      B4         715                  db      !180

 EF81      B5         716                  db      !181

 EF82      B7         717                  db      !183

 EF83      B9         718                  db      !185

 EF84      BA         719                  db      !186

 EF85      BC         720                  db      !188

 EF86      BE         721                  db      !190

 EF87      BF         722                  db      !191

 EF88      C1         723                  db      !193

 EF89      C3         724                  db      !195

 EF8A      C4         725                  db      !196

 EF8B      C6         726                  db      !198

 EF8C      C8         727                  db      !200

 EF8D      C9         728                  db      !201

 EF8E      CB         729                  db      !203

 EF8F      CD         730                  db      !205

 EF90      CE         731                  db      !206

 EF91      D0         732                  db      !208

 EF92      D2         733                  db      !210

 EF93      D3         734                  db      !211

 EF94      D5         735                  db      !213

 EF95      D7         736                  db      !215

 EF96      D8         737                  db      !216

 EF97      DA         738                  db      !218

 EF98      DC         739                  db      !220

 EF99      DD         740                  db      !221

 EF9A      DF         741                  db      !223

 EF9B      E1         742                  db      !225

 EF9C      E2         743                  db      !226

 EF9D      E4         744                  db      !228

 EF9E      E6         745                  db      !230

 EF9F      E7         746                  db      !231

 EFA0      E9         747                  db      !233

 EFA1      EB         748                  db      !235

 EFA2      EC         749                  db      !236

 EFA3      EE         750                  db      !238

 EFA4      F0         751                  db      !240

 EFA5      F1         752                  db      !241

 EFA6      F3         753                  db      !243

 EFA7      F5         754                  db      !245

 EFA8      F6         755                  db      !246

тонометр.asm Assembled with CASM08Z 25.02.03 9:58:45 PAGE 17

EFA9      F8         756                  db      !248

 EFAA      FA         757                  db      !250

 EFAB      FB         758                  db      !251

 EFAC      FD         759                  db      !253

 EFAD      FF         760                  db      !255

                      761 

                      762 

                      763  ;//////////////////////////////////////////////

                      764 

                      765  ;////////// Таблица перекодировки для индикации //

                      766 

                      767  TCI:

 EFAE      03         768                 db       $03       ;0

 EFAF      13         769                 db       $13       ;1

 EFB0      23         770                 db       $23       ;2

 EFB1      33         771                 db       $33       ;3

 EFB2      43         772                 db       $43       ;4

 EFB3      53         773                 db       $53       ;5

 EFB4      63         774                 db       $63       ;6

 EFB5      73         775                 db       $73       ;7

 EFB6      83         776                 db       $83       ;8

 EFB7      93         777                 db       $93       ;9

 EFB8      02         778                 db       $02       ;Пробел

 EFB9      34         779                 db       $34       ;С

 EFBA      5A         780                 db       $5a       ;И

 EFBB      0E         781                 db       $0e       ;Д

 EFBC      14         782                 db       $14       ;А

 EFBD      8A         783                 db       $8a       ;П

 EFBE      9A         784                 db       $9a       ;У

 EFBF      7A         785                 db       $7a       ;Л

 EFC0      F4         786                 db       $f4       ;О

 EFC1      CA         787                 db       $ca       ;Ш

 EFC2      0A         788                 db       $0a       ;Б

 EFC3      B4         789                 db       $b4       ;К

                      790 

                      791  ;///////////////////////////////////////////////////

                                        ///////////////////////////////////////

                      792 

                      793 

 FFDE                 794                  org     $ffde

 FFDE      EE31       795                  dw      ADC_INT  ;Векторпрерывания

                                                             для АЦП

 FFF2                 796                  org     $fff2

 FFF2      EE5B       797                  dw      timer_int;Векторпрерывания

                                                            для таймера

 FFFE                 798                  org     $fffe

 FFFE      EC00       799                  dw      start   ;Вектор сброса

                      800  

Symbol Table

ADC_INT          EE31

ADICLK           003E

ADM1             EE48

ADM2             EE3F

ADM3             EE52

тонометр.asm           Assembled with CASM08Z  25.02.03  9:58:45  PAGE 18

ADR              003D

ADRES            0083

ADSCR            003C

AMP1             0098

AMP2             0097

AMPMET           ECD4

BCD1             0086

BCD10            0085

BCD100           0084

BCD100M          EE94

BCD10M           EEA2

BCD1M            EEB4

BCDX             00A3

BCD_RET          EE85

BITF             0089

BITF1            0091

CBM              ED42

CI               0088

CMP1             0092

CMPAD            0096

CONFIG1          001F

CONFIG2          001E

CONST            008D

DAV              008E

DDRA             0004

DDRB             0005

DDRD             0007

DEL              0093

DELEYSRET        EF08

DIA              00A1

DVBM             ECE2

EXIT             EE59

EXITB            EEC0

EXITDAV          EE1E

EXITTIME         EE73

IND              0080

INDX             0087

IND_RET          EEC1

KBIER            001B

KBSCR            001A

LOOP             EC9D

LOOP1            ECA4

LOOP11           ED57

LOOP2            ECA0

LOOP20           ED53

LOOPAMP          ECF8

LOOPDEL          EF0D

LOP              ECC7

M55              ECED

MAIN             EC39

MB1              EEA5

MTIME            ED73

OVSEC            0095

PDCR             000A

PEREM            ED4D

PMEM1            00A4

POR              0094

PR1              009E

тонометр.asm           Assembled with CASM08Z  25.02.03  9:58:45  PAGE 19

PR2              00A0

PR2M             EDAA

PROIM            ED2F

PTA              0000

PTAPUE           000D

PTB              0001

PTD              0003

PUL              00A2

PULSE            0090

RAZNOM           ED8E

RM               ECEA

RORM             EDFC

SBM              EC3D

SEC              0099

SEC10            009A

SIS              009F

START            EC00

STIND            EECF

TCI              EFAE

TCNTH            0021

TCNTL            0022

TCP              EF14

TIME1            009B

TIME2            009C

TIME2M           ED88

TIME3            009D

TIMER_INT        EE5B

TMODH            0023

TMODL            0024

TSC              0020

UDAV             008C

UPRESS           008B

UPRESS1          008A

VOLTS_PRESSURE_R EE74

Y                008F

ZAP              EE43

ZAP1             EE56

Похожие работы на - Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!