Программный Spi

19-02-2014, 13:52 От: admin Посмотрели: 632
Здравствуйте. По SPI для обмена информацией с AD8400 необходимо передавать 10 бит информации. 2 бита адреса, и 8 бит само значение.

на просторах интернета нашел, исходник,, но не могу понять одну строчку строчку в функции void set_resistance :






#include <mega16.h>
#include <delay.h>

#define PORT_SPI PORTC/*назначения портов и сигналов программного SPI*/
#define DDR_SPI DDRC
#define PIN_SPI PINC
#define SDO PORTC.0
#define CKL PORTC.1
#define CS PORTC.2
#define SHDN PORTC.3
#define RS PORTC.4

void init_SPI (void)//функция инициализации программного SPI
{
DDRC = 0xFF;
PORT_SPI |= (1<<CS) | (1<<SHDN) | (1<<RS);//с лог. 1
PORT_SPI &= ~(1<<SDO);//и лог. 0
PORT_SPI &= ~(1<<CKL);//
}

void set_resistance (unsigned char addr, unsigned char value)//функция записи
{
unsigned char i;//переменная для цикла
unsigned int addr_value;//промежуточная переменная для вычисления управляющего слова

addr_value = ((unsigned int) (addr<<8)) | ((unsigned int) value);//формируем управляющее слово из двух бит адреса и байта сопротивления
PORT_SPI &= ~(1<<CS);//выбор микросхемы

for(i=0; i < 10; i++)//для 10 бит управляющего слова
{
if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1< <SDO);
PORT_SPI &= ~(1<<SDO);//иначе - выставляем ноль
PORT_SPI |= (1<<CKL);//фронт синхроимпульса
PORT_SPI &= ~(1<<CKL);//спад синхроимпульса
}
PORT_SPI |= (1<<CS);//не выбираем микросхему
}
void main(void)
{

unsigned char q;//переменная для цикла spi
init_SPI();//инициализируем программный SPI
PORTA=0x80;
DDRA=0xFF;
PORTB=0x03;
DDRB=0x2F;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
while (1)
{


for(q=0;q < 255; q++)
{
set_resistance(0x01, q);

q=0;

}
}
}



Вот собственно и сама строчка.


if(0x0001 & (addr_value>>(9-i))) PORT_SPI |= (1< <SDO)





Мне бы ее еще понятной для CodeVisionAVR сделать.
Раздел: МК для начинающих

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Программный Spi все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031