Простейшая операция на AVR

Автор: Пользователь скрыл имя, 20 Марта 2012 в 11:08, курсовая работа

Описание работы

Необходимо разработать систему управления на базе микроконтроллера, реализующего заданный алгоритм. Система должна содержать микроконтроллер, устройство ввода для ввода информации, устройство вывода информации, для отображения промежуточных и конечных результатов.

Содержание

Постановка задачи
Описание разработанной структуры
Описание функциональной схемы
Описание принципиальной схемы
Описание блочного алгоритма
Описание базовых элементов
Спецификация
Программа
Заключение
Список использованной литературы
Приложение
11.1: Схема разработанной структуры
11.1: Функциональная схема разработанной структуры
11.2: Принципиальная электрическая схема разработанной структуры
11.3: Блочный алгоритм разработанной структуры

Работа содержит 4 файла

Блок Схема.docx

— 19.64 Кб (Открыть, Скачать)

Курсовая(описание разработанной структуры).doc

— 42.00 Кб (Открыть, Скачать)

Курсовая(функциональная и принципиальная схемы1).doc

— 131.50 Кб (Открыть, Скачать)

Курсовой.docx

— 116.17 Кб (Скачать)

Микроконтроллер  AT90S2313 имеет следующие характеристики: 2 Кб загружаемой флэш-памяти; 128 байт EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; два таймера/счетчика; встроенный последовательный порт; программируемый сторожевой таймер со встроенным генератором; последовательный порт SPI для загрузки программ; два выбираемых программно режима низкого потребления.

Особенности микроконтроллера:

  • Быстрая RISK-архитектура загрузки и выполнения большинства инструкций в течение одного цикла тактового генератора.
  • Программы содержатся в электрически перепрограммируемой постоянной памяти программ FLASH ROM. Память может быть перепрограммирована до 1000 раз. Возможность внутрисхемного программирования.
  • Имеет 32 регистра все из которых напрямую соединены с АЛУ. Это значительно уменьшает размер программ.
  • очень небольшое потребление энергии и наличие нескольких режимов работы с пониженным потреблением энергии.

Характеристики микроконтроллера

  • 2 Кб Flash памяти программ.
  • 128 байт ОЗУ данных SRAM.
  • 128 байт память данных EEPROM.
  • 120 команд
  • 15 линий ввода/вывода
  • Количество прерываний -10
  • Напряжение питания 2.7 -6.0 В.
  • Тактовая частота 0-10 МГц.

Кнопочная база

В качестве кнопочной базы выбрана кнопка SPL12P-5-02-00-G

Характеристики:

  • Размер 12х12 мм
  • Максимальная сила протекающего тока – 50 mA
  • Максимальное напряжение –  12 В
  • Рабочая температура – от +10°С до +60°С
  • Срок механической службы - мин. 100 000 нажатий 
    6.Спецификация элементов принципиальной электрической схемы и расчет характеристик.

 

 

Ф-т

ПОЗ

Обозначение

Наименование

Кол-во

Примечание

     

Документация

   

А4

   

Принципиальная электрическая  схема управления микропроцессорной  системы

   
     

Стандартные изделия

   
 

1

VD1

Светодиод B3135P

1

 
 

2

И1,И2

Семисегментный индикатор SA08-21

2

 
 

3

C2-C3

КТ4-21Б – 15 пФ

2

 
 

4

С1

К-50-35 – 1 мкФ

1

 
 

5

S1-S17

Кнопка SPL12P-5-02-00-G

17

 
 

6

VT1-VT9

Транзистор КТ315Б

9

 
 

7

R1-R4

Резистор HP1-4-4M - 10 кОм

4

 
 

8

R5-R6

Резистор B54102-A1331-J60 - 330 Ом

2

 
 

9

R7-R13

Резистор B54102-A1680-J60 - 68 Ом

7

 
 

10

R14

Резистор B54102-A1102-J60 - 1 кОм

1

 
 

11

R15

Резистор С1-41вт - 130 Ом

1

 

12

R1

6


Резистор С2 – 23 -510 Ом

1

13

HS

Кварцевый резонатор HS-49SM 10 МГц

1



 

Расчет характеристик  элементов электронно-принципиальной схемы.

 

  • R1-R13

Необходимо ввести эти  сопротивления, иначе будет короткое замыкание

R1=R2=R3=R4=10 кОм

R5=R6=330 Ом

R7=…=R13= 68 Ом

  • R14 =1 кОм
  • R15

R=( Uпит-Uпад)/( I*0.75), где

 

Uпит - напряжение питания

Uпад – падение напряжения на диоде

I – максимальный прямой ток диода

R – сопротивление резистора

0,75 – коэффициент надежности  светодиода   

 

R15=(5-3)/(0.02*0.75)

R15=133.3 Ом.

Выбираем R15 сопротивлением 130 Ом.

 

  • R16

Внешний сброс формируется  подачей сигнала на вывод RESET

на время не менее двух тактов цикла кварцевого генератора

 

Tтакта=0,25 мкс, следовательно t =>0.5 мкс

 

Возьмем t=0.5мс и выберем конденсатор С1 емкостью 0,1 мкФ

Тогда R16 равен

t=R*C; R16=500Ом.

 

7.Текст программы.

 

.EQU Stack=$70

.ORG $0

 rjmp Start

.ORG $30

Start: ;Иниц. стека

ldi R16,high(Stack)

out SPH,R16

ldi R16,low(Stack)

out SPL,R16

 

ldi R24,$80

out $11,R24  ;DDRD-уст. реж порта D. PD0-PD6- выходы.

 

ldi R16,$0F  ;PB0-3,выходы,PB4-7 входы

out $17,R16  ;DDRB

 

ldi R16,$20  ;устанавливаем 0 для отображения на 1 индикаторе

ldi R17,$10  ;устанавливаем 0 для отображения на 2 индикаторе

MainCycle:

rcall ReadKey  ;вызываем подпрограмму определения кода нажатой клавиши

rcall light  ; вызываем подпрограмму отображения числа на индикаторах

brcc MainCycle           ; если флаг C установлен, определяем номер клавиши

rcall DocKey1  ;вызываем программу определения номера клавиши 1

clc   ; снимаем флаг С

metka1:

rcall ReadKey

rcall light

brcc metka1

rcall DocKey2   ;вызываем программу определения номера клавиши 2

clc

rcall Work         ;вызываем подпрограмму основной работы

brcc MainCycle

clc

metka2:

rcall light

ldi R24,$B0  ;зажигаем сигнал окончания работы

out $12,R24  ;программы

rjmp metka2

;******Процед. опр-я кода  клав*****

ReadKey:

        ldi R18,$0F  ;0000 1111 на порт B

         out $18,R18  ;PORTB

        cbi $18,0  ;0 в PORTD.0 - строку A (A1-A3)

         nop

         nop

         nop

         in R21,$16  ;PINB чтение сост-й линий порта B

         andi R21,0b11111111

         cpi R21,0b11111110  ;Сравн-е входов с шаблоном ненажатых клавиш

         brne Hit   ;Неравно - была нажата клавиша, повторный опрос

         sbi $18,0  ;Равно, Восстанавл. сост-е линии PORTB.0

         cbi $18,1  ;0 в строку B(B1-B3)

         nop

         nop

         in R21,PINB  ;чтение сост-я линий порта B

         andi R21,0b11111111;выделение входов

         cpi R21,0b11111101 ;ср-е вх. с шабл. нажат. клав.

         brne Hit   ;не равно - была нажата клав., повт. опрос

         sbi $18,1  ;равно, восст. сост-е линии PORTB.1

cbi $18,2  ;0 - в строку C (С1-С3)

         nop

         nop

         in R21,PINB  ;PINB чтение сост-й линий порта B

         andi R21,0b11111111 ;выделение входов

         cpi R21,0b11111011   ;Сравн-е входов с шаблоном ненажатых клавиш

         brne Hit   ;Неравно - была нажата клавиша, повторный опрос

         sbi $18,2  ;Равно, Восстанавл. сост-е линии PORTB.2

cbi $18,3  ;0 - в строку D (D1-D3)

         nop

         nop

         in R21,PINB  ;PINB чтение сост-й линий порта B

        andi R21,0b11111111

         cpi R21,0b11110111   ;Сравн-е входов с шаблоном ненажатых клавиш

         brne Hit   ;Неравно - была нажата клавиша, повторный опрос

         sbi $18,3  ;Равно, Восстанавл. сост-е линии PORTB.3

         clc

         rjmp zzz   ;выход, если ничего не нажато

Hit:    ;Повт чтение для устр-я дребезга (через 0.1 сек)

         clc   ;сброс флага переноса

         mov R20,R21  ;сохр. код клав. в R20

         in R21,PINB  ;чтение сост-я линий порта B

        andi R21,0b11111111 ;выдел-е входов

         ldi R18,$0F  ;восст-е 0000 1111 на порте B

         out $18,R18

         cp R20,R21  ;если совпало, значит нажатие истинно

         brne zzz

         mov R19,R21   ;заносим код клавиши в R19

         sec   ;и уст. фла нажатия клавиши

zzz:

        ret

 

;****Проц. опр-я номера клавиши  1*****

DocKey1:

         cpi R19,0b11100111  ;Сравниваем код клавиши с шаблоном

         brne Kcod2  ; если не равно- переходим к метке Kcod2   

        ldi R20,$00  ;номер клав. S1

         rjmp Kcodend1

Kcod2:

         cpi R19,0b11101011

         brne Kcod3

         ldi R20,$01  ;номер клав. S5

         rjmp Kcodend1

Kcod3:

         cpi R19,0b11101101

        brne Kcod4

         ldi R20,$02  ;номер клав. S9

         rjmp Kcodend1

Kcod4:

         cpi R19,0b11101110

         brne Kcod5

         ldi R20,$03  ;номер клав. S13

         rjmp Kcodend1

Kcod5:

         cpi R19,0b11010111

         brne Kcod6

         ldi R20,$04  ;номер клав. S2

         rjmp Kcodend1

Kcod6:

         cpi R19,0b11011011

         brne Kcod7

         ldi R20,$05  ;номер клав. S6

         rjmp Kcodend1

Kcod7:

         cpi R19,0b11011101

         brne Kcod8

         ldi R20,$06  ;номер клав. S10

         rjmp Kcodend1

Kcod8:

         cpi R19,0b11010110

         brne Kcod9

         ldi R20,$07  ;номер клав. S14

         rjmp Kcodend1

Kcod9:

cpi R19,0b10110111

brne Kcod10

ldi R20,$08  ;номер клав. S3

rjmp Kcodend1

Kcod10:

         cpi R19,0b10111011

         brne Kcod11

         ldi R20,$09  ;номер клав. S7

         rjmp Kcodend1

Kcod11:

         cpi R19,0b10111101

         brne Kcod12

         ldi R20,$0A  ;номер клав. S11

         rjmp Kcodend1

Kcod12:

         cpi R19,0b10111110

         brne Kcod13                                                   

         ldi R20,$0B  ;номер клав. S15

rjmp Kcodend1

Kcod13:

         cpi R19,0b01110111

         brne Kcod14

         ldi R20,$0C  ;номер клав. S4

         rjmp Kcodend1

Kcod14:

         cpi R19,0b01111011

         brne Kcod15

         ldi R20,$0D  ;номер клав. S8

         rjmp Kcodend1

Kcod15:

         cpi R19,0b01111101

         brne Kcod16

         ldi R20,$0E  ;номер клав. S12

         rjmp Kcodend1

Kcod16:

         cpi R19,0b01110110

         brne Kcodend1                                                   

         ldi R20,$0F  ;номер клав. S16

 

Kcodend1:                  

     adiw R20, $D0  ;Устанавливаем бит включения 1 светодиода

mov R16,R20  ; заносим в регистр R6 значения для 1 индикатора

     

ret

 

 

 

 

 

;****Проц. опр-я номера клавиши  2*****

DocKey2:

         cpi R19,0b11100111

         brne Kcod21

        ldi R20,$00  ;номер клав. S1

         rjmp Kcodend2

Kcod21:

        cpi R19,0b11101011

         brne Kcod31

         ldi R20,$01  ;номер клав. S5

         rjmp Kcodend2

Kcod31:

         cpi R19,0b11101101

        brne Kcod41

         ldi R20,$02  ;номер клав. S9

         rjmp Kcodend2

Kcod41:

         cpi R19,0b11101110

         brne Kcod51

         ldi R20,$03  ;номер клав. S13

         rjmp Kcodend2

Kcod51:

         cpi R19,0b11010111

         brne Kcod61

         ldi R20,$04  ;номер клав. S2

         rjmp Kcodend2

Kcod61:

         cpi R19,0b11011011

         brne Kcod71

         ldi R20,$05  ;номер клав. S6

         rjmp Kcodend2

Kcod71:

         cpi R19,0b11011101

         brne Kcod81

         ldi R20,$06  ;номер клав. S10

         rjmp Kcodend2

Kcod81:

         cpi R19,0b11011110

         brne Kcod91

         ldi R20,$07  ;номер клав. S14

         rjmp Kcodend2

Kcod91:

         cpi R19,0b10110111

         brne Kcod101

         ldi R20,$08  ;номер клав. S3

         rjmp Kcodend2

Kcod101:

         cpi R19,0b10111011

         brne Kcod111

         ldi R20,$09  ;номер клав. S7

         rjmp Kcodend2

Kcod111:

         cpi R19,0b10111101

         brne Kcod121

         ldi R20,$0A  ;номер клав. S11

         rjmp Kcodend2

Kcod121:

         cpi R19,0b10111110

        brne Kcod131                                                   

         ldi R20,$0B  ;номер клав. S15

rjmp Kcodend2

Kcod131:

         cpi R19,0b01110111

         brne Kcod141

         ldi R20,$0C  ;номер клав. S4

         rjmp Kcodend2

Kcod141:

         cpi R19,0b01111011

         brne Kcod151

         ldi R20,$0D  ;номер клав. S8

         rjmp Kcodend2

Kcod151:

         cpi R19,0b01111101

         brne Kcod161

         ldi R20,$0E  ;номер клав. S12

        rjmp Kcodend2

Kcod161:

         cpi R19,0b01111110

         brne Kcodend2                                                   

         ldi R20,$0F  ;номер клав. S16

 

Kcodend2:                  

      adiw R20,$E0  ;Устанавливаем бит включения 2 светидиода

mov R17,R20   ; заносим в регистр R7 значения для 2 индикатора  

ret

Laight:

out $12,R16  ;PORTD       ;выдаем код на шину данных индикатора 1

out $12,R17  ;PORTD       ;выдаем код на шину данных индикатора 2

ret

Work:

mov R23,R16  ; получаем десятки

swap R23  ;переменной PAROU

add R23,R17  ;получаем еденицы числа переменной PAROU 

cpi R23,$05  ;сравниваем получившееся число с параметром DOP

breq men  ;если не равно переходим на метку men

sec   ;устанавливаем флаг С (конец программы)

rjmp endWork

men:

cpi R23,$05  ;сравниваем получившееся число с параметром DOP

brsh bol   ;если больше переходим на метку bol

lds R23,$82  ;загружаем в регистр значение PARIN

adiw R23,$05  ;прибавляем к значению PARIN 05

sts $82,R23  ;загружаем в ОЗУ получившееся значение PARIN

mov R16,R23  ;Помещаем получившееся число в R6

adiw R16,$D0  ;получаем значение для вывода на 1 индикатор

mov R17,R23  ;Помещаем получившееся число в R17

swap R17  ;меняем ниблы местами

adiw R17,$E0  ;получаем значение для вывода на 2 индикатор

rjmp endWork

bol:

lds R23,$82  ; загружаем в регистр значение PARIN

sbi R23,$04  ;вычитаем из значения PARIN 04

sts $82,R23  ; загружаем в ОЗУ получившееся значение PARIN

mov R16,R23  ;Помещаем получившееся число в R6

adiw R16,$D0  ;получаем значение для вывода на 1 индикатор

mov R17,R23  ;Помещаем получившееся число в R17

swap R17  ;меняем ниблы местами

adiw R17,$E0  ;получаем значение для вывода на 2 индикатор  

endWork:

ret

 

Заключение

В данной курсовой работе было разработано устройство, которое  реализует заданный алгоритм в соответствии с вариантом. В устройство входят клавиатура, с помощью которой  вводим данные и индикаторы, которые  отображают промежуточные и конечные результаты.

 

Список используемой литературы:

 

  1. М.С. Голубцов «Микроконтроллеры AVR : от простого к сложному».
  2. Майк Предко «Руководство по микроконтроллерам».
  3. И.И Кузнецов «Техника микропроцессорных систем в коммутации. Микроконтроллеры AVR.»
  4. Вольфганг Тамперт «AVR-RISK микроконтроллеры».

 




Информация о работе Простейшая операция на AVR