Студентам > Курсовые > Разработка медицинского цифрового термометра
Разработка медицинского цифрового термометраСтраница: 3/5
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
;программа выдачи начального приглашения
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
;
|