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

Страница: 5/8

В блоке “Выдача на дисплей начального приглашения” выдаем на дисплей следующее сообщение «Кнопка1-режим ввода, кнопка2 – режим вывода, кнопки 3 - 7 – номера ячеек памяти, кнопка 8 - очистка памяти».

Блок опроса флагов: происходит постоянный опрос флагов, если какой-либо флаг установлен, то переходим на соответствующую подпрограмму обработки, которая после окончания своей работы возвращается в то место, откуда была вызвана и сбрасывает соответствующий флаг.

Программа опроса клавиатуры: постоянно опрашивает клавиатуру, и записывает ее состояние в заданный регистр1, как только в этом регистре1 появляется указанное число, она устанавливает Flagklav=1.

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

Подпрограмма выдачи на дисплей результата измерения активизируется когда установлен флаг Flagvyvod=1. В зависимости от содержания регистра1, выводим данные из той или иной ячейки памяти.

Подпрограмма записи данных активизируется когда установлен флаг Flagszap=1, и в зависимости от содержания регистра1, записываем данные в ту или иную ячейку памяти.

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

Подпрограмма выдачи данных на компьютер начинает выполнятся когда Flagdan=1 и flagpr=1, далее выполняется выдача данных на компьютер и сброс флагов происходит в том случае, если буфер с данными пуст.

2.2 РАЗРАБОТКА АЛГОРИТМА ОДНОГО ИЗ СОСТАВНЫХ ЧАСТЕЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Алгоритм инициализации ЖКИ представлен на рис.7.

Рис.7.

Программа инициализации ЖКИ составленная по данному алгоритму и написанная на языке Ассемблер будет выглядеть так:

initlcd:

rcall del

ldi r25,30h

rcall icom

rcall del

ldi r25,30h

rcall icom

rcall del

ldi r25,30h

rcall icom

ldi r25,38h ; устанавливаем разрядность шины данных=8,

количество строк =2, шрифт 5х7 точек

rcall icom

ldi r25,08h ; включить дисплей, зажечь курсор

rcall icom

ldi r25,01h ; очистить дисплей и установить курсор в нулевую позицию

rcall icom

ldi r25,06h; устанавливаем направление сдвига курсор в право, запретить

сдвиг дисплея вместе со сдвигом курсора

rcall icom

ret

del:

ldi r17,150 ;задержка ~15 ms при кварце 4 МГц

l: ldi r18,200 ;

l1: dec r18 ;

brne l1 ;

dec r17 ;

brne l ;

ret

icom:

in r0,portA

sbi r0,2 ; установит RS в 1

out portA,r0

in r0,portA

сbi r0,1 ; установит W/R в 0

out portA,r0

in r0,portA

sbi r0,0 ; установит Е в 1

out portC,r0

out portB,r25 ;записать в ЖКИ команду из регистра r25

in r0,portA

cbi r0,0 ;сбросить Е в 0

out portA,r0

in r0,portA

sbi r0,1 ; установит W/R в 1

out portA,r0

ret

2.3 НАПИСАНИЕ ПРОГРАММЫ

Текст программы составленный по структурной схеме на рис.6 приведен ниже

.include "Atmega103.inc"

.def flag=r1

.def flagszap =0

.def flagklav =1

.def flagsbr =2

.def flagvyvod =3

.def flagdan =4

.def flagpr =5

.def tmp=r20

.cseg

.org 0H

rjmp main

main:

rcall init ; инициализация контроллера

rcall initlcd ; инициализация ЖКИ

rcall priglashenie ;программа выдачи начального приглашения

Реферат опубликован: 4/04/2010