Djangirov1 / Vfrc4
.doc
Тема: Работа с периферийными узлами микроконтроллеров 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;
}
}
Выводы: на данной лабораторной работе я научился осуществлять обмен информации между различными устройствами с использованием интерфейса SPI микроконтроллера.