Автор: Пользователь скрыл имя, 20 Марта 2012 в 11:08, курсовая работа
Необходимо разработать систему управления на базе микроконтроллера, реализующего заданный алгоритм. Система должна содержать микроконтроллер, устройство ввода для ввода информации, устройство вывода информации, для отображения промежуточных и конечных результатов.
Постановка задачи
Описание разработанной структуры
Описание функциональной схемы
Описание принципиальной схемы
Описание блочного алгоритма
Описание базовых элементов
Спецификация
Программа
Заключение
Список использованной литературы
Приложение
11.1: Схема разработанной структуры
11.1: Функциональная схема разработанной структуры
11.2: Принципиальная электрическая схема разработанной структуры
11.3: Блочный алгоритм разработанной структуры
Микроконтроллер AT90S2313 имеет следующие характеристики: 2 Кб загружаемой флэш-памяти; 128 байт EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; два таймера/счетчика; встроенный последовательный порт; программируемый сторожевой таймер со встроенным генератором; последовательный порт SPI для загрузки программ; два выбираемых программно режима низкого потребления.
Особенности микроконтроллера:
Характеристики
Кнопочная база
В качестве кнопочной базы выбрана кнопка SPL12P-5-02-00-G
Характеристики:
Ф-т |
ПОЗ |
Обозначение |
Наименование |
Кол-во |
Примечание |
Документация |
|||||
А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 |
||
|
R1 |
||||
|
Кварцевый резонатор HS-49SM 10 МГц |
Расчет характеристик
элементов электронно-
Необходимо ввести эти сопротивления, иначе будет короткое замыкание
R1=R2=R3=R4=10 кОм
R5=R6=330 Ом
R7=…=R13= 68 Ом
R=( Uпит-Uпад)/( I*0.75), где
Uпит - напряжение питания
Uпад – падение напряжения на диоде
I – максимальный прямой ток диода
R – сопротивление резистора
0,75 – коэффициент надежности светодиода
R15=(5-3)/(0.02*0.75)
R15=133.3 Ом.
Выбираем R15 сопротивлением 130 Ом.
Внешний сброс формируется подачей сигнала на вывод 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
Заключение
В данной курсовой работе было разработано устройство, которое реализует заданный алгоритм в соответствии с вариантом. В устройство входят клавиатура, с помощью которой вводим данные и индикаторы, которые отображают промежуточные и конечные результаты.
Список используемой литературы: