Реферат по предмету "Коммуникации и связь"


Разработка термометра с автоматическим контролем температуры на базе микроконтроллера AТ90S2313 с применением термостата DS1620

Курсовой проект
на тему:
«Разработка термометра с автоматическим контролемтемпературы
на базе микроконтроллера AТ90S2313 с применением термостатаDS1620»

Введение
Измерение, контроль ирегулирование температуры является одной из неотъемлемых и важных задач всовременном мире. Такая задача стоит и перед промышленностью, и перед сельскимхозяйством, и в быту и даже в области высоких технологий. В разных случаяхзадача регулирования температуры имеет свою индивидуальную цель и методрешения.
Регулирование температурыразличных газообразных, сыпучих и жидких сред, в том числе воздуха и водыявляется задачей и для дорожно–строительной отрасли промышленности. Примеромможет служить регулирование температуры приготовления битумной смеси, асфальта ит.д.
Возлагать на человеказадачу контроля и регулирования температуры технологических процессов в эпохувысоких компьютерных технологий просто не рационально. На помощь человекупришли различные цифровые датчики и регуляторы температуры с использованиеммикропроцессорной техники.
В данном курсовом проектерассматривается проектирование и создание цифрового регулятора температуры набазе микросхемы-термометра DS1620, который совмещает температурный датчик,схему управления и АЦП в одном кристалле, и микроконтроллера фирмы Atmel AT90S2313.

1. Анализ задачи. Выборкомпонентов
 
Наша задача состоит вподдержании температуры в заданном диапазоне значений. Коридор значенийтемпературы задается оператором с клавиатуры. На ЖКИ необходимо выводить данныео текущей температуре, о верхнем пределе и о нижнем пределе (поочередно, взависимости от выбранного оператором режима). Температурный датчик долженсообщать о нахождении температуры в заданном коридоре свечением светодиода наодном из своих выводов (Tcom). Также цифровой термостат будет осуществлятьуправление исполнительными устройствами (нагревателем и охладителем) подачейсигнала высокого уровня на соответствующие выводы (Thigh и Tlow). Одновременновключенными оба исполнительных механизма быть не должны. Задачи по управлениютермостатом, по выводу информации на ЖКИ, по обработке информации с термостатаи с клавиатуры оператора возлагаются на микроконтроллер.
1.1 Микроконтроллер
AT90S2313 — экономичный 8битовый КМОП микроконтроллер, построенный с использованием расширенной RISCархитектуры AVR. Исполняя по одной команде за период тактовой частоты,AT90S2313 имеет производительность около 1MIPS на МГц, что позволяетразработчикам создавать системы оптимальные по скорости и потребляемоймощности.
В основе ядраAVR лежит расширенная RISC архитектура, объединяющая развитый набор команд и 32регистра общего назначения. Все 32 регистра непосредственно подключены карифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрамза один машинный цикл.
Подобнаяархитектура обеспечивает десятикратный выигрыш в эффективности кода посравнению с традиционными CISC микроконтроллерами.
AT90S2313 предлагаетследующие возможности: 2кБ загружаемой флэш памяти; 128 байт EEPROM; 15 линийввода/вывода общего назначения; 32 рабочих регистра; настраиваемыетаймеры/счетчики с режимом совпадения; внешние и внутренние прерывания;программируемый универсальный последовательный порт; программируемый сторожевойтаймер со встроенным генератором; SPI последовательный порт для загрузкипрограмм; два выбираемых программно режима низкого энергопотребления. Холостойрежим (Idle Mode) отключает ЦПУ, оставляя в рабочем состоянии регистры,таймеры/счетчики, SPI порт и систему прерываний. Экономичный режим (Power DownMode) сохраняет содержимое регистров, но отключает генератор, запрещая функционированиевсех встроенных устройств до внешнего прерывания или аппаратного сброса.
Микросхемыпроизводятся с использованием технологии энергонезависимой памяти высокойплотности фирмы Atmel. Загружаемая флэш память на кристалле может бытьперепрограммирована прямо в системе через последовательный интерфейс SPI илидоступным программатором энергонезависимой памяти. Объединяя на одном кристаллеусовершенствованный 8-битовый RISC процессор с загружаемой флэш–памятью,AT90S2313 является мощным микроконтроллером, который позволяет создаватьдостаточно гибкие и эффективные по стоимости устройства. AT90S2313поддерживается полной системой разработки, включающей в себя макроассемблер,программный отладчик/симулятор, внутрисхемный эмулятор и отладочный комплект.

1.2 Цифровойдатчик-термометр DS1620
 
Для измерениятемпературы в цифровых устройствах необходимы температурный датчик, схемауправления и АЦП. Последние модели температурных датчиков совмещают этикомпоненты в одном кристалле.
МикросхемаDS1620 (Dallas RS218-3810) – это девятиразрядный термометр и термостат, служащийдля измерения и отображения температуры (рис. 1). Он имеет три выхода,которые используются при работе микросхемы в режиме термостата. Настройкивыходного сигнала можно запрограммировать и сохранить во внутреннейэнергонезависимой памяти. Устройство измеряет температуру от –55 до +12˚С шагом 0,5˚С, преобразованиезанимает 1 с.
/>

Передачаданных от микросхемы к внешнему устройству осуществляется по трехпроводнойпоследовательной шине: СLK/СОNV (контакт 2), DQ (контакт 1) и RЕSЕТ(контакт 3). Эти выходы совместимы с уровнями ТТЛ. Тhigt (контакт 7) – выходтриггера высокой температуры. Если температура превышает установленный верхнийпорог, то выход Тhigt сигнализирует об этом высоким уровнем и остается в такомсостоянии до тех пор, пока температура не упадет ниже заданного порога. Тlow(контакт 6) – выход триггера низкой температуры. Если температура опускаетсяниже определенного нижнего предела, то на нем появляется сигнал высокогоуровня, сохраняющийся до тех пор, пока температура не поднимется вышеуказанного предела. Тсоm (контакт 5) – это выход комбинированного триггера высокой инизкой температуры. Тсоm=1, когда температура превышает верхний предел, Тсоm=0, когда она опускаетсяниже нижнего предела. Контакты 4 и 8 соединены с отрицательным и положительнымпроводами источника питания. Потребляемый ток в режиме ожидания равен 1 мкА, врабочем режиме — 1 мА.
Управлениеустройством осуществляется в два этапа: сначала команды управленияпоследовательно загружаются в микросхему, а затем девятиразрядное число,соответствующее температуре, либо считывается, либо записывается. Микросхемаимеет девять команд:
1. Read temp (AАh): чтение значения регистра,содержащего результат последнего измерения.
2. Start conversion T (EЕh): запуск процессаизмерения температуры. Данные не передаются.
3. Stop convert T (22h): остановка измерения.Данные не передаются.
4. Write TH (01h): запись верхнего предела втриггер высокой температуры – 9 бит данных.
5. Write TL (01h): запись нижнего предела в триггервысокой температуры – 9 бит данных.
6. Read TH (A1h): чтение содержимоготриггера высокой температуры – 9 бит данных.
7. Read TL (A2h): чтение содержимоготриггера низкой температуры – 9 бит данных.
8. Write configuratioin (0Ch): запись настроечныхданных в регистр настройки – 8 бит данных.
9. Read configuratioin (ACh): чтение настроечныхданных из регистра настройки – 8 бит данных.
Настроечноеслово управляет режимами работы микросхемы DS1620. Оно сохраняется врегистре настройки. Функции битов регистра пиведены ниже:
DONETHF TLF XXX CPU 1SHOTX любое DONE 0 – идет преобразование 1 – преобразование завершено THF флаг высокой температуры. Если температура равна или выше верхнего предела, то бит ТНF=1. Он остается в единичном состоянии до тех пор, пока его не сбросят, записав ноль, или не отключат питание устройства TLF флаг низкой температуры. Если температура равна или ниже нижнего/предела, то бит ТLF=1. Он остается в единичном состоянии до тех пор, пока его не сбросят, записав ноль, или не отключат питание устройства CPU если СРU=0, то вход СLK/СОNV управляет началом цикла измерения; в противном случае микросхема работает в режиме обмена информацией с внешним устройством 1SHOT если 1SНОТ=1, микросхема производит один цикл измерения после поступления команды; в противном случае ИС настроена н непрерывное измерение температуры
Данные отемпературе имеют девятибитовый формат.
Дискретностьпредставления температуры равна 1/2˚С. Некоторые соотношения междузначениями температуры и выходными данными приведены ниже: +125˚С 0 11111010 (00FA) +25˚С 0 00110010 (0032) +1/2˚C 0 00000001 (0001)  0˚C 0 00000000 (0000) –1/2˚C 1 11111111 (00FF) –25˚С 1 11001110 (01CE) –55˚С 1 10010010 (0192)
Временныедиаграммы передачи данных представлены на рис 2. Передача начинается припоступлении положительного фронта на вход RST (контакт 3). Если наэтот вход подать 0, то передача прекращается. Процессами чтения и записиуправляет тактирующий вход микросхемы. Один тактовый цикл состоит изотрицательного фронта и следующего за ним положительного. При записи информациисостояние битов данных должно оставаться неизменным во время прохожденияположительного фронта. При считывании данные выводятся из устройства по каждомуотрицательному фронту тактовых импульсов. Когда на тактовом входе высокийуровень, выход DQ (контакт 1) имеет высокое сопротивление. При чтении данныхмладший бит передается первым. Через этот контакт можно как принимать, так ипередавать данные. Схема с использованием термометра DS1620, подключенного кэкспериментальной плате параллельного порта, приведена на рис. 3.
Посколькувывод DQ, может использоваться как для чтения, так и для записи, а на экспериментальной платепараллельного порта таких двунаправленных линий нет, необходимо применятьтранзистор. Базатранзистора соединена с тактом D1. Когда ИС настроена на прием информации, данные поступаютиз ком пьютера на контакт D1, а затем черезтранзистор в инверсном виде – на микросхему. Когда она передает информацию, транзистордолжен быть закрыт (это достигается подачей низкого уровня на его базу черезтот же контакт), и данные поступают на контакт S1. Входы СLК/СОNV и RSТ соединены с контактамиС1 и С2. Послепрохождения положительного фронта по входу RST микросхема настраиваетсяна прием управляющей информации. Необходимые данные считываются с линии С1под управлением тактовых импульсов. Если DS1620 настраивается навывод данных, то после загрузки в нее управляющей команды D1 переходит в нулевоесостояние, а биты данных последовательно выводятся под управлением тактовыхимпульсов и поступают на контакт S1. Если микросхема должна принимать данные,они также загружаются под управлением тактовых импульсов./> /> /> /> /> /> /> /> />

1.3Жидкокристаллический индикатор mt-10t7-7
Данныйиндикатор может отображать 10 знакомест с точкой. Любой сегмент любогознакоместа можно включать и выключать независимо от остальных сегментов.

/>/> 
/>
/>

Регистрыданных в БИС делятся на две тетрады: SGx(L) и SGx(H). Запись данных в знакоместо производится за два такта:сначала в младшую тетраду, затем в старшую. Младшая тетрада отвечает засегменты g,e, d, a, а старшая – за сегментыh, b, c, d. (см. рис.).
/>

Запись Нвызывает высвечивание соответствующего сегмента, а запись L- его гашение.
Контрастностьиндикатора зависит от напряжения питания модуля. Управление контрастностьюпроизводится подключением внешнего резистора на вывод V0.
Rвнеш.=0 – МАХконтрастность.
Rвнеш.=¥(нет резистора) –MIN контрастность.
/>

Описание интерфейса ЖКИмодуля
Сначала нашине выставляется адрес необходимого знакоместа, который фиксируется в регистреадреса при низком уровне на входе WRx (см.таблицу). Входы WR1 и ^WR2 защелкивают информацию,стоящую на шине, во внутренних регистрах статического типа. Внутри БИС этивходы объединены по схеме WR1 & ^WR2. Таким образом,информация запишется только при WR1 = “H” и ^WR2 = “L” одновременно. Такое решение осуществить функциюCS (выбор кристалла) прибольшом количестве модулей на шине, или если на шине имеются другие устройства.
При записиадреса знакоместа указатель тетрады сбрасывается в положение SGx(L). Запись данныхпроизводится в младшую тетраду при высоком уровне сигнала на входе А0 сигналом WRx. По этому же сигналууказатель тетрады данных переключается в положение SGx(H), сохраняя при этом тотже адрес знакоместа. Данные в старшую тетраду SGx(H) записываются аналогичномладшей тетраде SGx(L).После записи второй тетрады содержимое регистра адрема инкрементируется и можнозаписывать данные в следующее знакоместо без записи адреса.
По адресу 0Fh расположен триггерблокировки шины. Запись в него DB0=”L” вызывает блокировку записи в БИС адресов и данных на 30сигналов WRx. Разблокировка шины производится записью DB=”H” по адресу 0Fh.
После подачипитания содержимое регистров SGx не определено, поэтому при включении питаниянеобходимо делать программную очистку регистров. Состояние триггера блокировкитоже не определено, поэтому перед началом вывода информации на индикаторнеобходимо произвести разблокировку шины. Разблокировка шины производится записьюDB0=”H” по адресу 0Fh.
/>

/>
/>
/>
/>/>

2. Схемысопряжения (функциональная и принципиальная)
 
2.1Структурная схема
/>

2.2Принципиальная схема
 
/>

3.Алгоритм решения задачи
 
/>
/> /> /> /> /> /> /> /> />

/>


3. Разработка программы
Разработкапрограммы производится на языке Assembler c параллельной отладкойсредствами AVR Studio.
 

Вывод
 
В ходе даннойкурсовой работы был разработан цифровой регулятор температуры на базетермостата DS1620 и микроконтроллера AT90S2313 с рабочим диапазоном температур -55˚С до 125˚С. Поддерживаетсязаданная температура с помощью двух исполнительных органов: «нагревателя» и«охладителя». Текущая температура, а также значение верхнего и нижнего значениятемпературного коридора отображается на ЖКИ в градусах по Цельсию с точностью0,5˚С.
 

Списоклитературы.
 
1. Научно- техническийжурнал «Схемотехника» №2, 2001–2002 гг.
2. Пособие «Средствасопряжения с ПК»
3.Internet:
www.atmel.ru
www.telesys.users.ru
www.kulakov.ru
www.platan.ru
www.sensorsmag.com
www.ferrite.ru

Приложение: программа на языке Assembler
 
;*************************************************************************
;* Термостатна базе микроконтроллера AT90S2313 *
;* сиспользованием микросхемы термодатчика DS1620 *
;*************************************************************************
;*************************************************************************
;* Название:                 Цифровойрегулятор температуры
;* Датаразработки:     20.06.02
;* Объект:            AVRмикроконтроллер AT90S2313 и термостат DS1620
;* Автор:             БендюкМаксим Сергеевич
;*
;*
;*************************************************************************
.include«2313DEF.INC»
;*****Константы
.equpreset=192   ;T/C0 Preset constant (256-64)
.defresult=r16     ;Result and intermediate data
.def temp=r16     ; временныйрегистр
.def temp1=r17   ; временныйрегистр
.def temp2=r18   ; временныйрегистр
.def temp3=r19   ; временныйрегистр
.def ramsize=r19 ; размерблока
.def tmode=r22   ; Регистррежима
.def key=r20                 ; Регистрнажатой клавиши
.def keyc=r21      ; Счетчикдля прграммы обработки нажатия клавиши
.def    TMIN=r22; ячейкас содержимым минимальной температуры термостата
.def    TMINL=r22        ; младший
.def    TMINH=r23       ; старший
.def    TMAX=r24        ; ячейкас содержимым максимальной температуры термостата
.def    TMAXL=r24      ; младший
.def    TMAXH=r25     ; старший
.def    TNORM=r26      ; ячейкас содержимым текущей температуры термостата
.def    TNORML=r26   ; младший
.def    TNORMH=r27   ; старший
.equ   DLCD=$66         ; стартовыйадрес SRAM для буфера индикатора
; маладшаяячейка соответствует левому символу
; на дисплее
.def fbinL =r16; двоичноезначение, младший байт
.def fbinH =r17; двоичноезначение, старший байт
; биты портов
.equ K1      =3    ; битпервой кнопки
.equ K2      =4    ; битвторой кнопки
.equ K3      =5    ; биттретьей кнопки
.equ WR1   =5    ; битWR1
.equ WR2   =6    ; битWR2
.equ A0      =7    ; битA0
.equ DQ      =0    ; битDQ канал данных термостата
.equ CLK    =1    ; битCLK канал синхронизации данных
;*************************************************************************
;*
;* PROGRAMSTART — программа начинает выполняться с этого места
;*
;*************************************************************************
.cseg
.org$0000
rjmpRESET;Reset handle
.org$0020
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
;*************************************************************************
; настройкаконстант
SETCONST:
ldi     temp,20
mov  TMINL,temp
ldi     temp,0
mov  TMINH,temp
ldi     temp,25
mov  TMAXL,temp
ldi     temp,0
mov  TMAXH,temp
ret
;*************************************************************************
; передача констант
OUTCONST:
mov  temp,TMINl
mov  temp1,TMINH
ldi     temp2,2              ; записьнижней температуры
rcall   TERMOUT2
mov  temp,TMAXL
mov  temp1,TMAXH
ldi     temp2,1              ; записьнижней температуры
rcall   TERMOUT2
ldi     temp1,0xee;инициализация термостата
rcall   TERMOUT1
ret    
;*************************************************************************
; Натройкапортов ввода вывода
port_set:
ldi result,$ff         ;PORTBнастраивается на вывод
out DDRB,result; дляработы с индикатором
ldi result,$00      ; всебиты устанавливаются в ноль
out PORTB,result;PORTDнастраивается для работы
ldi result,0b01000011  ;с клавиатурой и
out DDRD,result; микросхемойтермометра
ldi result,0b11111001  ;с клавиатурой и
out PORTD,result        ; микросхемойтермометра
ret
;*************************************************************************
;*       очисткабуфера ЖКИ
CLRLCD:
ldi     ramsize,10 ; очисткабуфера индикатора
ldi     temp,0
ldi     ZH,high(DLCD)
ldi     ZL,low(DLCD)
clrlcdloop:
st       Z+,temp
dec    ramsize
brne  clrlcdloop  ; еслине закончили повторить
rjmp  LCDOUT
;*************************************************************************
; Выводсодержимого буфера на индикатор
LCDOUT:
ldi     temp,low(DLCD); установитьZ как указатель на буфер
mov  ZL,temp    ; индикатора
ldi     temp,high(DLCD)
mov  ZH,temp
ldi     ramsize,10
LCDOUT1:
mov  temp,ramsize      ; записьв индикатор адреса символа
andi   temp,0b00001111
out    PORTB,temp
cbi     PORTB,A0
sbi     PORTB,WR1
cbi     PORTB,WR1
ld      temp1,Z+  ;получить байт из DLCD
mov  temp,temp1
andi   temp,0b00001111        ; получить младшую тетраду
sbrs   temp,A0
out    PORTB,temp
sbi     PORTB,WR1
cbi     PORTB,WR1
mov  temp,temp1
swap temp
andi   temp,0b00001111        ; получить старшую тетраду
sbrs   temp,A0
out    PORTB,temp
sbi     PORTB,WR1
cbi     PORTB,WR1
dec    ramsize                ;
brne  LCDOUT1          ; еслине закончили повторить
ret
;*************************************************************************
;*       выводготовой строки в буфер и вывод буфера на ЖКИ
;* temp — номер строки
;* ramsize — количество выводимых символов
STRLCDD:
ldi     YH,high(tcstr)
ldi     YL,low(tcstr)
add    temp,temp
add    temp,temp
add    YL,temp
ldi     ramsize,4
;*************************************************************************
;*       выводготовой строки в буфер и вывод буфера на ЖКИ
;* Y — указатель на строку temp — положение
;* ramsize — количество выводимых символов
STRLCD:
ldi     ZH,high(DLCD)
ldi     ZL,low(DLCD)
strtolcdloop:
ld      temp,Y+
st       Z+,temp
dec    ramsize
brne  strtolcdloop        ; еслине закончили повторить
rjmp  LCDOUT
;*************************************************************************
;* получениеданных из термостата
;* temp2 — команда temp — первые 8 бит temp1 — 9-ый бит
TERMIN:
ldi     ramsize,8
terminloop:
sbi     PIND,DQ
sbrc   temp2,0
cbi     PIND,DQ
sbi     PIND,CLK
cbi     PIND,CLK
ror     temp2
dec    ramsize
brne  terminloop          ; еслине закончили повторить
ldi     ramsize,0x8
sbi     DDRD,DQ
termindloop:
sbi     PIND,DQ
sbrc   temp,0
cbi     PIND,DQ
sbi     PIND,CLK
cbi     PIND,CLK
ror     temp2
dec    ramsize
brne  termindloop                 ; еслине закончили повторить
sbi     PIND,DQ
sbrc   temp1,0
cbi     PIND,DQ
sbi     PIND,CLK
cbi     PIND,CLK
cbi     DDRD,DQ
ret
;*************************************************************************
;*       передачаодного байта данных на термостат
;*temp2 — команда
TERMOUT1:
ldi     ramsize,8
termout1loop:
sbi     PIND,DQ
sbrc   temp2,0
cbi     PIND,DQ
sbi     PIND,CLK
cbi     PIND,CLK
ror     temp2
dec    ramsize
brne  termout1loop               ; еслине закончили повторить
ldi     ramsize,0x8
ret
;*************************************************************************
;*       передачаодного байта данных на термостат и 9 бит
;* temp2 — команда temp — первые 8 бит temp1 — 9-ый бит
TERMOUT2:
ldi     ramsize,8
termout2loop:
sbi     PIND,DQ
sbrc   temp2,0
cbi     PIND,DQ
sbi     PIND,CLK
cbi     PIND,CLK
ror     temp2
dec    ramsize
brne  termout2loop               ; еслине закончили повторить
ldi     ramsize,0x8
termout2loopdat:
clc
sbi     PIND,CLK
sbic   PIND,DQ
sec
cbi     PIND,CLK
ror     temp2
dec    ramsize
brne  termout2loopdat          ; если не закончили повторить
ldi     temp1,0
sbi     PIND,CLK
sbic   PIND,DQ
ldi     temp1,1
cbi     PIND,CLK
cbi     DDRD,DQ
ret
;*************************************************************************
;*       получениекода нажатой клавиши если она нажата более 20 мс
;* код кнопкинаходится в регистре key если сброшен бит Z
KEYPRESS:
ldi     temp1,20   ; количествопопыток для гашения
; дребезга контактов
keyloop:
in      temp,PIND
andi   temp,0b00111000
breq  keynopress
sbic   PIND,K1
ldi     key,1
sbic   PIND,K2
ldi     key,2
sbic   PIND,K3
ldi     key,3
dec    temp1
brne  keyloop              ; еслине закончили повторить
keynopress:
and    key,key
ret
;*************************************************************************
;*       ожиданиеотпускания клавиши
KEYUP:
ldi     temp1,20   ; количествопопыток для гашения
; дребезга контактов
keyuloop:
in      temp,PIND
andi   temp,0b001110000
breq  unpress
dec    temp1
brne  KEYUP              ; еслине закончили повторить
unpress:
and    key,key
ret
;*************************************************************************
; программапереводит температуру в зависимости от режима
; и выводитна индикатор для индикации
;calckterm
outTmax:
mov  fbinL,TMAXL
mov  fbinH,TMAXH
rjmp  outterm
outTmin:
mov  fbinL,TMAXL
mov  fbinH,TMAXH
rjmp  outterm
calckterm:
mov  temp,tmode
rcall   STRLCD
mov  fbinL,TNORML
mov  fbinH,TNORMH
cpi     tmode,1
breq  outTmin
cpi     tmode,2     
breq  outTmax
ldi     temp,0xb
outterm:
ldi     ZH,high(DLCD+5)
ldi     ZL,low(DLCD+5)
ldi     temp2,0xb
sbrs   fbinH,0               
ldi     temp2,0x10
;                  ldi     temp3,0
;                  sub    temp3,temp2
;                  ror     temp3
st       Z+,temp2
inc     ZL
inc     ZL
ldi     temp2,5
sbrs   fbinL,0
ldi     temp2,0
st       Z+,temp2
ldi     fbinH,0
clc
ror     fbinL
rcall   bin16BCD5
mov  temp3,fbinH
mov  temp2,fbinL
swap temp2
andi   temp3,0xf
andi   temp2,0xf
andi   temp,0xf
rcall   getcod
mov  temp1,temp
set
bst     temp1,4
mov  temp,temp2
rcall   getcod
mov  temp2,temp
mov  temp,temp3
rcall   getcod
mov  temp3,temp
ldi     ZH,high(DLCD+6)
ldi     ZL,low(DLCD+6)
st       Z+,temp3
st       Z+,temp2
st       Z+,temp1
rcall   LCDOUT
;*************************************************************************
; программавозвращает код символа для индикатора
; значениеtemp заменяется на значение необходимое для отображения на
; индикатореи оно помещается назад в ячейку temp       
getcod:
ldi     ZH,high(LCDCG*2)
ldi     ZL,low(LCDCG*2);initZ-pointer
add    ZL,temp
lpm                      ;getconstant
mov  temp,r0
ret
;*************************************************************************
; данные дляотображения на индикаторе
LCDCG:                       ; тип            код
.DB 0xEE           ; число       0
.DB 0x60            ; число       1      
.DB 0x2F            ; число       2
.DB 0x6D           ; число       3
.DB 0xE1           ; число       4
.DB 0xCD          ; число       5
.DB 0xCF           ; число       6
.DB 0x68            ; число       7
.DB 0xEF           ; число       8
.DB 0xED           ; число       9
.DB 0x10            ; символ.    a
.DB 0x01            ; символ-    b
.DB 0x87            ; символt c
.DB 0x46            ; символu d
.DB 0x67            ; символd e
.DB 0x07            ; символc f
.DB 0x00            ; символblanck 10        пустой символ
; строка tc-
tcstr:
.DB0x0c,0x0f,0x0b,0x10
; строка tu-
tustr:
.DB0x0c,0x0d,0x0b,0x10
;cтрока td-
tdstr:
.DB0x0c,0x0e,0x0b,0x10
;*************************************************************************
;*
;* PROGRAMRESET — главная программа
;*
;*************************************************************************
RESET:
ldi     temp,low(RAMEND)
out    SPL,temp  ;настройка стека на верх памяти данных
rcallport_set      ; настроить порты
rcall   CLRLCD
;*************************************************************************
;*
;* mainloop — главный цикл программы
;*
;*************************************************************************
mainloop:
ldi     temp1,250
mov  r5,temp1
mainloop1:
rcall   KEYPRESS        ; определениянажатия кнопки
brne  keyis          ;переход если хотябы одна кнопка нажата
rjmp  returnin     ; возвратк основному цыклу
keyis:
ldi     temp1,250
mov  r5,temp1
cpi     temp,1
rcall   key1press
cpi     temp,2
rcall   key2press
cpi     temp,3
rcall   key3press
returnin:
ldi     temp1,0xaa         ;чтениее текущей температуры термостата
rcall   TERMIN
ldi     temp2,0xaa         ;инициализация термостата
rcall   TERMIN
mov  TNORML,temp
mov  TNORMH,temp1
rcall   calckterm   ;расчет температуры
dec    r5
brne  mainloop1 ;после ожиданжжия в течении минуты
ldi     tmode,0     ;возвратиться в основной режим
rjmp  mainloop
;*************************************************************************
;* обработкаклавиши режима
key1press:
and    tmode,tmode
brne  k1setmax
dec    tmode
rjmp  keyret
k1setmax:
ldi     temp,2
mov  tmode,temp
keyret:
rcall   calckterm
rjmp  KEYUP
;*************************************************************************
;* обработкаклавиши изменения значения вверх
key2press: 
cpi     tmode,1
brne  key2min
cpi     tmode,2
brne  key2max
rjmp  keyret
key2min:
sbrs   TMINH,0
rjmp  key2minm
inc     TMINL
brmi  key2mins
rjmp  keyret
key2mins:
ldi     TMINH,0
rjmp  keyret
key2minm:
cpi     TMINL,0xfa
brmi  keyret
inc     TMINL
rjmp  keyret
key2max:
sbrs   TMAXH,0
rjmp  key2maxm
inc     TMINL
brmi  key2maxs
rjmp  keyret
key2maxs:
ldi     TMAXH,0
rjmp  keyret
key2maxm:
cpi     TMAXL,0xfa
brmi  keyret
inc     TMAXL
rjmp  keyret
;*************************************************************************
;* обработкаклавиши изменения значения вниз
key3press: 
cpi     tmode,1
brne  key3min
cpi     tmode,2
brne  key3max
rjmp  keyret
key3min:
sbrc   TMINH,0
rjmp  key3minm
dec    TMINL
brmi  key3mins
rjmp  keyret
key3mins:
ldi     TMINH,1
rjmp  keyret
key3minm:
cpi     TMINL,0x92
brmi  keyret
dec    TMINL
rjmp  keyret
key3max:
sbrc   TMAXH,0
rjmp  key3maxm
dec    TMAXL
brmi  key3maxs
rjmp  keyret
key3maxs:
ldi     TMAXH,1
rjmp  keyret
key3maxm:
cpi     TMAXL,0x92
brmi  keyret
dec    TMAXL
rjmp  keyret
;*************************************************************************
;1. Текстпрограммы «bin16BCD5»- преобразование 16-битного двоичного
; значения вупакованный BCD формат
;*************************************************************************
;* Количествослов кода:25 + возврат
;* Количествоциклов:25/176 (Мин/Макс) + возврат
;*Использованные младшие регистры: нет
;*Использованные старшие регистры:4(fbinL,fbinH/tBCD0,tBCD1,tBCD2)
;*Использованные указатели: нет
;*************************************************************************
;*****Регистровые переменные подпрограммы
.def fbinL =r16; двоичноезначение, младший байт
.def fbinH =r17; двоичноезначение, старший байт
.def tBCD0 =r17;BCDзначение, цифры 1 и 0
.def tBCD1 =r18;BCDзначение, цифры 3 и 2
.def tBCD2 =r19;BCDзначение, цифра 4
; Примечание:Переменные fbinH и tBCD0 должны размещаться в одном
; регистре.
;***** Код
;*************************************************************************
bin16BCD5:
ldi tBCD2, -1
bin16BCD5_loop_1:
inctBCD2
subifbinL, low(10000)
sbcifbinH, high(10000)
brshbin16BCD5_loop_1
subifbinL, low(-10000)
sbcifbinH, high(-10000)
ldi tBCD1,-0x11
bin16BCD5_loop_2:
subitBCD1, -0x10
subifbinL, low(1000)
sbcifbinH, high(1000)
brshbin16BCD5_loop_2
subifbinL, low(-1000)
sbcifbinH, high(-1000)
bin16BCD5_loop_3:
inctBCD1
subifbinL, low(100)
sbcifbinH, high(100)
brshbin16BCD5_loop_3
subifbinL, -100
lditBCD0, -0x10
bin16BCD5_loop_4:
subitBCD0, -0x10
subifbinL, 10
brshbin16BCD5_loop_4
subifbinL, -10
addtBCD0, fbinL
ret
;*************************************************************************


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.