Понимаю что некропостер, но однако - хочется поделится напримером программной реализации считывания/печати/обработки порогов температуры нескольких DS18B20 на Pic-18 без программных задержек.
В качестве источника микросекундных задержек используется таймер и высокоприоритетные прерывания.
На ассемблере сейчас никто не пишет. Почти.
Код:
//---------- Вычисление контрольной суммы: ----------
void Do_Crc8(char b, char *crc)
{
for(char i = 0; i < 8; b = b >> 1, i++)
if((b ^ *crc) & 1) *crc = ((*crc ^ 0x18) >> 1) | 0x80;
else *crc = (*crc >> 1) & ~0x80;
}
Например вычисление CRC на Асм Пик-18, семь команд мелкопроца на бит, побитный ввод инфы:
Код:
NextBitRead
;ложных проходов быть не должно при подсчёте контрольной суммы
; call CalcCRC ; Процедура проверена на документации и серийнике датчика и чтении скратчпада - работает
rrncf DS1820_CRC,F,BANKED ; Вращаем минуя перенос
movf DS1820_CRC,W,BANKED ;
bcf DS1820_CRC,7,BANKED ; чистим старший (место под результат)
xorwf W_1_ReadBuf,W,BANKED; Результат XOR входа и старшего бита CRC
; в старшем бите Акк
bnn DoneXor ; Заменил на анализ знакового бита (бит-7)
movlw b'10001100' ; ************* То Самое "Представление Полинома"
xorwf DS1820_CRC,F,BANKED ; инвертируем старший и серединку
DoneXor
использовано в универсальной заготовке, для примера работало в учебной плате частотника
http://vfd.psw2.ru/ там есть исходники, фото/видео работы.
Для припаивания парочки DS18B20 в боевой частотник для измерения темп двигла не хватило терпения делать изоляцию на DS18B20 (на датчике примерно 160 вольт от земли).
Полагаю что на Си частотник на Pic18F4431 с аналогичной точностью и скоростью вычислений фазных значений не будет написан никогда.
Основание - сравнение машинного кода от компилятора Си с самописанным асмом.