例 将AT89C51片内RAM30H、31H单元中的16位数据通过SPI总线接口传送到数模转换器TLC 5615。
分析:TLC5615是3线串行总线接口10位电压输出数/模转换器,它既可与单片机的 SPI总线接口相连接,又可与单片机的Microware总线(另外一种三线制总线)接口相连接。TLC5615内部结构如图1所示。
TLC5615通过固定增益为2的运放缓冲电阻网络,把10位数字数据转换为模拟电压。在TLC5615芯片上电时,内部电路把D/A寄存器复位为0。其输出具有与基准输入相同的极性,表达式为:Vo=2×REF×CODE/1024
图1 TLC5615内部结构
其中,CODE是通过串行总线接口输入的待转换的数据;REF是基准电压。
TLC5615最大的串行时钟速率不超过14MHz,10位DAC的建立时间为12.5μs,通常更新速率限制至80kHz以内。TLC5615的16位移位寄存器在SCLK的控制下从DIN引脚输入数据,高位在前,低位在后。16位移位寄存器中间的10位数据在上升沿的作用下输入10位的D/A 寄存器供给D/A转换。
AT89C51与TLC5615通过串行总线接口传送8位数据如图2所示。因AT89C51没有SPI接口,可用软件的办法来模拟SPI的总线操作。P1.1模拟SPI的数据输出端(MOSI),P1.2模拟SPI的SCK输出端,P1.3模拟SPI的从机选择端(SS);TLC5615是数/模转换器,不会向AT89C51发送数据,故不需要模拟SPI的数据输入端(MISO)。
AT89C51将片内RAM30H、3lH单元中的16位数据传送到TLC5615的参考程序如下: