Re: WinAvr в вопросах и ответах
Добавлено: Пн июн 06, 2011 10:29:51
ОК, вопрос исчерпан. Спасибо кстати за ссылку.
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
... а кому компилятор пишет tiny24.h: No such file or directory ? ... поэтому и "не объявлено".dinets писал(а):хм...... точно
но не смущает у меня там ничего не объявлено!
Код: Выделить всё
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}Код: Выделить всё
char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)))
;
/* Return data register */
return SPDR;
}так что за проблема-то? вы показали код функций из даташита - что еще нужно? пользуйтесь ими. не забудьте только, что кроме этой пары есть еще пара для инициализации мастера и приемника.alex1991 писал(а):А на счет отправки и приема какой то команды подскажите пожалуйста
Код: Выделить всё
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define PORT_SS 4
#define PORT_MOSI 5
#define PORT_MISO 6
#define PORT_SCK 7
#define PORT_SPI PORTB
//#define DDR_SPI DDRB
//Функции
//******************************************************************************************
/*
INTERRUPT(SIG_SPI)
{
unsigned char data;
data = SPDR ;
//printf ("\n\r%d", data ) ;
}
*/
//Инициализация SPI_MasterInit
void SPI_MasterInit(void)
{
/* MOSI и SCK выход, остальные входы */
PORT_SPI = (1<<PORT_MOSI)|(1<<PORT_SCK);
/* Включить SPI,работает как Master, скорость SCK 125,000 kHz */
SPCR = (1<<SPE)|(1<<MSTR);
}
//Иниализация SPI_MasterTransmit
void SPI_MasterTransmit(char cData)
{
PORTB&=~_BV(PORT_SS);//сбрасываем SS в нуль
SPDR = cData;//начинаем передачу
/* Дожидаемся полной передачи */
while(!(SPSR & (1<<SPIF)));
PORTB|=_BV(PORT_SS);//поднимаем ногу SS в единицу
}
//Оснавная программа
//******************************************************************************************
int main(void) // Input/Output Ports initialization
{
DDRB = 0b11110000;
PORTB = 0b00000000;
SPI_MasterInit();// Инициализация SPI_MasterInit
while (1)
{
SPI_MasterTransmit(255);//отправка слейву 255
} };
Код: Выделить всё
while (1){
SPI_MasterTransmit(255);//отправка слейву 255
}Всмысле? А в какой каталог нужно кидать проект?avreal писал(а):Может, не в том каталоге запускается.
Код: Выделить всё
Output size is 6.04 KB
Running project post-build steps
avr-size bin/Debug/1.elf
text data bss dec hex filename
70 0 0 70 46 bin/Debug/1.elfКод: Выделить всё
#include <avr/io.h>
int main(void)
{
while(1);
return 0;
}А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?ARV писал(а):формально char это не uint8_t вот и все.
char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а):А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?ARV писал(а):формально char это не uint8_t вот и все.
Спасибо, интересно было узнать.Мастер Ломастер писал(а):char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а): А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.
делайте выводы сами