Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Библиографический список использованных источников

1. Предко М. Руководство по микроконтроллерам. Том 1. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 416 с.

2. Предко М. Руководство по микроконтроллерам. Том 2. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 488 с.

3. Cady, Fredrick M. Microcontrollers and microcomputers: principles of software
and hardware engineering. – New York – Oxford, Oxford University Press,
1997. – 252 p.

4. Вуд А. Микропроцессоры в вопросах и ответах. / Пер. с англ. под ред. Д. А. Поспелова. – М.: Энергоатомиздат. 1985. – 184 с.

5. Уильямс Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. – М.: Энергоатомиздат, 1988. – 253с.

6. Угрюмов Е.П. Цифровая схемотехника. – Спб.: БВХ – Санкт-Петербург,
2000. – 528 с.

7. Алексенко А.Г., Шагурин И.И. Микросхемотехника. – М.: Радио и связь,
1990. – 496 с.

8. Бродин Б.В., Шагурин И.И. Микроконтроллеры: Справочник. – М.: ЭКОМ, 1999. – 395 с.

9. Программируемые логические ИМС на КМОП-структурах и их применение. / П.П. Мальцев, Н.И. Гарбузов, А.П. Шарапов, А.А. Кнышев. – М.: Энергоатомиздат, 1998. – 158 с.

10. Соловьев В.В., Васильев А.Г. Программируемые логические интегральные схемы и их применение. – Мн.: Беларуская наука, 1998. – 270 с.

11. Bursky D. Embedded Logic and Memory Find a Home in FPGA. – Electronic Design, 1999, №14, pp. 43-56.

12. Chang D., Mazek-Sadowska M. Dynamically Reconfigable FPGA. – JEEE Transition on Computers, 1999, №6, pp. 565 – 578.

13. Bursky D. Advanced CPLD Architectures Challenge FPGA, Gas. – Electronic Design, 1998, №22, pp. 78 – 86.

14.  Takai Y. a.o. 250 Mbytes Synchronous DRAM Using a 3-Stage-Pipeline Architecture. – JEEE. Journal of Solid-Stage Circuits. – 1994, v.29, №4,
pp. 426 – 429.

15.  Лаптев В. Цифровой измеритель температуры на базе AVR микроконтроллера и RC-цепочки. – Электронные компоненты, 2001. №2, с. 46 – 49.

16. http://www.atmel.ru/ - описание AVR микроконтроллеров, русскоязычный сайт.

17. http://www.dontronics.com/atmel.html - программные проекты по AVR.

18. http://www.gaw.ru/, http://www.cec-mc.ru - информация о МК фирмы ATMEL

19. http://trush.da.ru/, http://avr.da.ru/ - описание МК AT90S1200 фирмы Atmel

20.  http://www.ln.com.ua/~real/avreal, http://www.chat.ru/~avreal: - AVReAl: программа прошивки At90sXXXX через LPT порт

21. http://trush.pp.ru/avr/ - полезные ссылки по AVR.

 


ПРИЛОЖЕНИЕ 1
Инструкции процессоров AVR.

Ниже приведен набор команд процессоров AVR, более детальное описание их можно найти в AVR Data Book [16,19].

Таблица А.1. Арифметические и логические инструкции.

Мнемоника Операнды Описание Операция Флаги Циклы
ADD Rd,Rr Суммирование без переноса Rd = Rd + Rr Z,C,N,V,H,S 1
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C Z,C,N,V,H,S 1
SUB Rd,Rr Вычитание без переноса Rd = Rd - Rr Z,C,N,V,H,S 1
SUBI Rd,K8 Вычитание константы Rd = Rd - K8 Z,C,N,V,H,S 1
SBC Rd,Rr Вычитание с переносом Rd = Rd - Rr - C Z,C,N,V,H,S 1
SBCI Rd,K8 Вычитание константы с переносом Rd = Rd - K8 - C Z,C,N,V,H,S 1
AND Rd,Rr Логическое И Rd = Rd · Rr Z,N,V,S 1
ANDI Rd,K8 Логическое И с константой Rd = Rd · K8 Z,N,V,S 1
OR Rd,Rr Логическое ИЛИ Rd = Rd V Rr Z,N,V,S 1
ORI Rd,K8 Логическое ИЛИ с константой Rd = Rd V K8 Z,N,V,S 1
EOR Rd,Rr Логическое исключающее ИЛИ Rd = Rd EOR Rr Z,N,V,S 1
COM Rd Побитная Инверсия Rd = $FF - Rd Z,C,N,V,S 1
NEG Rd Изменение знака (Доп. код) Rd = $00 - Rd Z,C,N,V,H,S 1
SBR Rd,K8 Установить бит (биты) в регистре Rd = Rd V K8 Z,C,N,V,S 1
CBR Rd,K8 Сбросить бит (биты) в регистре Rd = Rd · ($FF - K8) Z,C,N,V,S 1
INC Rd Инкрементировать значение регистра Rd = Rd + 1 Z,N,V,S 1
DEC Rd Декрементировать значение регистра Rd = Rd -1 Z,N,V,S 1
TST Rd Проверка на ноль либо отрицательность Rd = Rd · Rd Z,C,N,V,S 1
CLR Rd Очистить регистр Rd = 0 Z,C,N,V,S 1
SER Rd Установить регистр Rd = $FF None 1
ADIW Rdl,K6 Сложить константу и слово Rdh:Rdl = Rdh:Rdl + K6 Z,C,N,V,S 2
SBIW Rdl,K6 Вычесть константу из слова Rdh:Rdl = Rdh:Rdl - K6 Z,C,N,V,S 2
MUL Rd,Rr Умножение чисел без знака R1:R0 = Rd * Rr Z,C 2
MULS Rd,Rr Умножение чисел со знаком R1:R0 = Rd * Rr Z,C 2
MULSU Rd,Rr Умножение числа со знаком с числом без знака R1:R0 = Rd * Rr Z,C 2
FMUL Rd,Rr Умножение дробных чисел без знака R1:R0 = (Rd * Rr) << 1 Z,C 2
FMULS Rd,Rr Умножение дробных чисел со знаком R1:R0 = (Rd *Rr) << 1 Z,C 2
FMULSU Rd,Rr Умножение дробного числа со знаком с числом без знака R1:R0 = (Rd * Rr) << 1 Z,C 2

 

Таблица А.2. Инструкции ветвления.

Мнемоника Опе­ранды Описание Операция Флаги Циклы
RJMP k Относительный переход PC = PC + k +1 None 2
IJMP Нет Косвенный переход на (Z) PC = Z None 2
EIJMP Нет Расширенный косвенный пере­ход на (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND None 2
JMP k Переход PC = k None 3
RCALL k Относительный вызов подпро­граммы STACK = PC+1, PC = PC+k+1 None 3/4*
ICALL Нет Косвенный вызов (Z) STACK = PC+1, PC = Z None 3/4*
EICALL Нет Расширенный косвенный вы­зов (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND None 4*
CALL k Вызов подпрограммы STACK = PC+2, PC = k None 4/5*
RET Нет Возврат из подпрограммы PC = STACK None 4/5*
RETI Нет Возврат из прерывания PC = STACK I 4/5*
CPSE Rd,Rr Сравнить, пропустить если равны if (Rd ==Rr) PC = PC 2 or 3 None 1/2/3
CP Rd,Rr Сравнить Rd -Rr Z,C,N,V,H,S 1
CPC Rd,Rr Сравнить с переносом Rd - Rr - C Z,C,N,V,H,S 1
CPI Rd,K8 Сравнить с константой Rd - K Z,C,N,V,H,S 1
SBRC Rr,b Пропустить если бит в реги­стре очищен if(Rr(b)==0) PC = PC+2 or 3 None 1/2/3
SBRS Rr,b Пропустить если бит в регистре установлен if(Rr(b)==1) PC = PC+2 or 3 None 1/2/3
SBIC P,b Пропустить если бит в порту очищен if(I/O(P,b)==0) PC = PC+ or 3 None 1/2/3
SBIS P,b Пропустить если бит в порту установлен if(I/O(P,b)==1) PC = PC+2 or 3 None 1/2/3
BRBC s,k Перейти если флаг в SREG очищен if(SREG(s)==0) PC = PC+k+1 None 1/2
BRBS s,k Перейти если флаг в SREG установлен if(SREG(s)==1) PC = PC+k+1 None 1/2
BREQ k Перейти если равно if(Z==1) PC = PC + k + 1 None 1/2
BRNE k Перейти если не равно if(Z==0) PC = PC + k + 1 None 1/2
BRCS k Перейти если перенос установлен if(C==1) PC = PC + k + 1 None 1/2
BRCC k Перейти если перенос очищен if(C==0) PC = PC + k + 1 None 1/2
BRSH k Перейти если равно или больше if(C==0) PC = PC + k + 1 None 1/2
BRLO k Перейти если меньше if(C==1) PC = PC + k + 1 None 1/2
BRMI k Перейти если минус if(N==1) PC = PC + k + 1 None 1/2
BRPL k Перейти если плюс if(N==0) PC = PC + k + 1 None 1/2
BRGE k Перейти если больше или равно (со знаком) if(S==0) PC = PC + k + 1 None 1/2
BRLT k Перейти если меньше (со знаком) if(S==1) PC = PC + k + 1 None 1/2
BRHS k Перейти если флаг внутреннего переноса установлен if(H==1) PC = PC + k + 1 None 1/2
BRHC k Перейти если флаг внутреннего переноса очищен if(H==0) PC = PC + k + 1 None 1/2
BRTS k Перейти если флаг T установлен if(T==1) PC = PC + k + 1 None 1/2
BRTC k Перейти если флаг T очищен if(T==0) PC = PC + k + 1 None 1/2
BRVS k Перейти если флаг переполнения установлен if(V==1) PC = PC + k + 1 None 1/2
BRVC k Перейти если флаг переполнения очищен if(V==0) PC = PC + k + 1 None 1/2
BRIE k Перейти если прерывания разрешены if(I==1) PC = PC + k + 1 None 1/2
BRID k Перейти если прерывания запрещены if(I==0) PC = PC + k + 1 None 1/2

* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI, необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ свыше 128KB, добавьте пять циклов плюс по три цикла на каждое ожидание.

 

Таблица А.3. Инструкции передачи данных.

Мнемоника Операнды Описание Операция Флаги Циклы
MOV Rd,Rr Скопировать регистр Rd = Rr None 1
MOVW Rd,Rr Скопировать пару регистров Rd+1:Rd = Rr+1:Rr, r,d even None 1
LDI Rd,K8 Загрузить константу Rd = K None 1
LDS Rd,k Прямая загрузка Rd = (k) None 2*
LD Rd,X Косвенная загрузка Rd = (X) None 2*
LD Rd,X+ Косвенная загрузка с пост-инкрементом Rd = (X), X=X+1 None 2*
LD Rd,-X Косвенная загрузка с пре-декрементом X=X-1, Rd = (X) None 2*
LD Rd,Y Косвенная загрузка Rd = (Y) None 2*
LD Rd,Y+ Косвенная загрузка с пост-инкрементом Rd = (Y), Y=Y+1 None 2*
LD Rd,-Y Косвенная загрузка с пре-декрементом Y=Y-1, Rd = (Y) None 2*
LDD Rd,Y+q Косвенная загрузка с замещением Rd = (Y+q) None 2*
LD Rd,Z Косвенная загрузка Rd = (Z) None 2*
LD Rd,Z+ Косвенная загрузка с пост-инкрементом Rd = (Z), Z=Z+1 None 2*
LD Rd,-Z Косвенная загрузка с пре-декрементом Z=Z-1, Rd = (Z) None 2*
LDD Rd,Z+q Косвенная загрузка с замещением Rd = (Z+q) None 2*
STS k,Rr Прямое сохранение (k) = Rr None 2*
ST X,Rr Косвенное сохранение (X) = Rr None 2*
ST X+,Rr Косвенное сохранение с пост-инкрементом (X) = Rr, X=X+1 None 2*
ST -X,Rr Косвенное сохранение с пре-декрементом X=X-1, (X)=Rr None 2*
ST Y,Rr Косвенное сохранение (Y) = Rr None 2*
ST Y+,Rr Косвенное сохранение с пост-инкрементом (Y) = Rr, Y=Y+1 None 2
ST -Y,Rr Косвенное сохранение с пре-декрементом Y=Y-1, (Y) = Rr None 2
ST Y+q,Rr Косвенное сохранение с замещением (Y+q) = Rr None 2
ST Z,Rr Косвенное сохранение (Z) = Rr None 2
ST Z+,Rr Косвенное сохранение с пост-инкрементом (Z) = Rr, Z=Z+1 None 2
ST -Z,Rr Косвенное сохранение с пре-декрементом Z=Z-1, (Z) = Rr None 2
ST Z+q,Rr Косвенное сохранение с замещением (Z+q) = Rr None 2
LPM Нет Загрузка из программной памяти R0 = (Z) None 3
LPM Rd,Z Загрузка из программной памяти Rd = (Z) None 3
LPM Rd,Z+ Загрузка из программной памяти с пост-инкрементом Rd = (Z), Z=Z+1 None 3
ELPM Нет Расширенная загрузка из программной памяти R0 = (RAMPZ:Z) None 3
ELPM Rd,Z Расширенная загрузка из программной памяти Rd = (RAMPZ:Z) None 3
ELPM Rd,Z+ Расширенная загрузка из программной памяти с пост-инкрементом Rd = (RAMPZ:Z), Z = Z+1 None 3
SPM Нет Сохранение в программной памяти (Z) = R1:R0 None -
ESPM Нет Расширенное сохранение в программной памяти (RAMPZ:Z) = R1:R0 None -
IN Rd,P Чтение порта Rd = P None 1
OUT P,Rr Запись в порт P = Rr None 1
PUSH Rr Занесение регистра в стек STACK = Rr None 2
POP Rd Извлечение регистра из стека Rd = STACK None 2

* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для каждого ожидания.

 

Таблица А.4. Инструкции работы с битами.

Мнемоника Операнды Описание Операция Флаги Циклы
LSL Rd Логический сдвиг влево Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S 1
LSR Rd Логический сдвиг вправо Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) Z,C,N,V,S 1
ROL Rd Циклический сдвиг влево через C Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S 1
ROR Rd Циклический сдвиг вправо через C Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S 1
ASR Rd Арифметический сдвиг вправо Rd(n)=Rd(n+1), n=0,...,6 Z,C,N,V,S 1
SWAP Rd Перестановка тетрад Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None 1
BSET s Установка флага SREG(s) = 1 SREG(s) 1
BCLR s Очистка флага SREG(s) = 0 SREG(s) 1
SBI P,b Установить бит в порту I/O(P,b) = 1 None 2
CBI P,b Очистить бит в порту I/O(P,b) = 0 None 2
BST Rr,b Сохранить бит из регистра в T T = Rr(b) T 1
BLD Rd,b Загрузить бит из T в регистр Rd(b) = T None 1
SEC Нет Установить флаг переноса C =1 C 1
CLC Нет Очистить флаг переноса C = 0 C 1
SEN Нет Установить флаг отрицательного числа N = 1 N 1
CLN Нет Очистить флаг отрицательного числа N = 0 N 1
SEZ Нет Установить флаг нуля Z = 1 Z 1
CLZ Нет Очистить флаг нуля Z = 0 Z 1
SEI Нет Установить флаг прерываний I = 1 I 1
CLI Нет Очистить флаг прерываний I = 0 I 1
SES Нет Установить флаг числа со знаком S = 1 S 1
CLN Нет Очистить флаг числа со знаком S = 0 S 1
SEV Нет Установить флаг переполнения V = 1 V 1
CLV Нет Очистить флаг переполнения V = 0 V 1
SET Нет Установить флаг T T = 1 T 1
CLT Нет Очистить флаг T T = 0 T 1
SEH Нет Установить флаг внутреннего переноса H = 1 H 1
CLH Нет Очистить флаг внутреннего переноса H = 0 H 1
NOP Нет Нет операции Нет None 1
SLEEP Нет Спать (уменьшить энергопотребление) Смотрите описание инструкции None 1
WDR Нет Сброс сторожевого таймера Смотрите описание инструкции None 1


Ассемблер не различает регистр символов. Операнды могут быть таких видов:

§ Rd: Результирующий (и исходный) регистр в регистровом файле

§ Rr: Исходный регистр в регистровом файле

§ b: Константа (3 бита), может быть константное выражение

§ s: Константа (3 бита), может быть константное выражение

§ P: Константа (5-6 бит), может быть константное выражение

§ K6; Константа (6 бит), может быть константное выражение

§ K8: Константа (8 бит), может быть константное выражение

§ k: Константа (размер зависит от инструкции), может быть константное выражение

§ q: Константа (6 бит), может быть константное выражение

§ Rdl: R24, R26, R28, R30. Для инструкций ADIW и SBIW

§ X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)

 


ПРИЛОЖЕНИЕ 2.
Таблица регистров микроконтроллера AT90S1200

Адрес Название Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
$3F SREG I T H S V N Z C
$3E  

з а р е з е р в и р о в а н

$3D  

з а р е з е р в и р о в а н

$3C  

з а р е з е р в и р о в а н

$3B GIMSK - INT0 - - - - - -
$3A  

з а р е з е р в и р о в а н

$39 TIMSK - - - - - - TOIE0 -
$38 TIFR - - - - - - TOV0 -
$37  

з а р е з е р в и р о в а н

$36  

з а р е з е р в и р о в а н

$35 MCUCR - - SE SM - - ISC01 ISC00
$34  

з а р е з е р в и р о в а н

$33 TCCR0 - - - - - CS02 CS01 CS00
$32 TCNT0

Таймер / счетчик 0 (8 бит)

 

з а р е з е р в и р о в а н

$21 WDTCR - - - - WDE WDP2 WDP1 WDP0
 

з а р е з е р в и р о в а н

$1E EEAR

Регистр адреса энергонезависимой памяти

$1D EEDR

Регистр данных энергонезависимой памяти

$1C EECR - - - - - - EEWE EERE
 

з а р е з е р в и р о в а н

$18 PORTB PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
$17 DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0
$16 PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
 

з а р е з е р в и р о в а н

$12 PORTD - PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0
$11 DDRD - DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0
$10 PIND - PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0
 

з а р е з е р в и р о в а н

$08 ACSR ACD - ACO ACI ACIE - ACIS1 ACIS0
 

з а р е з е р в и р о в а н

$00  

з а р е з е р в и р о в а н

 

ПРИЛОЖЕНИЕ 3.
Программа для измерителя звуковой частоты

.include "8515def.inc"

.equ last_seg =4

.equ zero =0

.equ start_addr= 8

.def capture_l =r2

.def capture_h =r3

.def char =r5

.def char_pointer =r6

.def temp =r16   

.def temp1 =r17

.def ZerRol =r18

.def char0 =r20

.def char1 =r21

.def char2 =r22

.def char3 =r23

.def char4 =r24

.def out_char0 =r8

.def out_char1 =r9

.def out_char2 =r10

.def out_char3 =r11

.def  out_char4 =r12

.def out_counter =r13

.eseg ;EEPROM segment

.org 0

eetbl3:.db 0x3F,0x06

;     ;0 1

 .db 0x5B,0x4F

;     ;2 3

 .db 0x66,0x6D

;     ;4 5

 .db 0x7D,0x07

;     ;6 7

 .db 0x7F,0x6F

;     ;8 9

.cseg

.org 0

rjmp reset

reti;

reti;

rjmp TIM1_CAPT

.org $006

rjmp TIM1_OVF

rjmp TIM0_OVF

;***********************************

;* Main Code

reset:; Make Stack: 

ldi temp, high(RAMEND)

out SPH, temp         

ldi temp, low(RAMEND)

out SPL, temp

     

ldi temp, 0xC3;

out TCCR1B, temp;

ldi temp, 0x8A ;

out TIMSK, temp

ldi temp, 0x3  ;

out TCCR0, temp

sei

ldi temp, zero

mov char_pointer, temp

ldi temp, 0xFF

out DDRA, temp

out DDRC, temp

ldi char0, 8

ldi char1, 8

ldi char2, 8

ldi char3, 8

ldi char4, 8

ldi ZH, 0

ldi ZL, start_addr

ldi ZerRol,0xFE

clt

clr out_counter

forever:

brtc forever

clt

mov dv16uL, capture_l;tmp16a

mov dv16uH, capture_h;tmp16b

ldi dd16uL, low(62500)

ldi dd16uH, high(62500)

; пробразование в Гц:

rcall div16u          

; преобразование в десятичные цифры

ldi tmp16a, low(10000)   

ldi tmp16b, high(10000)

rcall bin2ASCII_digit

mov tASCII4, cnt16a

ldi tmp16a, low(1000)

ldi tmp16b, high(1000)

rcall bin2ASCII_digit

mov tASCII3, cnt16a

ldi tmp16a, low(100)

ldi tmp16b, high(100)

rcall bin2ASCII_digit

mov tASCII2, cnt16a

ldi tmp16a, low(10)

ldi tmp16b, high(10)

rcall bin2ASCII_digit

rjmp forever           

;* End Main Code

;************************************

;************************************

;* bin2ASCII_digit

.def fASCIIL     =r24;r11

.def fASCIIH =r19;r12

.def tASCII0 =r24;r11

.def tASCII1 =r23;r16

.def tASCII2 =r22;r13

.def tASCII3 =r21;r14

.def tASCII4 =r20;r15

.def cnt16a  =r23;r16

.def tmp16a  =r16;r17

.def tmp16b  =r17;r18

bin2ASCII_digit:

ldi cnt16a, -1

bin2ASCII_digit_loop:

inc cnt16a

sub fASCIIL, tmp16a

sbc fASCIIH, tmp16b

brsh bin2ASCII_digit_loop

add fASCIIL, tmp16a

adc fASCIIH, tmp16b

ret

;* End bin2ASCII_digit

;***********************************

;***********************************

;*div16u 16/16 Bit Unsigned Division;* dd8uH:dd8uL / dv16uH:dv16uL =

;*dres16uH:dres16uL drem16uH:drem16uL

.def drem16uL =r14

.def drem16uH =r15

.def dres16uL =r24;=r16

.def dres16uH =r19;=r17

.def dd16uL =r24;=r16

.def dd16uH =r19;=r17

.def dv16uL =r27;=r18

.def dv16uH =r25;=r19

.def dcnt16u =r26;=r20

div16u:;clear remainder Low byte:

clr drem16uL

;clear remainder High byte and carry:

sub drem16uH,drem16uH

;init loop counter:

ldi dcnt16u,17 

d16u_1: ;shift left dividend:

rol dd16uL

rol dd16uH

;decrement counter:

dec dcnt16u

brne d16u_2;if done

ret   ; return

d16u_2:;shift dividend into

; remainder

rol drem16uL

rol drem16uH

;remainder = remainder - divisor

sub drem16uL,dv16uL    sbc drem16uH,dv16uH;

brcc d16u_3;if result

;negative restore remainder

add drem16uL,dv16uL

adc drem16uH,dv16uH

clc  

;clear carry to be shifted into;result

rjmp d16u_1;else

d16u_3: sec;set carry to be

;shifted into result

rjmp d16u_1

;* End div16u    

;************************************

;************************************;* Timer1 Capture Handler

TIM1_CAPT: in temp1, SREG

;in capture_l, ICR1L

;in capture_h, ICR1H

in capture_l, TCNT1L

in capture_h, TCNT1H

ldi temp, 0

out TCNT1H, temp

out TCNT1L, temp

ldi temp, 0xC3

out TCCR1B, temp

out SREG, temp1

set

reti 

;* End Timer1 Capture Handler

;************************************

;************************************

;* Timer1 OverFlow Handler

TIM1_OVF: in temp1, SREG

ldi char0, 0

ldi char1, 0

ldi char2, 0

ldi char3, 0

ldi char4, 0

ldi temp, 0xC0

out TCCR1B, temp

ldi temp, 0

out TCNT1H, temp

out TCNT1L, temp

out SREG, temp1

reti

;* End Timer1 OverFlow Handler

;************************************

;************************************

;* Timer0 OverFlow Handler

TIM0_OVF: in temp1, SREG

tst out_counter

breq get_char

rjmp show_char

get_char: mov out_char0, char0

mov out_char1, char1

mov out_char2, char2

mov out_char3, char3

mov   out_char4, char4

rjmp continue

show_char: ld char_pointer, Z+

ldi temp, eetbl3

add char_pointer, temp

out EEARL, char_pointer

;address EEPROM

ldi temp, 0

out EEARH, temp;address EEPROM

sbi EECR, EERE;strobe EEPROM

in char, EEDR;read code

out PORTA, ZerRol

out PORTC, char

sbrc ZerRol, last_seg;brcs carry 

rjmp move_ZerRol

New_loop: ldi ZH, 0

ldi ZL, start_addr

ldi ZerRol,0xFE;rol ZerRol  

rjmp continue

move_ZerRol: sec

rol ZerRol

continue: inc out_counter

       out SREG, temp1

       reti

;* End Timer0 OverFlow Handler    

;************************************

ПРИЛОЖЕНИЕ 4.
Программа для устройства «кодовый замок»

 

.include "1200def.inc"

;Port B pins

.equ ROW1 =3

.equ ROW2 =2

.equ ROW3 =1

.equ ROW4 =0

.equ COL1 =7

.equ COL2 =6

.equ COL3 =5

.equ COL4 =4

;Port D pins

.equ GREEN =1;green LED indicate

;keynumber

.equ RED =0;red LED

;initialization & zero keynumber

.equ INT =2;interrupt input

.equ max_count =21

.equ reset_btn =4

.equ psw_length =2

.def temp =r16;

.def key =r17;key code pointer

;for EEPROM

.def fine =r18;loop delay

;counters

.def medium =r19

.def coarse =r20

.def status =r21;preserve

;sreg here

.def rowid =r22

.def colid =r23

.def counter =r24

.def key_pr_count =r25

.eseg;EEPROM segment

.org 0

eetbl1:.db 4,3,2,1,8,7,6,5,12,11,10,9,16,15,14,13

eetbl2:.db 3,1,2,4

.cseg;CODE segment

.org 0 

rjmp reset;Reset handler

nop

nop;unused timer interrupt

nop;unused analogue

;interrupt

reset:         

ldi temp,0x03  ;initialise port D as O/I

out DDRD,temp  ;

out PORTD,temp ;

sbi ACSR,ACD;shut down

;comparator to save power

cli;disable global

;interrupts

ldi key_pr_count, 0

set;T=1 - true password;(default);T=0 - false password

ldi temp,2          

rjmp red_flash;flash LEDs

;for example usage

init_scan: clr counter

scan: ldi temp,0xff

out DDRB,temp

ldi temp, 0x0f

out PORTB, temp

ldi rowid,0xAA

 ;0xAA - значение по умолчанию

 ;кнопка не нежата

sbis PINB,ROW1;find row of

;keypress

ldi rowid,0;and set ROW pointer

sbis PINB,ROW2

ldi rowid,4

sbis PINB,ROW3

ldi rowid,8

sbis PINB,ROW4

ldi rowid,12

cpi rowid, 0xAA

breq init_scan ;Branch if equal //counter=0

inc counter

cpi counter, max_count;

brlo scan;Branch if not

;equal

ldi temp,0xF0;change port B I/O to find column press

out PORTB,temp ;

rcall settle;allow time for

;port to settle

ldi colid, 0xAA     

;0xAA - значение по умолчанию кнопка не нежата

sbis PINB,COL1

;find column of keypress

ldi colid,0

;and set COL pointer

sbis PINB,COL2

ldi colid,1

sbis PINB,COL3

ldi colid,2

sbis PINB,COL4

ldi colid,3

cpi colid, 0xAA

breq init_scan

;Branch if equal //counter=0

add rowid,colid

;merge ROW and COL for pointer

mov key, rowid

rjmp clr_counter

misc_rst: rjmp reset

clr_counter: clr counter

ldi temp, 0xAA

key_up_wait: sbis PINB,COL1 ;;ожидание поднятия клавиши

ldi temp, 0xCC

;если бит=0 то temp=cc

sbis PINB,COL2

ldi temp, 0xCC 

sbis PINB,COL3

ldi temp, 0xCC 

sbis PINB,COL4

ldi temp, 0xCC 

cpi temp, 0xCC

breq clr_counter

inc counter

cpi counter, max_count;

brlo key_up_wait

;Branch if not equal

ldi temp,0x00  ;reinitialise port B as I/O

out DDRB,temp  ;

out PORTB,temp ;

flash: ldi temp, eetbl1

add key, temp

out EEAR, key;address EEPROM

sbi EECR, EERE;strobe EEPROM

in key, EEDR

;read code of pressed button

cpi key, reset_btn

;if key pressed = reset button

breq misc_rst

;then goto reset

ldi temp, eetbl2

add temp, key_pr_count   

out EEAR, temp

sbi EECR, EERE

in temp, EEDR

;read password code 

inc key_pr_count

cp key, temp

;if pressed wrong key

brne not_equal

;then goto not equal

equal: rjmp continue

not_equal: clt

;T=0 - false password

continue: cpi key_pr_count, psw_length;if kpc > psw length

brge kpr_exceed

;then goto kpr_exceed

not_kpr_exceed: rjmp init_scan

kpr_exceed: brts psw_true

;if T=1 then password is true

ldi key_pr_count, psw_length

;else (T=0 password is false) 

rjmp init_scan

psw_true: ldi temp, 3         

green_flash:

cbi PORTD,GREEN;          rcall delay

sbi PORTD,GREEN

rcall delay

dec temp

brne green_flash

exit: rjmp reset;scan;ret

red_flash: sbi PORTD,RED  

rcall delay

cbi PORTD,RED

rcall delay

dec temp

brne red_flash

rjmp init_scan

;****Time Delay Subroutine for;****LED flash****

delay: ldi coarse,3;8         ;triple nested FOR loop

cagain: ldi medium,255 ;

magain: ldi fine,255;

fagain: dec fine

brne fagain

dec medium

brne magain

dec coarse

brne cagain

ret

;***Settling time delay for port;***to stabilise****

settle:  

cagain2: ldi medium,2   ;

magain2: ldi fine,255;

fagain2: dec fine

brne fagain2

dec medium

brne magain2

ret

 

AT90S 1200 2313 4414 8515 2323 4433
Диапазон напряжений питания, В

2,7 - 6,0

Тактовая частота, МГц *)

0 - 16

0 - 20

0 - 16 0 - 20
Количество линий ввода/вывода (max)

15

32

5 18
Количество инструкций 89

120

Объем Flash ROM, байт 1K 2K 4K 8K 2K 4K
Объем EEPROM, байт 64 128 256 512 128 256
Объем внутренней SRAM, байт - 128 256 512 128 128
Объем внешней SRAM, байт (max) - - 64K 64K - -
Объем регистрового файла, байт

32

Количество таймеров/счетчиков 1 2 2 2 1 2
ШИМ: Число каналов/разрядность - 1/8-10 2/8-10 2/8-10 - 2/8-10
Количество модулей захвата/сравнения - 1 2 2 - 2
Аналоговый компаратор + + + + - +
SPI (загрузка ROM и EEPROM) + + + + + +
SPI интерфейс (Master/Slave port) - - + + - +
Сторожевой таймер + + + + + +
Асинхронный последовательный порт - + + + - +
Аналого - цифровой преобразователь - - - - - +
Количество битов защиты

2

Число источников прерывания: внутренних/внешних 2/1 8/2 10/2 10/2 2/1 11/2
Тип корпуса

DIP20, SOIC20, SSOP20

DIP40, PLCC44, TQFP44

DIP8, SOIC8 DIP28, PLCC28

ПРИЛОЖЕНИЕ 5.
Основные характеристики микроконтроллеров AVR

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...