
- •Пмк дз Общие требования
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
- •Пример выполнения задания
- •Решение.
Пример выполнения задания
Переменная называется N_Zapuskov. Находится в EEPROM.
Максимально допустимое число запусков записано в константе N_Zapuskov_Max.
Решение.
.include "8535def.inc"
.def Temp =r16
.equ N_Zapuskov_Max =5
.cseg
.org 0
rjmp Start
.org INT_VECTORS_SIZE
Start:
;----- Читаем EEPROM -----
ldi Temp, low (N_Zapuskov) ;Выставляем адрес переменной,
out EEARL, Temp ; указывающей число запусков.
ldi Temp, high (N_Zapuskov)
out EEARH, Temp
sbi EECR, EERE ;Выдаем строб чтения из EEPROM
in Temp, EEDR ;Читаем байт данных в Temp
cpi Temp, N_Zapuskov_Max ;Уже было макс. число запусков?
brne m2 ;Если нет – продолжаем работу.
m1: nop ;Если дошли сюда – то останавливаем
rjmp m1 ; демо-версию.
m2:
inc Temp ;Увеличиваем на 1 число запусков,
out EEDR, Temp ; записываем в регистр данных,
sbi EECR, EEMWE ; разрешаем запись в EEPROM,
sbi EECR, EEWE ; стробируем запись в EEPROM.
;... А далее пошла основная программа
;----- А это пошел сегмент EEPROM -----------------------------
.eseg
N_Zapuskov: .byte 1 ;Здесь хранится наша константа.
ПМК ДЗ №14
Написать программу инициализации АЦП. Незадействованные линии порта А настроить на вывод.
Пример выполнения задания
Канал АЦП - 0.
Режим преобразования – одиночный.
Коэффициент деления тактовой частоты – 128.
Решение.
.include "8535def.inc"
.cseg
;--------- Вектора прерываний ----------------
.org 0 ;По сбросу
rjmp Start
.org ADCCaddr ;От АЦП
rjmp ADCCaddrSUB
;-------------------------------------------------
.org $20
Start:
cli
.def Temp=R16
;----------- Установка указателя стека ------------------------
ldi Temp, low(ramend)
out spl, Temp
ldi Temp, high(ramend)
out sph, Temp
;--------- Инициализация АЦП ----------------
ldi Temp, (1<<ADEN)+(1<<ADSC)+(0<<ADFR)+(1<<ADIF)+(1<<ADIE)+ (1<<ADSP2)+ (1<<ADSP1)+ (1<<ADSP0)
out ADCSR, Temp
ldi Temp, $00 ;Канал 0
out ADMUX, Temp
;--------- Инициализация порта ----------------
ldi Temp, 0b11111110 ;Весь порт A – на вывод, кроме линии АЦП
out DDRA, Temp ;а остальные не трогаем
;--------- Разрешаем глобально прерывания ----------------
sei
ПМК ДЗ №15
Написать программу инициализации аналогового компаратора.
Пример выполнения задания
Аналоговый компаратор включить.
Прерывания от аналогового компаратора разрешить.
Условие возникновения прерывания – по фронту.
Решение.
.include "8535def.inc"
.cseg
;--------- Вектора прерываний ----------------
.org 0 ;По сбросу
rjmp Start
.org ACIaddr ;От AC
rjmp ACIaddrSUB
;-------------------------------------------------
.org $20
Start:
cli
.def Temp=R16
;----------- Установка указателя стека ------------------------
ldi Temp, low(ramend)
out spl, Temp
ldi Temp, high(ramend)
out sph, Temp
;--------- Инициализация АC ----------------
ldi Temp, (0<<ACD)+(1<<ACIE)+(1<<ACIS1)+(1<<ACIS0)
out ACSR, Temp
;--------- Инициализация порта ----------------
ldi Temp, 0b11110011 ;Весь порт B – на вывод, кроме линии АC
out DDRB Temp
;--------- Разрешаем глобально прерывания ----------------
sei