Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1575

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

;Программа управления температурой

.NOLIST

.INCLUDE "8535def.inc"

.LIST

;определить символические имена

.DEF

templar 16

.DEF

temph = rl7

.DEF

saveF = r4

.DEF

counT = rl8

.DEF

rcnt = r!9

.EQU

Mind = 0x100

; RAM для кодов индикации

.EQU

Made - 0x090

; RAM для кода АЦП

.CSEG

; вектора прерываний

.ORG $000

rjmp

ink

; прерывание по reset

rjmp

key_cnt

; прерывание intO

.ORG $009

rjmp

cycle ; прерывание таймера 0 для запуска цикла

rjmp

spistc

; прерывание SPI

.ORG $00e

rjmp

adc_cmt

; прерывание АЦП

.ORG $011

инициализация

ink:

Idi

tempi, low(RAMEND)

Idi

temph, high(RAMEND)

out

SPH, temph

out

SPL, tempi

определить в указателе стека адрес RAMEND

;порты ввода-вывода

Idi

tempi, Obi 1000000

clr

temph

out

PORTA, temph

out

DDRA, tempi

ser

tempi

out PORTB, tempi

out

DDRB, tempi

; порт В на вывод

out PORTD, tempi

110


out

DDRD, temph

; порт D на ввод

;внешнее прерывание INTO

Idi

tempi, (1«ISC01)|(0«ISC00)

out

MCUCR, tempi

; INTO по падающему фронту

Idi

tempi, (1«INT0)

out

GIMSK, tempi

; разрешение INTO

прерывание таймера О

Idi

tempi, (1«ТО1Е0)

out

TIMSK, tempi

;параметры SPI

idi

tempi Obi 1011001

out

SPCR, tempi

;параметры АЦП

clr

tempi

out

ADMUX, tempi

;канал РАО для АЦП

Idi

tempi, 0Ы000Н01

out

ADCSR, tempi

sei

; общее разрешение прерываний

rcall

ind_pff ; выключение индикации температуры

; бессодержательный бесконечный цикл, может быть заменен любой граммой

main: nop

rjmp main

indoff:

;вывод нулевых байтов в SPI для отключения индикации

clr

tempi

Idi

XL, low(Mind)

Idi

XH, high(Mind) ;начальный адрес RAM для кодов SPI

st

X+, tempi

st

X+, tempi

st

X+, tempi

idi

XL, low(Mind) восстановление в Х начального адреса

rcall

spi_stc

;старт передачи байтов индикации

ret

;1NT0, кнопки управления keycnt:

сохранение в стеке регистров и флагов push tempi

push temph


push

saveF

in

saveF, SREG

;обработка сигналов "Стоп", "Пуск"

in

tempi, PINB

; контроль сигнала СТОП

sbrs

tempi, PB2

rjmp

cnt_off

; перейти к процедуре СТОП

sbrs

tempi, PB1

; контроль сигнала ПУСК

rjmp

cnt_on

; перейти к процедуре ПУСК

;если оба сигнала в 1, завершить без изменения режима

key out:

; завершение с восстановлением из стека флагов и регистров

out

SREG, saveF

pop

saveF

pop

temph

pop

tempi

reti

cnton:

щереход в режим ПУСК

tst

rent

завершить по признаку режима ПУСК

brne

key_out

sbr

rent, 0x80 установить признак режима ПУСК в rent

Idi

temph, 0x05

out

TCCRO, temph ;запуск таймера циклов контроля

clr

counT

;сброс счетчика для формирования цикла

out

ADMUX, counT - ;канал РАО для АЦП

sbi

ADCSR, ADSC ;запуск АЦП для 1 цикла контроля

cbi

PORTA, PA7

выключение охлаждения

cbi

PORTA, PA6

выключение подогрева

rjmp

key_out

завершение процедуры

cntoff:

;переход в режим СТОП

tst

rent

завершить по признаку режима СТОП

breq

key_out

clr

rent ;сбросить признаки режима ПУСК в rent

clr

temph

out

TCCRO, temph ;останов таймера циклов контроля

out

TCNTO, temph ;сброс таймера циклов контроля

clr

counT

;сброс счетчика для формирования цикла

cbi

PORTA, PA7

выключение охлаждения


cbi

PORTA, PA6

выключение подофева

waitspi:

cpi

XL, low(Mind) ;контроль вывода байтов индикации

breq cnt_end

продолжение процедуры, если вывод завершен

sei

разрешить прерывания при ожидании

rjmp

waitspi ;возврат к контролю завершения цикла вывода

cntend:

rcall

ind_off

;выключить индикацию температуры для СТОП

rjmp

key

out

завершение процедуры

;периодический запуск цикла управления в режиме ПУСК

cycle:

push

saveF

in

saveF, SREG

tst

rent

;контроль режима ПУСК

breq cyc_out

завершить без запуска для СТОП

cpi

counT, 15

;контроль количества прерываний таймера О

breq eyedo

;запуск цикла по 16 прерыванию

inc

counT

;инкремент количества прерываний

rjmp

cyc_out

;завершить без запуска (<16)

eyedo:

clr

counT

;очистка счетчика прерываний

out

ADMUX, counT

;канал РАО для АЦП

sbi

ADCSR, ADSC ;запуск АЦП, начало цикла контроля

завершение с восстановлением флагов

cycout:

out

SREG, saveF

pop

saveF

reti

прерывание по завершению преобразования АЦП

adeemt:

push

tempi

push

temph

push

saveF

in

saveF, SREG

tst

rent

breq

adc_out

завершить по признаку режима СТОП

113