Регистр OCR1A

NalisniyRoman
Offline
Зарегистрирован: 17.06.2019

Доброго утра.Не знаю как разложить шеснадцатиричное число на два восьмибитных,

для OCR1AH и OCR1AL.Гугл выдает что то специфическое,я от программирования далек.Спасибо

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

OCR1AH = highByte(Value);

OCR1AL = lowByte(Value);

rkit
Онлайн
Зарегистрирован: 23.11.2016

NalisniyRoman пишет:

Гугл выдает что то специфическое,я от программирования далек.Спасибо

И чем тебе тут помочь? Пожелаю здоровья и долгих лет жизни, пожалуй.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Дет, а с ЧЕТЫРЕХбайтным как поступить? Как разделить старшее слово и младшее? (ну я не имею ввиду asm)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

-NMi- пишет:

Дет, а с ЧЕТЫРЕХбайтным как поступить? Как разделить старшее слово и младшее? (ну я не имею ввиду asm)

первое - взять целое разделив на 4, второе остаток от деления

Kakmyc
Онлайн
Зарегистрирован: 15.01.2018

Если нужен младший байт то просто накладываешь маску, если старший, то сдвигаешь , потом накладываешь.
Если совсем мозги не в ту сторону, то Дед уже написал выше версию для таких.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

делить для регистров актуально только для wavgat, для avr он 16битный, грузится за раз

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

-NMi- пишет:

Дет, а с ЧЕТЫРЕХбайтным как поступить? Как разделить старшее слово и младшее? (ну я не имею ввиду asm)

Младшее просто привести к 2м байтам, а старшее - сдвинуть и привести

long l;

uint16_t loword=l;

uint16_t hiword =(l>>16);

-NMi-
Offline
Зарегистрирован: 20.08.2018

ua6em пишет:

первое - взять целое разделив на 4, второе остаток от деления

Возьми целое от деления на 4: AABBCCDDh / 4 = 2AAEF337h

И...???

-NMi-
Offline
Зарегистрирован: 20.08.2018

DetSimen пишет:

Младшее просто привести к 2м байтам, а старшее - сдвинуть и привести

Усложним задачу. Допустим, есть что-то (указатель или переменная) , неважно, типа AA_BB_CC_DD_EE_FFh , т.е. ШЕСТИБАЙТОВОЕ число, не важен формат его хранения, пусть будет просто большое число без знака. Вот такое целое число (dec) 187.723.572.702.975 = AABBCCDDEEFFh. Как его "распилить" на байты?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Указателем. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
	uint64_t ll = 0xAABBCCDDEEFF0011;  // long long number

	uint8_t* byteptr = (uint8_t*)(&ll);

	for (uint8_t i = 0; i < sizeof(ll); ++i) {
		Serial.println(byteptr[i]);
	}

предвосхищая твой следущий дурацкий вопрос сразу скажу, на слова разбивать точно также.

-NMi-
Offline
Зарегистрирован: 20.08.2018

DetSimen пишет:

предвосхищая твой следущий дурацкий вопрос сразу скажу, на слова разбивать точно также.

Ну уж коль ты взялся отвечать, такдыуш начну: переменная или указатель вида A1B2C3D4E5F6. Нужно "перевернуть серединки" , вот так:

A1B2C3D4E5F6

AB1C2D3E4F5F

Затем "перевернуть" на 180 градусов, типа:

AB1C2D3E4F5F

3E4F5FAB1C2D

Вот так.

Это для начала...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

два указателя - и вращай и переворачивай как хочешь. код писать не буду. 

-NMi-
Offline
Зарегистрирован: 20.08.2018

DetSimen пишет:

 код писать не буду. 

Ну и х. с ним. На asm напишу)))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

-NMi- пишет:

DetSimen пишет:

 код писать не буду. 

Ну и х. с ним. На asm напишу)))

на asm любой дурак напишет, а вот на C++ )))

-NMi-
Offline
Зарегистрирован: 20.08.2018

ua6em пишет:

на asm любой дурак напишет, а вот на C++ )))

На давай подумаем... возьмём два байта: а1 и а2 и временную переменную т

Сдвигаем вправо через флаг С 4 раза а1 в т. Младший ниббл а1 стал старшим в т. Сохраняем т в а1

Сдвигаем влево через флаг С а2 4 раза в т. Старший ниббл а2 стал младшим нибблом в т.

Применяем лог. ИЛИ с а1 и т

Всё.

Как это сделать в С+  ???

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

-NMi- пишет:

На давай подумаем... возьмём два байта: а1 и а2 и временную переменную т

Сдвигаем вправо через флаг С 4 раза а1 в т. Младший ниббл а1 стал старшим в т. Сохраняем т в а1

Сдвигаем влево через флаг С а2 4 раза в т. Старший ниббл а2 стал младшим нибблом в т.

Применяем лог. ИЛИ с а1 и т

Всё.

Как это сделать в С+  ???

матьтваю, тебя взломали штоли? 

uint8_t a1 = 0x12;
uint8_t a2 = 0x34;
uint8_t t = 0;

t = (a1<<4); // младший ниббл a1 стал старшим в t
a2 >>= 4; // старший ниббл a2 стал младшим в a2

t |= a2; // соединяем вместе

можно в 1 строку записать. 

t = (a1<<4) | (a2>>4);

Это всё потому, што ты мало пьёшь. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Это всё потому, што ты мало пьёшь. 

мало - много понятие абстрактное, для кого-то и целого Мира мало )))

-NMi-
Offline
Зарегистрирован: 20.08.2018

DetSimen пишет:

матьтваю, тебя взломали штоли? 

Нет, наоборот, я ломаю.

DetSimen пишет:

можно в 1 строку записать. 

t = (a1<<4) | (a2>>4);

Уотт бля, как всё просто, оказываеццо.

DetSimen пишет:

Это всё потому, што ты мало пьёшь.

Некогда пить, работы полно...

-NMi-
Offline
Зарегистрирован: 20.08.2018

Дет, и ысчо вапрос: а компилятор всегда компилирует одинаково или у него есть полиморфизм???

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

-NMi- пишет:

Дет, и ысчо вапрос: а компилятор всегда компилирует одинаково или у него есть полиморфизм???

Если один и тот же код, один и тот же компилятор с теми же ключами, то одинаково.

А полиморфизм это другое. См ООП

-NMi-
Offline
Зарегистрирован: 20.08.2018

asam пишет:

А полиморфизм это другое. См ООП

Я имел ввиду несколько другое.. допустим, А1=5 , к примеру, сколькими способами можно написать то-же самое?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Какая связь между A1=5 и полиморфизмом?

А сколькими способами в asm можно записать jnz .match , например?

-NMi-
Offline
Зарегистрирован: 20.08.2018

Допустим, А2=10. А1=А2/2 что и будет = пяти. Это то, про что я писал или я ошибся?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

"Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов"

-NMi-
Offline
Зарегистрирован: 20.08.2018

Мне кажется, что мы разговариваем об совершенно разных вещах.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Вот именно. Что вы там придумали обозвать полиморфизмом - нам неведомо. Следовательно - на вопрос ответа нет.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Хорошо. Тогда как будут называться несколько совершенно разных функций, результат которых ОДИНАКОВ?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

-NMi- пишет:

Хорошо. Тогда как будут называться несколько совершенно разных функций, результат которых ОДИНАКОВ?

Ну, например, эквивалентными

Green
Offline
Зарегистрирован: 01.10.2015

sadman41 пишет:

Вот именно. Что вы там придумали обозвать полиморфизмом - нам неведомо.


Старинный анекдот вспомнил.)
Муж жене:
Ну сколько тебе раз говорить! Не сифилитик я. Фи-ла-те-лист!

Honey
Offline
Зарегистрирован: 01.10.2020

NalisniyRoman пишет:

Доброго утра.Не знаю как разложить шеснадцатиричное число на два восьмибитных,

для OCR1AH и OCR1AL.Гугл выдает что то специфическое,я от программирования далек.Спасибо

Можно не раскладывать

uint16_t var = 0x1234;
OCR1A = var;

 

Kakmyc
Онлайн
Зарегистрирован: 15.01.2018

Honey пишет:

Можно не раскладывать

uint16_t var = 0x1234;
OCR1A = var;

 

Не на всех камнях.
На atmega328 можно

Honey
Offline
Зарегистрирован: 01.10.2020

[/quote] Не на всех камнях. На atmega328 можно[/quote]

Дайте пример, где не работает.

На первый взгляд не вижу

$ awk '/define *OCR1A /&&/(MEM|IO)16/{print FILENAME}' /usr/avr/include/avr/* >l1
$ awk '/define *OCR1AH /{print FILENAME}' /usr/avr/include/avr/* >l2
$ diff -ru l1 l2
$ 

 

-NMi-
Offline
Зарегистрирован: 20.08.2018

asam пишет:

Ну, например, эквивалентными

Хорошо. В таком случае все функции, перечисленные ниже будут эквивалентными, так?

Ф1 возвращает 5

Ф2 возвращает (20-15)

Ф3 возвращает (15/3)

Ф4 возвращает корень из 25

Это эквивалентные функции???

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Honey пишет:

Не на всех камнях. На atmega328 можно[/quote]

Дайте пример, где не работает.

На первый взгляд не вижу

$ awk '/define *OCR1A /&&/(MEM|IO)16/{print FILENAME}' /usr/avr/include/avr/* >l1
$ awk '/define *OCR1AH /{print FILENAME}' /usr/avr/include/avr/* >l2
$ diff -ru l1 l2
$ 

 

[/quote]

WAVGAT

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

-NMi- пишет:

asam пишет:

Ну, например, эквивалентными

Хорошо. В таком случае все функции, перечисленные ниже будут эквивалентными, так?

Ф1 возвращает 5

Ф2 возвращает (20-15)

Ф3 возвращает (15/3)

Ф4 возвращает корень из 25

Это эквивалентные функции???

Ну уж точно не полиморфные.

Эквивалентные функции это те которык возращают одинаковый результат при одинаковых входных данных, а в нутре они могут быть совершенно по разному устроены

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

-NMi- пишет:

asam пишет:

Ну, например, эквивалентными

Хорошо. В таком случае все функции, перечисленные ниже будут эквивалентными, так?

Ф1 возвращает 5

Ф2 возвращает (20-15)

Ф3 возвращает (15/3)

Ф4 возвращает корень из 25

Это эквивалентные функции???

Это не функции, это - константы. 

Причем, все одинаковые.

Green
Offline
Зарегистрирован: 01.10.2015

NMI, я понимаю, старпёрам лень учиться, лень что либо искать... Я сам такой.) Но не до такой же степени!)

-NMi-
Offline
Зарегистрирован: 20.08.2018

Green пишет:

Я сам такой.) Но не до такой же степени!)

Узпакойзи. Фсе мы тупим, иногда, но не всегда...

Ну уж коль ты взялсИ пообщаться со мной, будь добр, ответь на простой вопрос:

Эти функции одинаковы?

Ф1=переменная*4

Ф2=переменная+переменная+переменная+переменная

Ф3=(сдвинуть переменную два раза влево)

Green
Offline
Зарегистрирован: 01.10.2015

Блядь! Ну ты объясни сначала что ты хочешь своим "простым вопросом"!
Что значит 
Ф1=переменная*4  и т.д. ?
Чётко и членораздельно! Или мне за тебя додумывать?
Но вижу что не сложится....(

-NMi-
Offline
Зарегистрирован: 20.08.2018

Green пишет:

Блядь!

Ну_этт_ты_зря, яб подумал, прежде чем так говорить...

 

Green пишет:

Но вижу что не сложится....(

Да, в такой парадигме не сложиЦЦо, однозначно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

-NMi- пишет:

Green пишет:

Я сам такой.) Но не до такой же степени!)

Узпакойзи. Фсе мы тупим, иногда, но не всегда...

Ну уж коль ты взялсИ пообщаться со мной, будь добр, ответь на простой вопрос:

Эти функции одинаковы?

Ф1=переменная*4

Ф2=переменная+переменная+переменная+переменная

Ф3=(сдвинуть переменную два раза влево)

Разные: результат существенным образом зависит от типа переменной

-NMi-
Offline
Зарегистрирован: 20.08.2018

Пусть будет беЗЗнаковое int.

Green
Offline
Зарегистрирован: 01.10.2015

"Пусть число танков равно х. Нет, х мало. Пусть y."
Конкретно напиши что у тебя инт, а что не инт.