СЕ equ 2
; ******************
; * ФУНКЦИЯ: Загружает новые данные в каналы А и В ЦАП МАХ549А *
; * и осуществляет одновременное обновление выходов *
; * РЕСУРСЫ: Подпрограмма SPI_WRITE *
; * ВХОД: Значение канала А — регистр h’20’, канала В — h’21’ *
; * ВЫХОД: Изменяется состояние обоих аналоговых выходов *
; ******************
MAX549A movlw b’00000001’; 1-й управляющий байт
movwf DATA_OUT; Помещаем в требуемый регистр
call SPI_WRITE; и пересылаем в МАХ549А
movf CHANNEL_A,W; Берем значение канала А
movwf DATA_OUT; Помещаем в требуемый регистр
call SPI_WRITE; и пересылаем в МАХ549А
bsf PORTA,CE; Формируем импульс на СЕ
bcf PORTA,CE
movlw b’00001010’; 2-й управляющий байт
movwf DATA_OUT; Помещаем в требуемый регистр
call SPI_WRITE; и пересылаем в МАХ549А
movf CHANNEL_B,w; Берем значение канала В
movwf DATA_OUT; Помещаем в требуемый регистр
call SPI_WRITE; и пересылаем в МАХ549А
bsf PORTA,CE; Формируем импульс на СЕ
bcf PORTA,CE
return
Если мы снимем осциллограммы с трех выводов микросхемы МАХ549А, то увидим сигналы, похожие на те, что изображены на Рис. 12.6 (на рисунке показана передача 1-й пары байтов
Из Рис. 12.6 видно, что изменение состояния линии DIN, управляемой выводом SDO микроконтроллера, происходит перед формированием активного нарастающего фронта на выводе SCK. Очевидно, что состояние должно измениться за определенное время до появления фронта и удерживаться в течение короткого интервала времени после него. В документации на МАХ549А сказано, что минимальное время установки
Рис. 12.6.
Благодаря наличию у микросхем входа СЕ к линиям SCK/SDO можно подключить несколько ЦАП — последовательные данные будут заноситься только в ту микросхему, на выводе
Рис. 12.7.
Большинство микроконтроллеров среднего уровня и все микроконтроллеры старшего уровня имеют в своем составе