Товарищи, разрешите обратиться к вам за помощью. Совсем зеленый и даже не знаю как подойти к заданиям, которые нам выдали на практике и сказали разбираться. Ничего подобного в институте не было. Первые задания были простые - записать 10 чисел в ячейки оперативной памяти; сложить 10 чисел и т.д. Но уже на втором этапе засыпался, получил следующие
(
Read more... )
Comments 23
Reply
Reply
Reply
Reply
Reply
AVR. Учебный курс. Передача данных через UART
http://easyelectronics.ru/avr-uchebnyj-kurs-peredacha-dannyx-cherez-uart.html
Reply
Reply
Reply
Reply
2) Открыть раздел USART (или как-то так).
2.5) Понять, что нифига не понимаешь, и начать читать с разделов RESET и CLOCK.
3) Выставить регистры ячейки USART на передачу 9600-8-n-1.
4) Записать последовательно 10 байт в регистр передачи, после каждой записи дожыдаясь в цыкле разрешэния продолжать в статусном регистре. (это через polling).
5) Тожэ, что и в 4), только не дожыдаясь разрешэния продолжать, а разрешыв прерывание по окончании передачи байта и написав обработчик прерывания, который запишэт следующий байт.
6) PROFIT.
Reply
Reply
1. Загружаем в 16-битный регистр (т.е. в два 8-битных) начальное значение суммы (например, ноль)
2. Восемь раз повторяем следующий цикл:
2а. Очищаем флаг переноса
2б. Сдвигаем младшое слово влево через флаг переноса
2в. Потом сдвигаем так же старшее слово.
2г. Если со старшего слова прилетел перенос, то ксорим оба регистра каждый со своим magic value, которые можно стянуть из интернета
3. Ксорим младшее слово одним байтом данных.
4. Если не все байты данных посчитаны, то идти к 2.
5. Используем полученную сумму crc16 по назначению
Reply
unsigned short Crc16(unsigned char *pcBlock, unsigned short len)
{
unsigned short crc = 0xFFFF;
unsigned char i;
while (len--)
{
crc ^= *pcBlock++ << 8;
for (i = 0; i < 8; i++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;
}
Reply
Reply
Leave a comment