Свежие обсуждения
Микроконтроллеры

Ликбез по С для микроконтроллеров PIC

1 58 64

Снова вопросы...

Как работает это
< Left Shift operator
В справке ниполслова нет на эту тему.

Ещё.
left_shift() работает только с массивами?

Мне нужно сдвинуть влево число (8 разр.) и бит переноса использовать для дела.

 

Vladikas: Как работает это
< Left Shift operator
В справке ниполслова нет на эту тему.

Операторы сдвига, насколько я помню, << и >>, а не

В справке на что? Как это должно работать - смотреть в ANSI C, как это на самом деле реализовано - в доках на компилятор. Для беззнаковых целых, как правило, все компилеры делают всё одинаково - сдвигают всё число побитово. Для знаковых - возможны вариации - сдвиг с расширением знака, или без оного. Короче, по любому, на компилер читать мануал.

 

rfc: Операторы сдвига, насколько я помню, << и >>, а не
Да, там двойная стрелка, чёт не пропечаталось.

rfc: Как это должно работать - смотреть в ANSI C
Это что? Где смотреть?

Вот дизасм.


122: Y(двойная стрелка влево)=Z; сишная инструкция
084 0832 MOVF 0x32, W 0x32 это Z
085 00A1 MOVWF 0x21 0x21 это "ничего", пустышка
086 1903 BTFSC 0x3, 0x2 бит переноса
087 288C GOTO 0x8c
088 1003 BCF 0x3, 0
089 0DB1 RLF 0x31, F 0x31это Y
08A 0BA1 DECFSZ 0x21, F
08B 2888 GOTO 0x88
08C 2884 GOTO 0x84
Не могу понять что делает этот код...

А такая Y(двойная стрелка влево)Z; вообще игнорируется
--------------------------------
Непонятно как тег pre работает. Двойные стрелки фиг вставишь.
---------------------------------
Потестил калибратор на 630 пике. Если калибратор 0,
то частота на выходе 800кГц, то есть тактовая частота будет 3,2МГц.
Если калибратор FF, то частота на выходе 1,28Мгц, а тактовая 5,12МГц.

 

Vladikas: Мне нужно сдвинуть влево число (8 разр.) и бит переноса использовать для дела.
Тебе нужно двигать через перенос ? И потом перенос проверять ?
Сдвиг влево

buffer <<=1 // сдвигаем влево на 1 бит что эквивалентно buffer =buffer<<1
buffer <<=8 // сдвигаем влево на 8 бит
Сдвигается через перенос , который можно юзать на свое усмотрение - например передавать на лапку порта .

анологично сдвиг вправо >>=

Если надо вращать то -- rotate_right (address, bytes) , то есть для байта ,например, 0 бит -> 7бит, 7->6 ,6->5 .. и т.д.

 

Пример софтого SPI

void lcd_wr(int8 buf )
{int8 i=8;
#bit test=buf.7
while(i,i--)
{
DAT=test;
CLK=1;
CLK=0;
buf < < =1;
}
DC=0;
}

 

Vladikas: Как работает это
< Left Shift operator
В справке ниполслова нет на эту тему.

Ещё.
left_shift() работает только с массивами?

Мне нужно сдвинуть влево число (8 разр.) и бит переноса использовать для дела.

Во первых shift_left()

 

dosikus: buffer "две стрелки"=1 // сдвигаем влево на 1 бит что эквивалентно buffer =buffer"две стрелки"1 buffer "две стрелки"=8 // сдвигаем влево на 8 бит

Это я потестю, гут.

dosikus: Во первых shift_left()
Точно. А во вторых? Во вторых если с массивами так shift_left(buf,9,0); Двигаем массив из девяти байт разом, "вдвигая" ноль. А если не массив, то нужно делать так shift_left(&temp,1,0); Сдвиг переменной temp, один байт, "вдвигаем" ноль.

На сколько я понимаю это у меня не SPI. Врочем прога уже готова и работает. Ну просто счётчик до десятков миллионов. Завтра хочу переделать в часы.

ps Это дело затягивает почище третьего фаллаута Тоже легко до полвторого ночи можно засидеться.

 

Vladikas: Ну просто счётчик до десятков миллионов. Завтра хочу переделать в часы.

Не понял , зачем в счетчике сдвиг ? Сдвиг влево это умножение на 2 , вправо деление.

На счет часов - 3 char int8 часы , минуты , секунды и то это избыток .
Если нужен алгоритм счетчика часов - скажи выложу.
Считаю все в прерывании.

 

Протокол вывода на жк экран TIC последовательность из 72 бит. Я их делаю сдвигая массив, в который сначала сдвигаю данные. На счетчике 8 знаков, это до десятков миллионов. Сделал просто так, интересно же. Сегодня сделал часы. Даже работают Давайте ваши часы, погляжу. На моих ради прикола вывел ещё секунды и сотни миллисекунд, в деле все разряды, а ещё под цифрами бегает стрелочка, примерно 2 раза в секунду пробегает экран слева направо.

 

2 Vladikas
А исходник можно глянуть? Если не жалко конечно