- •Лабораторная работа №1
- •Лабораторная работа №2
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №3
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №4
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №5
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №6
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №7
- •В программном окне «Source Code» программы Proteus набрать следующую программу:
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №9
В программном окне «Source Code» программы Proteus набрать следующую программу:
.device ATtiny2313
.def temp=r16
.cseg
.org 0
rjmp Init
Init:
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,0b11111100
out DDRB,temp
clr temp ; обнуляет переменную temp
out PortB,temp ;команда отключает подтягивающие резисторы
Proga:
sbis ACSR,ACO ;если бит ACO=0, то установка LED
rjmp Reset
sbi PortB,2
rjmp Proga
Reset:
cbi PortB,2
rjmp Proga
Произвести симуляцию программы и убедится в правильности работы программы/
Содержание отчета:
Название и цель работы.
Принципиальная схема устройства.
Результаты моделирования.
Выводы по лабораторной работе.
Лабораторная работа №7
ШИМ – широтно-импульсная модуляция
Цель работы: Исследование широтно-импульсной модуляции
Лабораторное задание
Разработать программу, обеспечивающую формирование широтно-импульсной модуляции
Порядок выполнения работы
Для выполнения работы необходимо в среде автоматизированного проектирования Proteus собрать схему устройства в соответствии с рисунком 1.
Рисунок 1 – Схема устройства
В программном окне «Source Code» программы Proteus набрать следующую программу:
.device ATtiny2313
.def temp=r16 ;назначение переменной temp РОН r16
.dseg
.cseg ;определяет начало сегмента программы
.org 0 ;начало первой строки программы
rjmp Reset ;относительный переход к метке
.org 0x0005
rjmp TIM1_OVF ;Timer1 Overflow Handler
Reset:
ldi temp,low(RAMEND);организация стека
out spl,temp;организация стека
ldi temp,0xff
out DDRB,temp
clr temp
out portB,temp
out DDRD,temp
ser temp
out portD,temp
ldi temp,(2<<COM1A0|2<<COM1B0|0<<WGM11|1<<WGM10)
out TCCR1A,temp
ldi temp,(0<<WGM13|1<<WGM12|1<<CS10)
out TCCR1B,temp
Proga:
CLI
ldi r18,0
out OCR1AH,r18
ldi temp,50
out OCR1AL,temp
sei
TIM1_OVF:
sbi portD,3
reti
Произвести симуляцию программы и убедится в правильности работы программы.
Изменить программный код для получения другой скважности импульсов.
Содержание отчета:
Название и цель работы.
Принципиальная схема устройства.
Результаты моделирования.
Выводы по лабораторной работе.
Лабораторная работа №8
Программирование SPI
Цель работы: Исследование интерфейса SPI
Лабораторное задание
Исследовать работу интерфейса SPI
Порядок выполнения работы
Для выполнения работы необходимо в среде автоматизированного проектирования Proteus собрать схему устройства в соответствии с рисунком 1.
Рисунок 1 – Схема устройства
Для микроконтроллера, работающего в режиме «мастера» задать файл из рабочей папки «SPI_MASTER».
Для микроконтроллера, работающего в режиме «ведомого» задать файл из рабочей папки «SPI_SLAVE».
Произвести симуляцию программы и убедится в правильности работы программы.
Содержание отчета:
Название и цель работы.
Принципиальная схема устройства.
Результаты моделирования.
Выводы по лабораторной работе.
Листинг программы для микроконтроллера работающего в режиме «мастер»
#include <mega328p.h>
#include <delay.h>
#include <spi.h>
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x00;
DDRB=0x2C;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
TIMSK0=0x00;
TIMSK1=0x00;
TIMSK2=0x00;
UCSR0B=0x00;
ACSR=0x80;
ADCSRB=0x00;
DIDR1=0x00;
ADCSRA=0x00;
SPCR=0x54;
SPSR=0x00;
TWCR=0x00;
while (1)
{
PORTB.2 = 0;
spi ('1');
delay_ms(200);
spi('0');
delay_ms(200);
PORTB.2 = 1;
}
}
Листинг программы для микроконтроллер, работающего в режиме «ведомого»
#include <mega328p.h>
#include <stdio.h>
#include <spi.h>
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
if (data == '1') PORTC.0 = 1;
if (data == '0') PORTC.0 = 0;
}
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x00;
DDRB=0x10;
PORTC=0x00;
DDRC=0b00000001;
PORTD=0x00;
DDRD=0x00;
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;
TIMSK0=0x00;
TIMSK1=0x00;
TIMSK2=0x00;
UCSR0B=0x00;
ACSR=0x80;
ADCSRB=0x00;
DIDR1=0x00;
ADCSRA=0x00;
SPCR=0x44;
SPSR=0x00;
TWCR=0x00;
while (1)
{
}
}