ЦМПУ / Новая папка / Лаб8ЦМПУ
.docxЛабораторная работа №8
«Связь двух микроконтроллеров»
Цель работы: Ознакомиться с принципом связи двух микроконтроллеров ATmega128 и их совместная работа.
Таблица. Варианты заданий для самостоятельной работы
№ Вар. |
Задание |
5 |
Произвести передачу разности чисел $72 и $3F с помощью интерфейса УСАПП. |
Данная программа реализует связь 2 МК Atmega128 через УСАПП. Итогом нашей программы является передача символов из одного МК в другой. Сначала активируем Watchdog. Затем активируем регистры УСАПП: TX/RCV. После этого устанавливаем задержку при передаче символов. На осциллографе можно увидеть отображение символом через сигналы.
Рис 8.12 Алгоритм основной программы
Рис 8.13 Алгоритм подпрограммы delay
Листинг проектного файла для передающего МК
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega128"
.PROGRAM "pere.asm"
.TARGET "pere.hex"
.TRACE ;
.CLOCK 1.8432meg
X1 TTY(9600 8) PE0 EXT_RX ;
Xlink1 EXTIN(1) EXT_RX ;
Xlink2 EXTOUT PE1 ;
.plot v(PE0) v(PE1) v(EXT_RX)
Листинг проектного файла №8 для принимающего МК
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega128"
.PROGRAM "prim.asm"
.TARGET "prim.hex"
.TRACE ; Activate micro trace
; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.CLOCK 1.8432meg
Xlink2 EXTIN(1) PE0
Xlink1 EXTOUT PE1
.plot V(PE0) v(PE1)
Листинг программы для передающего и принимающего МК
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
.include "C:\VMLAB312\include\m128def.inc"
.def temp = r16
.def j = r17
.def k = r18
.def temp1 = r19
.def temp2 = r20
.def temp3 = r21
; ***********************************************
; Reset aand Interrupt vectors
; ***********************************************
.cseg
.org $0
rjmp start ; Reset handler
.org URXC0addr ; UART выполнение прерываний,
rjmp uart_rx
.org UDRE0addr ; UART Данные регистра, пустое прерывание
rjmp uart_em
.org UTXC0addr ; UART Передача выполненного прерывания
rjmp uart_tx
; ************************************************
; UART RX service: it echoes the character into TX
; ************************************************
uart_rx:
in temp, UDR0
out UDR0, temp
reti
uart_tx: ;UART Передача завершена
reti
uart_em: ;UART Пустые данные TX
reti
; ************************************************
; Main
; ************************************************
start:
ldi temp1, $72
ldi temp2, $3F
sub temp1, temp2
ldi temp, 0x08 ; Включение Watchdog
wdr
out WDTCR, temp ;
ldi temp, 11 ; Установить 9600 бод для 1.8MHz
out UBRR0L, temp
ldi temp, 0xF8 ; Чтобы активировать все прерывания и TX / RCV
out UCSR0B, temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
sei ; позволить прерывания
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,high(RAMEND)
out SPH,temp
mov temp, temp1
; **************************************************
; Infinite loop, watchdog activation demonstrator
; **************************************************
forever:
ldi j, 5
loop1:
rcall delay
dec j ; Задержка
brne loop1
wdr ; Watchdog сброса, после долгого перерыва
rjmp forever
delay:
ldi k, 255
loop2:
dec k
brne loop2
ret