void set_dac(unsigned int vcon)
{
char i;
int svcon;
svcon=vcon|0x8000;
DAC_CS=0;///
for(i=0;i<16;i++)
{
DAC_DIN=svcon&0x8000;svcon<<=1;
DAC_CLK=0;
DAC_CLK=1;
}
DAC_CS=1;//禁止片选
return;
}
帮忙解释一下,谢谢!
svcon=vcon|0x8000;
最高位应该是1,其次是0,但还是会被发送过去吧,这不会有影响吗?
数据有效位是12,但总不可能做12位的片内寄存器吧?所谓有效位应该指16位数据里的低12位有效,而不是说只能放12位数据
无效的怎么处理?
追答发16位,DA转换只用12位,无效的位发时置0,DA转换没使用.不像A/D,你读回来16位,你左移或右移把多于的4位舍掉.
追问svcon=vcon|0x8000;
按照上面的程序,最高位应该是1啊,这又是什么意思?难道DA寄存器的高四位没用吗?
最高位是1是一数据标志位,DA寄存器的高四位没用.
追问最高位必须是1吗?12位DA内部默认只使用低12位寄存器吗?还是通过编程实现的啊
追答最高位必须是1,具体的编程明细,你得查芯片数据手册.
本回答被提问者采纳单片机与12位DA进行SPI串行通信,在进行循环发送时,为什么发送16个时钟...
因为单片机的数据是8位的,12位的数据,也只能分成2个8位的来,只是其中有一个数据的前4位为0而已.你要把数据读完整,读12次的话,你得从低位开始读,也可以.但是你要从高位开始读,因为高位前4位是0,你也要读,数据要读完整就必须得读16次了!
为什么我的spi能发送数据,但数据发送的不对啊
时序不对!启动和停止的时候,数据位与时钟位的电平最好置高,然后数据的传输速率也得注意,另外有些I\/O口的输出要注意有上拉电阻。如果单片机有自带的SPI功能的话,你就要看看配置了~希望可以帮到你
为什么用单片机的spi通信时cs的波形与时钟的信号一样
SPI通讯波形在示波器上看应该是矩形波,所以在采样菜单中将获取方式改成峰值检测,在触发菜单中将触发类型改成脉冲触发然后设置触发条件,这样更容易捕捉到矩形波。如果还看不到就不是示波器设置问题了,检查电路或者探头连接对不对。
单片机的问题。串行通信和串行扩展技术什么关系?
RS232是电气协议,规定发送和接收都是一根线, 因为没有同步时钟,所以叫异步通信, 异步通信就一定要定好波特率, 规定起始位结束位, 高电平要转换成0~-12V,低电平要转换成5~12V,才会被对方识别,RS485呢也是只用两根线,没有时钟,但它是半双工的,也就是发送时不能接收,接收时不能发送,高电平要求是A...
使用SPI接口读取从机的数据时,主机为什么要发送数据?
因为读数据也要主机发出时钟,一般的SPI口主机,发送一个数据的时候才会启动时钟,所以要发数据咯。你如果可以单独启动时钟,就可以不发也能收到了。
DSP28335的SPI发送的是16位的数据,我怎么发送给单片机8位的SPI,单...
你可以将单片机SPI设定为主模式,而将DSP28335的SPI设定为从模式,主模式工作时是单片机发时钟给DSP,DSP根据时钟信号一位一位的传送数据。单片机发完一字节可以先行处理接收的8位数据,完之后再接收下一个8位。
单片机模拟的SPI口,一次只能发一个字节吗?为什么?我有13位可以一次发送...
SPI只是一种协议,是发送方和接收方双方约定的发送接收方式。单片机模拟SPI,当然可以发送任意数据,13位当然也可以一次发送完。但这时,要考虑接收方的设置,是不是可以一次接收13位数据。
单片机spi通信的问题
对于C8051F330而言,你需要设置好SPI的时序,极性以及空闲时的状态,一般在送完一个字节后,要等待spi中断后,在能进行第二次送数据 我截取部分程序给你看看 void SPI_INT(void) \/\/SPI初始化 { SPI0CFG=0x40;SPI0CN=0x01; \/\/0000 0001最后一位是SPI使能位 SPI工作在三线主方式 SPI0CKR=0x0f...
单片机模拟SPI时钟控制
比如说单片机像一个有SPI接口的LED驱动发数据时,先将SCK送低电平,然后送一位数据到mosi,这时,把SCK送一,然后再送0,就实现了一个上升沿并为下一个上升沿做准备。如此往复,知道8位数据送完。当单片机要读数据时,数据是在MISO引脚上的,这时,把SCK拉高,然后再拉低,数据就会出现在MISO引脚上...
8位SPI单片机怎么和16位的SPI外设同步
时钟相同就可以。SPI通信发送数据的时候都是是单个字节(8位)发送和接收。接收和发送16位的数据,他也会分成两个字节来进行。就是你的MCU接收两次