Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМК ДЗ 2012 примеры.doc
Скачиваний:
2
Добавлен:
17.08.2019
Размер:
202.24 Кб
Скачать

Пример выполнения задания

  1. Переменная называется N_Zapuskov. Находится в EEPROM.

  2. Максимально допустимое число запусков записано в константе 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

Написать программу инициализации АЦП. Незадействованные линии порта А настроить на вывод.

Пример выполнения задания

  1. Канал АЦП - 0.

  2. Режим преобразования – одиночный.

  3. Коэффициент деления тактовой частоты – 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

Написать программу инициализации аналогового компаратора.

Пример выполнения задания

  1. Аналоговый компаратор включить.

  2. Прерывания от аналогового компаратора разрешить.

  3. Условие возникновения прерывания – по фронту.

Решение.

.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