Цитата(aaarrr @ Oct 26 2006, 23:36)

ИМХО, в большинстве случаев, когда нужно передать 5 или 13 бит, можно без ущерба для здоровья передать 8 или 16 с соответствующим выравниванием.
В одном из проектов были связаны два МП сначала по паралельному интерфейсу. 8бит данных, бит управления и два бита подтверждений. Потом перешли на SPI. Необходимо было отличать данные от комманд. Для этого в принципе достаточен один лишний бит. В RS232 такое есть. Остановились на полном 16 битном варианте.
В другом случае реализовывался интерфейс с AD7716 правда на х51. Был пременён програмно аппаратный интерфейс
;========================================================================
; Вывод в DAC DAC7611 (програмно-аппаратный !!!).
;------------------------------------------------------------------------
; Входные регистры: A (старших 4 бита), r1 (младший)
; Выходные регистры: -
; Портятся регистры: A
; Занято стэка : 1
;WrDAC12:xch a,r1
; push acc ; сохранить мл. байт ????
; clr SCK ; подготовить SCK для программы
; mov a,#10h ; выключить SPI
; mov spcr,a
; xch a,r1
; mov r1,#4 ; вывести 4 ст. бита
;wrd3: mov c,acc.3 ; текущий бит старшего байта в C
; mov MoSi,c ; и вывести его
; setb SCK ; стробировать его
; clr SCK
; rl a ; следующий бит
; djnz r1,wrd3 ; на повтор
; mov a,#50h ; включить SPI
; mov spcr,a
; setb SCK ; подготовить SCK для аппаратного SPI
; setb MoSi ; подготовить MoSi для аппаратного SPI
; pop acc ; восстановить мл. байт
; mov r1,a
; ajmp wrdl ; и вывести его ч/з SPI
;========================================================================
; Вывод в DAC AD420 (через SPI !!!).
;------------------------------------------------------------------------
; Входные регистры: A (старший), r1 (младший)
; Выходные регистры: -
; Портятся регистры: A
; Занято стэка : -
WrDAC16:mov spdr,a ; вывести в DAC старший байт
wrdh: mov a,spsr ; ждать завершения операции
jnb acc.7,wrdh ; передачи ст. байта
mov a,spdr ; читать чтобы сбросить флаг
wrdl: mov spdr,r1 ; вывести в DAC младший байт
wrdl1: mov a,spsr ; ждать завершения операции
jnb acc.7,wrdl1 ; передачи мл. байта
mov a,spdr ; читать чтобы сбросить флаг
ret ; выйти