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

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

1 22 64

picmaniac: На 3-й стр. этой темы.
Вы лучше направьте его туда, куда он всех посылает и к тому, с кем он в сговоре!

 

Левон, не провороцируйте picmaniacа!

 

Левон: Вы лучше направьте его туда, куда он всех посылает и к тому, с кем он в сговоре!

абалдеть, уже на меня сговоры вешают! Человек по человечески попросил, а я чё как скотинка не могу ему помочь. Это называется помощь, а не сговоры. Я думаю ПОЧТИ каждый бы зная ссылку помог чувачку, да же если эта ссылка кому-то не опдуше, а знания как вы уже могли заметить купить нельзя. Есть рвение познавать, пожалуйста почемы бы и нет?
Picmaniac: На 3-й стр. этой темы. Слабо разобраться?
Посоветуйте учебник русско-язычный по Си. Что бы с компилятором на "ТЫ" научится работать. А розобраться легко, тока когда книженция под рукой

 

Млин... Книга Шпака!!! И примеры к ней. Ссылка на 1-й странице темы.
zakonnik! В голову не только кушать нужно! И вообще, если хочешь научиться чему-либо - РЫТЬ нужно, РЫТЬ! Самому. А не ждать пока носом ткнут. Без обид.
Перечитай вдумчиво всю эту тему и всю тему о разработке таймера. Должно проясниться в голове.

P.S. ИМХО zakonnik к делишкам самизнаетекого непричастен.

 

picmaniac: РЫТЬ! Самому. А не ждать пока носом ткнут. Без обид.
Верно, излогаете! а то как у мамки под крылом здесь! вы тыкаете а я глотаю, нехорошо как-то, надо будет исправляться.

 

zakonnik: Это называется помощь, а не сговоры.
Чтобы не засорять сайт, я черкнул Вам пару строк на мейл. Потрудитесь прочесть!

 

Левон,
Прочтите мыло

 

Сергей К: открытый колектор на RA4.

Отнюдь не колектор ...

 

zakonnik: Посоветуйте учебник русско-язычный по Си. Что бы с компилятором на "ТЫ" научится работать.

Керниган и Ричи
ЛУЧШЕ и понятней не найдешь.

 

Начал прикручивать датчик температуры к таймеру.
Вопросик по оптимизации кода на С. Подсчет CRC при работе с DS18B20. Задача несложная.

1. Проделать операцию "искл.ИЛИ" между сохраненным ранее результатом (CRCPIC) и считанным с DS байтом (аргументом).
2. Если после этого младший бит результата равен 1, то проделать операцию "искл.ИЛИ" между сохраненным ранее результатом (CRCPIC) и константой 0x18.
3. Сдвинуть результат CRCPIC вправо на 1, занеся в старший бит то, что получилось в младшем бите после проделывания п.1.
4. Сдвинуть аргумент вправо на 1, занести в старший бит 0.
5. Пункты 1-4 проделать в общей сложности 8 раз.

Как сделано на асме:

; Подпрограмма обновления CRC. Аргумент в W. Используются ячейки TEMP1, TEMP2.
; Результат сохраняется и обновляется в регистре CRCPIC.


NewCRC
clrwdt
movwf TEMP2 ; Сохранить W

movlw 08h
movwf COUNTER ; COUNTER=8 (8 бит предстоит обработать)

movf TEMP2,W ; Восстановить значение W

CRC_label
xorwf CRCPIC,W ; Исключ.ИЛИ CRCPIC и W (т.е. сохраненного аргумента), результат в W
movwf TEMP1 ; Скопировать результат в TEMP1
rrf TEMP1,W ; Сдвиг TEMP1 вправо на 1, результат в W, младший бит в С (он-то как раз и нужен)
movf CRCPIC,W ; CRCPIC в W (бит С не изменяется при этом)
btfsc STATUS,0 ; Проверка бита С
xorlw 018h ; Эта команда (исключ. ИЛИ) выполняется только если С=1 (бит С не изменяется при этом)
movwf TEMP1 ; Результат в TEMP1 (бит С не изменяется при этом)
rrf TEMP1,W ; Снова сдвиг (при этом сохраненный бит С задвигается в 7-й бит), результат в W
movwf CRCPIC ; Сохранить результат в CRCPIC
bcf STATUS,0 ; C=0
rrf TEMP2,F ; Сдвиг TEMP2 вправо на 1
movf TEMP2,W ; И скопировать полученное значение в W
clrwdt
decfsz COUNTER,F ; Следующий проход...
goto CRC_label

return ; Конец подпрограммы обновления CRC


Как сделано мной на CCS PICC (первый вариант):


void ds_crc (unsigned char lDATABYTE) // Подсчет CRC (контрольной суммы)
{
unsigned char lCOUNTER;
lCOUNTER = 8;
do {
if (bit_test((lDATABYTE ^ gCRCPIC),0)) {
gCRCPIC ^= 0x18;
gCRCPIC >>= 1;
gCRCPIC |=0b10000000;
}
else gCRCPIC >>= 1;
lDATABYTE >>= 1;
}
while (--lCOUNTER != 0);
}

Этот вариант работает. Однако интересно... можно ведь наверно сделать лучше, оптимальнее? При этом сохранив независимость от типа МК, т.е. без ассемблерных вставок и т.п. хитростей. Я ведь только недавно на С начал программировать.