Отговори на тема  [ 6 мнения ] 
Управление на регистри 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Управление на регистри
Трябва ми малко помощ, че не мога да захапя.
Става въпрос за следното - трябва да пълня периодично 8 външни регистъра свързани последователно.
До сега винаги ползвах MSSP модула в SPI Mode. Сега обаче трябва да ползвам паралелно и EUSART-а, а пиновете им съвпадат. Поради това трябва да си напиша комуникацията, обаче на C не съм ротейтвал байтове и нямам идея, как да обхождам битовете в байта та да вдигам и свалям съответно управляващия пин.
Дайте малко идеи, ако някой вече си е блъскал главата.
Става въпрос за MICROCHIP.


Пон Ное 28, 2011 10:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Управление на регистри
Код:
uint8_t bitCounter = 0;
   while(bitCounter < 8) {
      (sout & BIT7) ? (P1OUT |= DataPin) : (P1OUT &= ~DataPin);   // <- магията става тук
      sout <<= 1;                                                 // <- и тук
      
      P1OUT |= ClockPin;
      _nop();
      P1OUT &= ~ClockPin;
      
      bitCounter++;
     }
     P1OUT |= StrobePin;
     _nop();
     P1OUT &= ~StrobePin;

Надявам се можеш да се ориентираш.

_________________
Warriors of the Night, ASSEMBLER!!!


Пон Ное 28, 2011 10:29 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Re: Управление на регистри
:rolleyes: Ами ще ми трябва малко време да захапя този кошмарен синтаксис ... :)

... C# направо ме е разглезил ...


Пон Ное 28, 2011 10:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Управление на регистри
А що не си го нацвъкаш на асемблер?
примерно така:

MOVLW 0x08
MOVWF counter
label1:
BZ end
BSF outport,outbit
BTSS data_byte,7
BCF outport,outbit
BSF outport,clockbit
NOP - ако си под 16 MHz - няма нужда
BCF outport,clockbit
RLNCF data_byte,1
DEC counter
goto label1
end:
BSF outport,strobebit
{NOP}
BCF outport,strobebit


Вто Ное 29, 2011 10:18 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: Управление на регистри
perro_iv написа:
:rolleyes: Ами ще ми трябва малко време да захапя този кошмарен синтаксис ... :)

... C# направо ме е разглезил ...

Една безумна идея - вземи разгледай .NET MicroFramework - има разни контролери по $30-на ако не ме лъже паметта, направо си го програмираш на C# от Visual Studio - иначе лично аз не бих го ползвал ... 10-на инструкции на асемблер ще ги замениш с няколкостотин КБ итнерпретатор и виртуална машина :D

_________________
Мразя да мразя ...


Вто Ное 29, 2011 4:31 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Re: Управление на регистри
Ето го :

Код:
void initDspl1()
{

   //ShiftEnable LATBbits.LATB0

   //Shift_CLK LATBbits.LATB1

   //Shift_Data LATBbits.LATB2

   for (p = 0; p <= 7; p++)
   {
      char sout = 201; //11001001;
      unsigned int  bitCounter = 0;
      
      while(bitCounter < 8)
      {
          (sout & (1 << 7)) ? (Shift_Data = 1) : (Shift_Data = 0);   // <- магията става тук
          sout <<= 1;                                                 // <- и тук
              
          Shift_CLK = 1;
          Nop();
          Shift_CLK = 0;
              
          bitCounter++;
       }    
      
   }

   while (!PORTBbits.RB4);

   ShiftEnable = 0;
   Nop();
   ShiftEnable = 1;   
            
}


Благодаря за отговорите!
Магията не е чак толкова страшна:

(sout & (1 << 7)) ? (Shift_Data = 1) : (Shift_Data = 0)
този израз проверява седмия бит на sout, ако е единица - вдига информационния пин, ако не - обратно, следва завъртане

sout <<= 1;

и те така до 8

Тенкю още веднъж, просто ми трябваше малка подсказка ...


Вто Ное 29, 2011 4:55 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни