Библиографический список использованных источников
1. Предко М. Руководство по микроконтроллерам. Том 1. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 416 с. 2. Предко М. Руководство по микроконтроллерам. Том 2. / Пер. с англ. под ред. И. И. Шагурина и С. Б. Лужанского – М.: Постмаркет, 2001. – 488 с. 3. Cady, Fredrick M. Microcontrollers and microcomputers: principles of software 4. Вуд А. Микропроцессоры в вопросах и ответах. / Пер. с англ. под ред. Д. А. Поспелова. – М.: Энергоатомиздат. 1985. – 184 с. 5. Уильямс Г.Б. Отладка микропроцессорных систем: / Пер. с. англ. – М.: Энергоатомиздат, 1988. – 253с. 6. Угрюмов Е.П. Цифровая схемотехника. – Спб.: БВХ – Санкт-Петербург, 7. Алексенко А.Г., Шагурин И.И. Микросхемотехника. – М.: Радио и связь, 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, 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 Data Book [16,19]. Таблица А.1. Арифметические и логические инструкции.
Таблица А.2. Инструкции ветвления.
* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI, необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ свыше 128KB, добавьте пять циклов плюс по три цикла на каждое ожидание.
Таблица А.3. Инструкции передачи данных.
* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для каждого ожидания.
Таблица А.4. Инструкции работы с битами.
§ 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.
ПРИЛОЖЕНИЕ 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
ПРИЛОЖЕНИЕ 5.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|