- •Часть 1
- •Содержание
- •Исследование системы команд микроконтроллеров семейства avr и средств поддержки разработок avr-Studio и WinAvr
- •2.2. Системы поддержки разработок для микроконтроллеров avr
- •2.3. Описание компилятора ассемблера avr
- •3. Создание программ в avr-Studio и WinAvr
- •3.1. Создание простейшей программы и её отладка средствами avr-Studio
- •3.2. Создание простейшей программы и её отладка средствами WinAvr
- •4. Программа исследования
- •5. Содержание отчета
- •1.6. Контрольные вопросы
- •Построение микропроцессорной системы на основе микроконтроллера семейства avr
- •2.2.2. Использование внешнего озу
- •3. Пример построения схемы мпс
- •3.1. Постановка задачи
- •3.2. Организация шины адреса
- •3.3. Организация шины данных
- •3.5. Организация подсистемы впд
- •3.6. Подключение периферийных микросхем (внешних устройств) в адресное пространство внешней памяти
- •4. Программа исследования
- •4.1. Внеаудиторная подготовка
- •4.2. Выполнение работы в лаборатории
- •4.3. Задание на исследование
- •5. Содержание отчета
- •6. Контрольные вопросы
- •Исследование функционирования мпс на примере стенда can128
- •2.2. Запись в и чтение из flash памяти микроконтроллера с помощью ponyprog и макета can128.
- •3. Описание лабораторной установки
- •4. Задание на лабораторную работу
- •5. Содержание отчёта
- •6. Контрольные вопросы
- •Исследование вывода информации на жидкокристаллический индикатор
- •2.2. Способы управления bc1602h
- •3. Описание лабораторной установки
- •3. Задание на исследование
- •4. Содержание отчёта
- •5. Контрольные вопросы
- •Библиографический список
- •Приложение а (обязательное) Варианты индивидуальных заданий на лабораторную работу №1
- •Приложение б (обязательное) Текст учебной программы на ассемблере для лабораторной работы №3
- •Приложение в (справочное) Пример программы для вывода на жки
Приложение б (обязательное) Текст учебной программы на ассемблере для лабораторной работы №3
. include "can128def.inc"
.ORG 0x00
start:
; Инициализация стека
ldi r16,low(ramend)
out SPL,r16
ldi r16,high(ramend)
out SPH,r16
;====================
loop:
call ScanKey
call led_out
rjmp loop
jmp start
// данные в регистре r18
led_out:
push r16
// На вывод
ldi r16,0xFF
out DDRA,r16
out PORTA,r20
// Защёлка
sbi DDRG,3
sbi PORTG,3
cbi PORTG,3
// ----------------
pop r16
ret
// Функия задержки
delay:
push r18
push r19
push r20
ldi r18,0xFF
ldi r19,0xFF
ldi r20,0x03
dd:
dec r18
brne dd
dec r19
brne dd
dec r20
brne dd
pop r20
pop r19
pop r18
ret
//-------------------
// Функция чтения строки клавиатуры
// номер столбца - r17
// значение столбца - r18
ReadColumn:
ldi r16,0x0F
out DDRD,r16
out PORTD,r17
inc r17
in r18,PIND
andi r18,0xF0
swap r18
ret
// Функция преобразования кода клавиатуры в десятичный код
CodeSolve:
cpi r18,0x0E
brne next2
ldi r20,1
rjmp return
next2:
cpi r18,0x0D
brne next3
ldi r20,5
rjmp return
next3:
cpi r18,0x0B
brne next4
ldi r20,9
rjmp return
next4:
cpi r18,0x07
brne next5
ldi r20,13
rjmp return
return:
add r20,r17
dec r20
ldi r18,0xFF
next5:
ret
// Функция сканирования клавиатуры
ScanKey:
push r16
push r17
push r18
ldi r17,0
call ReadColumn
call CodeSolve
cpi r18,0xFF
breq end
call ReadColumn
call CodeSolve
cpi r18,0xFF
breq end
call ReadColumn
call CodeSolve
cpi r18,0xFF
breq end
call ReadColumn
call CodeSolve
cpi r18,0xFF
breq end
end:
pop r18
pop r17
pop r16
ret
Приложение в (справочное) Пример программы для вывода на жки
Пример приведен для микроконтроллера AT90CAN128, работающего на частоте 8 МГц с использованием NIMER0 в режиме CTC.
.include "can128def.inc"
.equ D7 = PD0
.equ D6 = PD1
.equ D5 = PD2
.equ D4 = PD3
.equ E = PD4
.equ RW = PD5
.equ RS = PD6
start:
; Инициализация стека
ldi r16,low(ramend)
out SPL,r16
ldi r16,high(ramend)
out SPH,r16
; На вывод
ldi r16,0xFF
out DDRD,r16
call delay ;Задержка 15 мс
; 1- я
ldi r16,(1<<D5)+(1<<D4)
out PORTD,r16
call delay ;Задержка 4.1 мс
; 2- я
ldi r16,(1<<D5)+(1<<D4)
out PORTD,r16
call delay ;Задержка 100 мкс
; 3- я
ldi r16,(1<<D5)+(1<<D4)
out PORTD,r16
; Блок
ldi r16,(1<<D5)+(1<<D4)
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,(1<<D5)
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,0
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,0
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,(1<<D7)
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,0
out PORTD,r16
call delay ;Задержка 100 мкс
;--------------------
ldi r16,0
out PORTD,r16
call delay ;Задержка 100 мкс
; Конец Инициализации
loop:
rjmp loop
// command
cbi PORTD,RS ; RS = 0
cbi PORTD,RW ; RW = 0
; Старшая часть
ldi r16,(0<<D4)+(0<<D5)+(0<<D6)+(0<<D7)
out PORTD,r16
sbi PORTD,E ; E = 1
cbi PORTD,E ; E = 0
; Младшая часть
ldi r16,(1<<D4)+(1<<D5)+(0<<D6)+(1<<D7)
out PORTD,r16
sbi PORTD,E ; E = 1
cbi PORTD,E ; E = 0
rjmp start
// Функия задержки
delay:
ldi r18,0xFF
ldi r19,0xFF
dd:
dec r18
brne dd
dec r19
brne dd
ret
Заказ № _______ от «_____» _______________ 20___ г. Тираж __________ экз.
Изд-во СевНТУ
