Для цього, по-перше, необхідно сконфігурувати регістри портів вводу-виводу на виконання операцій, що були зазначені для них, під час розробки принципової схеми. Конфігурування відбувається шляхом встановлення та скидання необхідних бітів у регістрах PORTх (рядки 25-38) та DDRх (рядки 39-50), а також читанням стану виводів портів через регістр PINx.
По-друге, сконфігорувати регістри вводу-виводу, що відображають внутрішнє налаштування периферійних пристроїв МК, а саме АЦП, таймера-лічильника Т1, зовнішнього ОЗП, модуля USART.
Для конфігурування АЦП необхідно встановити регістри ADCSRA та ADMUX (рядки 4-7, 52-57).
Для конфігурування таймера-лічильника Т1, щоб він працював як ШІМ, необхідно сконфігурувати регістри TCCR1A, TCCR1B, TCCR1C (рядки 13-15, 73-87).
Для конфігурації роботи із зовнішнім ОЗП використовуються регістри XMCRA, XMCRB (рядки 8, 9, 58-63).
Для конфігурування модуля USART використовуються UCSR0A, UCSR0B, UCSR0C (рядки 10-12, 64-72).
Лістинг програми
№ | Мітка | Команда | Операнди | Примітка |
1 | .nolist | |||
2 | .include | "С:\Kursovoy\PMS_Kursovoy \"m1281def.inc" | ||
3 | .list | |||
;--Содержимое регистров | ||||
4 | .equ | ADCRS = 0b10000101 | ;ADEN=1 - АЦП включ., ADSC=0, ;ADATE=0 (одиночный режим), ADIF=0, ;ADEN=0, ADFPS[2..0]=101 (делитель ;частоты на 32) --> рабочая частота ;АЦП=2МГц : 32 = 62,5кГц | |
5 | .equ | ADMX0 = 0b00000000 | ;несимметричный вход ADC0, внешнее ;опорное напряжение | |
№ | Мітка | Команда | Операнди | Примітка |
6 | .equ | ADMX6 = 0b00000110 | ;несимметричный вход ADC6, внешнее ;опорное напряжение | |
7 | .equ | ADMX3_1 = 0b00010011 | ;симметричный входы ADC3-1, внешнее ;опорное напряжение | |
8 | .equ | XMCR_A = 0b10000001 | ;SRE=1 (разрешена работа с вн. ОЗУ), ;SRL[2..0]=0 (один сектор), ;SRW[11..00]=0001 (один такт ожидания) | |
9 | .equ | XMCR_B = 0b00000100 | ;XMBK=0, биты 6-3 зарезервир ;XMM[2..0]=100 (выводы РС[7..4] могут ;свободно использоваться как порты ВВ) | |
10 | .equ | UCSRA = 0b00100000 | ; регистр А управления USART | |
11 | .equ | UCSRB = 0b00000010 | ; регистр B управления USART | |
12 | .equ | UCSRC = 0b00100110 | ;UMSEL[01..00]=00 (асинхр. режим ;работы), UPM[01..00]=10 (проверка на ;четность), UCSZ[01..00 (8-ми битный ;формат посылок)] | |
13 | .equ | TCCRA = 0b00110010 | ;COM1A[1..0]=00 отключен вывод ;OCR1A, COM1B[1..0]=11 OCR1B при ;прямом счете на выходе равен 1, при ;инверстном счете - 0, COM1C[1..0]=00 ;отключен вывод OCR1C, ;WGM[11..10]=10 определяет 10 режим ;работы | |
14 | .equ | TCCRB = 0b00010010 | ;WGM[13..12]=10 определяет 10 режим ;работы, CS[12..10]=010 источник ;тактового сигнала (clk_IO/8) | |
15 | .equ | TCCRC = 0b00000000 | ; регистр управления Т1 | |
;--Рабочие регистры | ||||
16 | .def | t0 =r16 | ; регистру r16 присвоить имя t0 | |
17 | .def | t1 =r17 | ; регистру r176 присвоить имя t10 | |
;--Начало | ||||
18 | .cseg | ; начало сегмента кода | ||
19 | .org 0 | |||
20 | rjmp | Initial | ; переход к подпрограмме Initial | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация МК | ||||
21 | Initial: | ldi | t1, low(RAMEND) | ;инициализация |
22 | out | SPL, t1 | ;младшего и старшего байтов | |
23 | ldi | t1, high(RAMEND) | ;указателя | |
24 | out | SPH, t1 | ;стека | |
;--Конфигурация портов ввода-вывода ;--Включаем подтягивающие резисторы и задаем начальное значение выводов | ||||
25 | ldi | t0, 0x00 | ; для порта А не требуются | |
26 | out | PORTA, t0 | ; подтягивающие резисторы | |
27 | ldi | t0, 0b00111111 | ; для выводов PB5-0 включить | |
28 | out | PORTB,t0 | ; подтягивающие резисторы | |
29 | ldi | t0, 0b11110000 | ; для выводов PС7-4 включить | |
30 | out | PORTC,t0 | ; подтягивающие резисторы | |
31 | ldi | t0, 0b11000000 | ; для выводов PD7, PD6 включить | |
32 | out | PORTD,t0 | ; подтягивающие резисторы | |
33 | ldi | t0, 0b11111101 | ; для всех выводов портаЕ, кроме РF1, | |
№ | Мітка | Команда | Операнди | Примітка |
34 | out | PORTЕ,t0 | ;включить подтягивющие резисторы | |
35 | ldi | t0, 0xFF | ; для всех выводов порта F | |
36 | out | PORTF,t0 | ;включить подтягивющие резисторы | |
37 | ldi | t0, 0b11100000 | ; для выводов порта PG7-5 | |
38 | out | PORTG,t0 | ;включить подтягивющие резисторы | |
;--Конфигцрируем выводы портов (режим работы) | ||||
39 | ldi | t1, 0xFF | ;выводы РА | |
40 | out | DDRA, t1 | ;определить как выходы | |
41 | ldi | t1, (1<<DDB7)|(1<<DDB6) | ;выводы РВ7, РВ6 определить как | |
42 | out | DDRB,t1 | ;выходы, остальные - как входы | |
43 | ldi | t1, (1<<DDC3)|(1<<DDC2)| (1<<DDC1)|(1<<DDC0) | ; выводы РС3-0 определить как выходы | |
44 | out | DDRC,t1 | ; остальные – как входы | |
45 | ldi | t1, (1<<DDD5)|(1<<DDD4)| (1<<DDD3)|(1<<DDD2)| (1<<DDD1)|(1<<DDD0) | ; выводы PD6, PD7 определить как ; входы | |
46 | out | DDRD,t1 | ;остальные выводы – как выходы | |
47 | ldi | t1, (1<<DDE1) | ; вывод РЕ1 установить как выход, | |
48 | out | DDRE,t1 | ;остальные как вход | |
49 | ldi | t1, (1<<DDG4)|(1<<DDG3)| (1<<DDG2)|(1<<DDG1)| (1<<DDG0) | ;выводы PG7-5 установить как входы | |
50 | out | DDRG,t1 | ;остальные как выходы | |
51 | nop | |||
;--Инициализация АЦП | ||||
52 | ldi | t1, ADMX0 | ;записать в регистр ADMUX значение | |
53 | ldi | XL, ADMUX | ;соответствующее необходимому режиму | |
54 | st | X, t1 | ;работы мультиплексора АЦП | |
55 | ldi | t1, ADCRS | ;записать в регистр ADCSRA значение | |
56 | ldi | XL, ADCSRA | ;соответствующее необходимому режиму | |
57 | st | X,t1 | ;работы АЦП | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация работы с внешним ОЗУ | ||||
58 | ldi | t1, XMCR_A | ;сконфигурировать регистр А | |
59 | ldi | XL, XMCRA | ;управления | |
60 | st | X, t1 | ; внешним ОЗУ | |
61 | ldi | t1, XMCR_B | ;сконфигурировать регистр В | |
62 | ldi | XL, XMCRB | ;управления | |
63 | st | X, t1 | ; внешним ОЗУ | |
;--Порт USART | ||||
64 | ldi | t1, UCSRA | ;сконфигурировать регистр А | |
65 | ldi | XL, UCSR0A | ;управления | |
66 | st | X, t1 | ; модулем USART | |
67 | ldi | t1, UCSRB | ;сконфигурировать регистр B | |
68 | ldi | XL, UCSR0B | ;управления | |
69 | st | X, t1 | ; модулем USART | |
70 | ldi | t1, UCSRC | ;сконфигурировать регистр C | |
71 | ldi | XL, UCSR0C | ;управления | |
72 | st | X, t1 | ; модулем USART | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация ШИМ | ||||
73 | ldi | t1, TCCRA | ;сконфигурировать регистр А | |
74 | ldi | XL, TCCR1A | ;управления | |
75 | st | X, t1 | ;таймером-счетчиком Т1 | |
76 | ldi | t1, TCCRB | ;сконфигурировать регистр В | |
77 | ldi | XL, TCCR1B | ;управления | |
78 | st | X, t1 | ;таймером-счетчиком Т1 | |
79 | ldi | t1, TCCRC | ;сконфигурировать регистр С | |
80 | ldi | XL, TCCR1C | ;управления | |
81 | st | X, t1 | ;таймером-счетчиком Т1 | |
82 | ldi | t0, 0x07 | ; установка коеффициента | |
83 | ldi | XL, ICR1H | ; пересчета ТОР | |
84 | st | X, t0 | ; равного | |
85 | ldi | t0, 0xFF | ; ТОР=2^(N-1), где | |
86 | ldi | XL, ICR1L | ; N=11, т.е. | |
87 | st | X, t0 | ; ТОР=2047 | |
;--Инициализация ЖКИ | ||||
88 | initLCD_1: | ldi | t0,$20 | ;4-битный интерфейс, 1-строка, шрифт-5х7 точек |
89 | initLCD_2: | ldi | t0,$0C | ;включить дисплей, выключить курсор |
90 | initLCD_3: | ldi | t0,$01 | ;очистить дисплей и установить курсор в начальную позицию |
91 | nop | |||
92 | ret |
Висновок
В данній курсовій работі була розроблена система управління та керування об’єктом на базі одно кристального RISK AVR-мікроконтролера ATMega1281V-8AU , що складається з:
- Системи аналогового вводу інформації;
- Системи аналогового виводу інформації;
- Системи дискретного вводу інформації;
- Системи дискретного виводу інформації;
- Клавіатура;
- Індикація;
- Зовнішній ОЗП;
- Інтерфейс зв’язку з ПЕОМ.
Список використаних джерел
1. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. – М.: Издательский дом «Додэка-ХХІ», 2007. – 592с.: ил.
2. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. Изд.2-е, испр. и доп. – М.: СОЛОН-Пресс, 2004. – 304с.
3. Трамперт В. Измерение, управление и регулирование с помощью AVR микроконтроллеров.: Пер. с нем. – К.: «МК-Пресс», 2006. – 208с.
4. Микропроцессоры: В 3 кн. Кн. 2. Средства сопряжения. Контролирующие и информационно-управляющие системы: Учеб. для втузов/В.Д. Вернер, Н.В. Воробьев, А.В. Горячев и др.; Под. ред. Л.Н. Преснухина. – М.: Высш. шк., 1986. -383 с.: ил.
5. http://atmel.ru/Articles/Atmel17.htm
6. http://tehdoka.ru/BP/mst.php
7. http://www.gaw.ru/html.cgi/txt/interface/rs232/