Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
498 Микроконтроллеры AVR от азов программирования... в программе вывод USCK уже сконфигурирован как выход при помощи регистра DDRE. Значение, которое требуется передать ведомому устрой ству, перед вызовом данной функции помещается в регистр г 16. По окон чании процесса передачи данные, полученные от Slave, также сохраня ются в регистре г 16. Листинг 6.17. Пример на языке Ассемблер SPITransf ег : out USIDR, r16 ldi r16, (1«USIOIF) out USISR, r16 ldi r16, (1«USIWM0) | (1«USICS1) | (1«USICLK) | (1«USITC) SPITransfer_loop out USICR, r16 sbis USISR,USIOIF rjmp SPITransfer loop in r16.USIDR ret Вторая и третья команды сбрасывают флаг переполнения USI, а также его текущее значение. Четвертая и пятая команды устанавливают трехпроводный режим работы, вырабатывают положительный фронт для синхронизации сдвигового регистра, устанавливают строб USITC и переключают значение USCK. Шестая команда проверяет значение флага переполнения счетчика. Цикл повторяется 16 раз, пока не обнаружится переполнение. В следующем программном примере (см. Листинг 6.18) приведен другой вариант той же самой функции, оптимизированной по скорости работы (fsck = fck/2). Листинг 6.18. Пример на языке Ассемблер SPITransfer Fast' out USIDR,r16 ldi r 16, (1 «USIWMO ) I ( O«USICSO ) I ( 1«USITC) ldi r17, (1«USIWM0) I ( O«USICSO ) | (1«USITC) | ( 1«USICLK) out USICR,r16 , Передача старшего бита out USICR. г17 out USICR,r16 out USICR, r17 out USICR, r16 out USICR, r17 out USICR, r16 out USICR, r17 out USICR, r16 out USICR, r17 out USICR,r16 out USICR, r17 out USICR, r16 out USICR, r17 out USICR, r16 : Передача младшего бита out USICR, r17 in r16,USIDR ret
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==