Ср сен 26, 2018 22:18:24
ms_data_out=0xAA;
while (1)
{
PORTB.2=0; //SS to 0
ms_data_out++;
SPDR=ms_data_out;
while(!(SPSR & (1<<SPIF)));
ms_data_in=SPDR;
PORTD= ms_data_in; //LED
PORTB.2=1; //SS to 1
delay_ms(50);
}
sl_data_out=0x04;
while (1)
{
SPDR=sl_data_out;
while(!(SPSR & (1<<SPIF)));
sl_data_in=SPDR;
}
Пт сен 28, 2018 20:53:24
char SPI_ChangeByte(char byte)
{
PORTB.2=0; //CS to 0
SPDR = byte; //байт для передачи
while(!(SPSR & (1<<SPIF)));
PORTB.2=1; //CS to 1
return SPDR;
}
....
....
while (1)
{
n++ ;
m = SPI_ChangeByte(n);
delay_ms(100);
}
// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
volatile unsigned char data;
data=SPDR;
SPDR=data;
}
Пт сен 28, 2018 22:56:17
Пн окт 15, 2018 13:37:18
Пн окт 15, 2018 15:17:49
- Код:
PORTB.2=0; //SS to 0
- Код:
void main(void)
- Код:
volatile unsigned char n=0x00,m=0x00;
Пн окт 15, 2018 19:51:42
- Код:
PORTB.2=0; //SS to 0
А если функция ничего не возвращает? В бесконечном цикле крутит одно и тоже ?
- Код:
void main(void)
В Си такое не разрешено. Функция main должна возвращать int.
Использовал для контроля значения переменньіх в Протеусе. Без volatile не показьівает.
- Код:
volatile unsigned char n=0x00,m=0x00;
Для локальных переменных это не нужно. Вы же не передаете указатели на них в прерывания.
Форматируйте код и удаляйте автогенерированный мусор, это поможет легче находить ошибки.
Спасибо, жду.По существу пока помочь не могу, но попробую разобраться.
Вт окт 16, 2018 10:47:39
В CVAVR отлично работает. Интерпретатор пропускает, адекватно воспринимает. Почему бьі не использовать ?
А если функция ничего не возвращает? В бесконечном цикле крутит одно и тоже ?
Спасибо, жду.
char SPI_Send(char byte){
PORT_OFF( SPI_CS ); //отключаем CS, если был включен (мало ли)
SPCR &=~(1<<SPE); //отключаем модель SPI чтобы получить доступ к выводам
PORT_1(SPI_SCK); //выдаем лог.1 на SCK чтобы при включении SPI сформировался нужный фронт
PORT_ON( SPI_CS ); //включаем CS перед началом передачи
SPCR |= (1<<SPE); //включаем сам SPI
SPDR = byte;
while(!(SPSR & (1<<SPIF))){}
PORT_OFF( SPI_CS );
return SPDR;
}
Вт окт 16, 2018 11:00:05
Вт окт 16, 2018 17:50:09
COKPOWEHEU писал(а):PORTB.2=0; //SS to 0
В Си такое не разрешено. Постарайтесь не использовать нестандартных расширений.
Ср окт 17, 2018 05:44:23
Ср окт 17, 2018 11:12:09
Ср окт 17, 2018 11:38:50
об этом вам ранее и сообщилиroman.com писал(а):видимо мой компилятор какой то не нормальный
Ср окт 17, 2018 12:28:49
Пт окт 19, 2018 13:03:55
$ avr-gcc main.c -mmcu=atmega8
main.c: In function ‘main’:
main.c:4:8: error: expected ‘;’ before numeric constant
PORTB.2=1;
А если например написать такую конструкцию:
SPCR |= (1<<SPE); //включаем сам SPI
Надеюсь, под "прописывать явно" вы понимали не магические константы, а сдвиги и сложения?Прописывать регистры явно - проще и надёжней))
ADCSRA = 0b11001100; //неправильно
ADCSRA = 0xCC; //неправильно
ADCSRA = 204; //неправильно
ADCSRA = (1<<ADEN | 1<<ADSC | 1<<ADIE | 0b100<<ADPS0); //правильно
Пт окт 19, 2018 14:55:56
COKPOWEHEU писал(а):Из последнего варианта очевидно, что АЦП включается (ADEN), запускается преобразование (ADSC) и разрешается прерывание (ADIE).
COKPOWEHEU писал(а):А вот первые 3 варианта ошибочны, поскольку это просто ничего не значащие числа, для их расшифровки необходимо лезть в даташит.
Пт окт 19, 2018 15:10:27
вы вот так слету сможете мне сказать, что делается вот этой командой ADCSRA = 0x27?roman.com писал(а):Ничего не значащие числа
Пт окт 19, 2018 18:59:56
ARV писал(а):99,9% любителей ни за что не обнаружат проблему
Пт окт 19, 2018 19:57:12
Пт окт 19, 2018 20:27:45
я бы тоже согласился, да боюсь, у товарища коментарии в программе из следующего разрядаAlkul писал(а):С этим согласен
а = b * c; // вычисляем произведение b и с и запоминаем его в а
Пт окт 19, 2018 21:08:35