Схема для осуществления параллельного программирования изображена на рисунке 7. Сигналы:
- 1 – Устройство готово к программированию - 0 - Разрешение вывода - Импульс записиBS - Выбор байта (1 – старший)
XA0, XA1 - Выбор режима программирования
Data - Данные
На рисунке 8 довольно понятно показан алгоритм программирования FLASH-памяти в виде последовательности подаваемых сигналов.
Каждое действие инициируется сигналом XTAL1. Сначала в МК загружается команда записи. Затем младшая и старшая части адреса для загружаемых данных. Затем осуществляется сама загрузка данных, а затем подачей сигнала WR осуществляется непосредственно запись данных в память.
Последовательное программирование.
Схема для последовательного программирования изображена на рисунке 9.
Запись данных осуществляется по положительному фронту сигнала SCK. Инструкции загружаются сигналом MOSI. Любые загруженные данные можно посмотреть с выхода MISO, после соответствующей загруженной команды.
В результате проектирования была разработана МК – система (ТАЙМЕР) для включения/выключения подключенных к нему электроприборов согласно заданному расписанию.
Разработанное устройство, благодаря использованию современной элементной базы, отличается высокой точностью, надежностью и быстродействием. Высокая степень интеграции используемых радиоэлементных средств обеспечивает уменьшение массогабаритных параметров и потребляемой мощности.
1. Хартов В.Я., Проектирование и отладка программ для микроконтроллеров AVR фирмы ATMEL: учебное пособие по курсу «микропроцессорные системы». Москва, изд-во «МГТУ им. Баумана», 2004. – 62 с.
2. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. Москва «СОЛОН-Пресс», 2005. – 304 с.
3. u208.pdfhttp://www.alkon.net Тиристоры серии у208, описание
4. L7800.pdfhttp://www.st.com Стабилизаторы L78хх, техническое описание
5. AT90S8535.pdf http://www.atmel.com 8-разрядный AVR МК AT90S8535
6. DOCCOM.pdfhttp://www.atmel.com Полудуплексное управление UART
7. http://www.atmel.ru/Articles/Atmel11.htm Справочник по ассемблеру для AVR
8. MAX233xPP.pdfhttp://www.maxim-ic.comMAX233xPP, техническое описание
Листинг программы для МК
.include "D:\AVR Tools\AvrAssembler\Appnotes\8535def.inc"
.cseg
.def mes=r17
.def den=r18
.def chas=r19
.def min=r20
.defsek=r27
; R16 - временный регистр
; R21 - регистр работы с UART
; R22 - указатель на нужное расписание в EEPROM
; R23 - для флагов
; R24 - указатель на текущий приборорежим
; R25 - значение из памяти
; R26 - флаг выводного порта (N прибора > 8)
;-------------
.org $000
rjmp main
.org $004
rjmp T2ovf
.org $00b
rjmp uart_dre
;-------------
uart_dre: ; Обр-к прерывания UART
in r21, udr ; --Задай UDR--
reti
;-------------
T2ovf: ; Обр-к прерывания таймера (минуты)
In r23, sreg
push r23
inc r28
cpi r28, 0x80
brne goback
ldi r28, 0
inc sek
cpi sek, 60
brlo goback
ldisek, 0 ; Корректировка переходов
incmin
cpi min, 60
brlo goback
ldi min, 0
inc chas
cpi chas, 24
brlo goback
ldi chas, 0
inc den
cpi den, 32
brlo goback
ldi den, 1
inc mes
cpi mes, 13
brlo goback
ldi mes, 1
goback:
pop r23
out sreg, r23
reti
;-------------
main:
;Инициализация
ldi r16, 0xdf
out spl, r16 ; Стек
rcall clear ; Очистка EEPROM
ldimes, 1 ; Начальное время
ldiden, 1
ldi chas, 0
ldi min, 0
ldi sek, 0
ldi r28, 0
ldi r21, 0
ldi r24, 0
sei ; Разрешение прерываний
ldir16, 25
out ubrr, r16 ; Скорость UART = 9600
ldir16, 8
outassr, r16 ; Таймер - от кристалла
ldir16, 0xff
outddra, r16 ; Порт А на вывод
ldir16, 3
outddrb, r16 ; Биты 0 и 1 порта Б на вывод
ldi r16, 144
out ucr, r16 ; UART начтение
ldi r16, 64
out timsk, r16 ; Разрешение прерывания таймера
ldi r16, 1
out tccr2, r16 ; Настройка и запуск таймера
;Работа
Wait: ; Цикл ожидания
rcall check
cpi r21, 0 ; Задали ли режим настройки
breq wait ; --Установи USR->RXC--
cpi r21, 1
breq rej1 ; Режим корректировки даты (31->1)
cpi r21, 2
breq rej2 ; Режим задания времени
cpi r21, 3
breq rej3 ; Режим задания расписания
rjmp wait
;------------
Rej1: ; Подпрога корректировки 31->1
ldir21, 0
incden
cpi den, 32 ; Корректировка переходов
brlo wait
ldi den, 1
inc mes
cpi mes, 13
brlo wait
ldi mes, 1
rjmp wait
;------------
Rej2: ; Подпрога установки времени
ldi r21, 70
mes2: ; Ожидание приёма месяца
cpi r21, 70
breq mes2
mov mes, r21
ldir21, 70
den2: ; Ожидание приёма дня
cpi r21, 70
breq den2
mov den, r21
ldir21, 70
chas2: ; Ожидание приёма часа
cpi r21, 70
breq chas2
mov chas, r21
ldir21, 70
min2: ; Ожидание приёма минут
cpi r21, 70
breq min2
mov min, r21
ldir21, 0
rjmp wait
;-------------
Rej3: ; Подпрога установки расписания вкл/выкл
ldi r21, 70
nom3: ; Ожидание приёма номера прибора
cpi r21, 70
breq nom3
mov r22, r21
subir22, 1
lsl r22 ; Умножение на 8 (3 строки)
lslr22
lslr22
out eearl, r22 ; Указатель на нужный прибор
;----------
ldi r16, 1 ; Счётчик записи расписания
ldi r21, 70
vvod: ; Ожидание ввода элемента
cpir21, 70
breqvvod
out eedr, r21 ; Значение - в регистр данных
ldi r21, 6
out eecr, r21 ; Записатьв EEPROM
inc r22
ldi r21, 0
out eecr, r21
out eearl, r22 ; Увеличитьуказатель
ldi r21, 70
inc r16 ; Увеличить счётчик
cpi r16, 9 ; Оба ли расписания записаны
brne vvod
ldi r21, 0
rjmp wait
;----------
check: ; Подпрога проверки расписаний
cpi r24, 80 ; Последний ли прибор
brlocont
ldir24, 0 ; Сначала
cont: ; Проверка расписания прибора
rcall vvod1
cp r25, mes
brne back3
rcall vvod1
cp r25, den
brne back2
rcall vvod1
cp r25, chas
brne back1
rcall vvod1
cp r25, min
brne back0
RCALLTRY ; Звонок!!!
ret
vvod1: ; Подпрога чтения значений из памяти
out eearl, r24
ldi r16, 1
out eecr, r16
in r25, eedr ; В R25 значение
incr24
ret
back3: ; Блок корректировки на след. прибор
inc r24
back2:
inc r24
back1:
inc r24
back0:
ret
; ПРОЦЕДУРАЗВОНОК
TRY:
push r24
subi r24, 4
ldi r26, 0 ; Приборы 1-8
cpi r24, 0x40
brlo prta
subi r24, 0x40 ; Приборы 9 или 10
ldir26, 0x0f
prta:
lsrr24 ; Корректировка адреса
lsrr24
lsrr24
brlovikl ; Вкл/выкл?
rcallvibor
cpir26, 0 ; Выбор порта
breq prta1
in r24, portb ; ВклпортБ
or r24, r16
out portb, r24
pop r24
ret
prta1: ; ВклпортА
in r24, porta
or r24, r16
out porta, r24
pop r24
ret
vikl:
rcall vibor
cpir26, 0 ; Выбор порта
breqprta2
in r24, portb ; ВыклпортБ
com r16
and r24, r16
out portb, r24
popr24
ret
prta2: ; Выкл порт А
in r24, porta
com r16
and r24, r16
out porta, r24
pop r24
ret
;Процедура выбора пина порта
vibor:
ldi r16, 1
cikl:
cpi r24, 0
breq next
dec r24
lsl r16
rjmpcikl
next:
ret
; Процедура очистки области расписаний EEPROM
clear:
ldi r16, 0
out eedr, r16
ldi r21, 6
cl1:
out eearl, r16
out eecr, r21
inc r16
cpi r16, 80
brne cl1
ret