Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Djangirov1 / Vfrc4

.doc
Скачиваний:
14
Добавлен:
15.02.2015
Размер:
99.33 Кб
Скачать

Тема: Работа с периферийными узлами микроконтроллеров ATMEL. Последовательный периферийный интерфейс SPI.

Цель работы: научиться осуществлять обмен информации между различными устройствами с использованием интерфейса SPI микроконтроллера.

Задание №1: Реализовать на микроконтроллере программу взаимодействия с другими устройствами по интерфейсу SPI. Проверить работу программы в Proteus VSM.

#include <mega16.h>

#include <delay.h>

#include <stdio.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x1B ;PORTA

#endasm

#include <lcd.h>

unsigned char buffer [16];

unsigned char data1;

unsigned char data;

char i;

// Declare your global variables here

void WriteSPI (unsigned char data);

unsigned char ReadSPI ();

void main(void)

{

DDRB = (1<<5)|(1<<7)|(1<<4);//устанавливаем SS, SCK и MOSI

//Enabling SPI, clock rate 4, master SPI mode

SPCR = (1<<SPE)|(1<<MSTR); //включаем СПИ, режим «мастер»

// Clear the SPI interrupt flag

#asm

in r30,spsr

in r30,spdr

#endasm

// LCD module initialization

lcd_init(16);

// Global enable interrupts

#asm("sei")

while (1)

{

PORTB |= (1<<4);//SPI в режиме master, все остальные выводы SPI используются для приёма данных

WriteSPI(0x80);

WriteSPI(0b00000100);

PORTB &= ~(1<<4);

delay_ms(50);

PORTB |= (1<<4);

WriteSPI(0x02);

data1 = ReadSPI();

PORTB &= ~(1<<4);

sprintf(buffer, "Temper %i",data1);

lcd_gotoxy(0,0);

lcd_puts(buffer);

};

}

void WriteSPI(unsigned char data)

{

SPDR = data;

while()

{

};

}

unsigned char ReadSPI(void)

{

SPDR = 0X00;

while(!(SPSR & (1<<SPIF))) //ждём пока не передастся байт

{

};

return SPDR;

}

} AutoShape 4

Выводы: на данной лабораторной работе я научился осуществлять обмен информации между различными устройствами с использованием интерфейса SPI микроконтроллера.

Соседние файлы в папке Djangirov1