例 将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的参考程序如下: