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

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

m1:

in r30,PinC ; программа опроса клавиатуры и флагов

ldi r31,FEh

cp r30,r31 ;если равно, то переходим на подпрограмму ввода

rcall vvod

ldi r31,FDh

cp r30,r31 ;если равно, то переходим на подпрограмму вывода

rcall vyvod

ldi r31,7Fh

cp r30,r31 ;если равно, то переходим на подпрограмму сброса

rcall sbros

sbrc USR,RxC ; проверяем если бит USR,RxC=1, то переходим на

подпрограмму приема данных от компьютера, если не

равен то пропускаем следующую команду

rcall priem ; подпрограмма приема данных, после своего окончания

работы она скидывает флаг USR,RxC

sbrs flagdan ; проверяем если 0, то переход на m2, если нет, то

пропускаем следующую команду

rjmp m2

sbrs flagpr

rjmp m2

rcall outdan ; подпрограмма выдачи данных на компьютер, после

выполнения выдачи данных сбрасывает флаг данных и

приемника

m2:

rjmp m1

init:

ldi r31,ramend ; указываем стек

out SPL,r31

ldi r31,ffh ; порт B настроить на вывод

out ddrb,r31

ldi r31, 00h ; Port С to ввод

out DDRС, r31

ldi r31,FFh ; подключаем резисторы

out PortС, r31

ldi tmp,00011101 ; инициализация UART

out UCR,tmp ; ldi tmp,25 ;9600 бит/сек при fclk=4МГц

out UBBR,tmp ;

;инициализация встроенного АЦП

set ADCSR.ADEN ;разрешаем работу АЦП

set ADCSR.ADFR ;устанавливаем режим циклического преобразования

ldi ADPS,05H ;устанавливаем тактовую частоту 125 KHz при

;внешнем кварце 4MHz

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

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

vvod:

rcall del ;делаем задержку

ldi r31,FEh ;проверяем есть ли действительно в регистре r30

указанные числа(таким образом устраняем дребезг

контактов)

cp r30,r31 ;если равно, то выполняем следующую программу

in r29,PinC ; программа опроса клавиатуры и флагов

ldi r31,FBh

cp r29,r31 ;если равно, то в r28 записываем адрес ячейки памяти

ldi r28,0060h

ldi r31,F7h

cp r29,r31

ldi r28,0070h

ldi r31,EFh

cp r29,r31

ldi r28,0080h

ldi r31,DFh

cp r29,r31

ldi r28,0090h

ldi r31,BFh

cp r29,r31

ldi r28,00A0h

rcall zapis

ret

vyvod:

rcall del ;делаем задержку

ldi r31,FDh ;проверяем есть ли действительно в регистре r30

указанные числа(таким образом устраняем дребезг

контактов)

cp r30,r31 ;если равно, то выполняем следующую программу

in r29,PinC ;программа опроса клавиатуры и флагов

ldi r31,FBh

cp r29,r31 ; если равно, то в r28 записываем адрес ячейки

ldi r28,0060h

ldi r31,F7h

cp r29,r31

ldi r28,0060h

ldi r31,ЕFh

cp r29,r31

ldi r28,0060h

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