реклама на сайте
подробности

 
 
> Вывод в последовательный регистр, работа с 74hc595
V000va
сообщение Jan 28 2009, 10:10
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 23-06-08
Пользователь №: 38 503



Подскажите плз, как можно организовать вывод в последовательный регистр, например 74hc595? Есть 2 включенных последовательно регистра, нужно вывести на первый 8 бит, включить выходы регистра, замтем выводим 16 на оба и тоже включаем выходы. Может подскажите алгоритм или ссылочку или кусочек кода на ассемблере (под AVR) будет просто супер biggrin.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vesago
сообщение Jan 28 2009, 10:53
Сообщение #2


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Все просто. Регистры соединяются последовательно. Есть два байта - образ данных в регистрах. Если нужно изменить соостояние какого выхода регистра, меняем соответсвующее значение в слове образе и по SPI задвигаем, затем дергаем строб, чтобы данные из сдвигового регистра перкинуть в выходной регистр.
Код
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void SPI_Init(void)
{
  SPI_PORT |= (1<<SCK)|(1<<MOSI)|(1<<MISO);

  SPI_DDR |= (1<<SCK)|(1<<MOSI);
  SPI_DDR &= ~(1<<MISO);

  SPSR = (1<<SPI2X);
  SPCR = (1<<SPE)|(1<<MSTR);  //Mode 0
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Записываем байт
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void SPI_Write_Byte(u8_t b)
{
  SPDR = b;
  while ((SPSR & (1<<SPIF)) == 0);
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Читаем байт
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
u8_t SPI_Read_Byte(void)
{
  SPDR = 0x00;
  while ((SPSR & (1<<SPIF)) == 0);
  return SPDR;
}

#define    Cell_Lock_Strob()               {PORTD |= (1<<CELL_LOCK_STROB); PORTD &= ~(1<<CELL_LOCK_STROB);}
#define    Cell_Lock_Clr()                   {PORTD &= ~(1<<CELL_LOCK_CLR); PORTD |= (1<<CELL_LOCK_CLR);}
#define    Cell_Load_Image(image)                   {SPI_Write_Byte((u8_t)(image>>8)); SPI_Write_Byte((u8_t)image);}
#define    Cell_Lock_ON(i)                  {cell_lock_image |= (1<<i); Cell_Load_Image(cell_lock_image); Cell_Lock_Strob();}
#define    Cell_Lock_OFF(i)    {cell_lock_image &= ~(1<<i); Cell_Load_Image(cell_lock_image); Cell_Lock_Strob();}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 05:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016