用C8051F236单片机控制ADF4113HV,其中使用的是3-wire接口。3-wire接口包括:CLK、DATA、LE。时序如下:
如若多个ADF4113HV的芯片,可在各个芯片中加入片选端/CS。
用单片机实现3-wire时序,首先确定CLK,DATA,LE的物理连接接在C8051F236的普通IO口上。如,将CLK接在P2.6,DATA接在P2.5,LE接在P2.4上。上图中所示的各个时间参数标准可参照芯片手册,然后推算出时钟频率、数据传送速率等,再由单片机产生相应的时序波形。以下按照上面的假设,KeilC下的C语言程序实现。
此处先说明使用#define编写函数与直接使用函数的区别。
如上图中LE信号作为选中信号,将LE拉低,可如下两种方式编写函数:
1. #define ADF4113_Select1() LE4113 = 0
2.void ADF4113_Select1(void)
{
LE4113 = 0;
}
很明显第一种方式在C语言层面上编写较为简洁,其实在汇编层面也一样较为简单。虽然在调用情况及C语言编写上看起来1中的ADF4113_Select1()是个函数,其实它是个#define语句,只是一个预编译,一个替代语句。有个小插曲,开始的时候将1的语句写成:
1. #define ADF4113_Select1() LE4113 = 0 ;
只是多了个分号,可是当在调用这个“函数”的时候只能写成ADF4113_Select1(),如果在调用时写成了ADF4113_Select1()则报错。这让人思维上一时间会想不通,为什么函数调用的时候不用分号结束呢?其实严格来说它不是个函数,只是一个替代字符串,将这个语句替代了用ADF4113_Select1()这个字符串来表示罢了。这样理解就很容易想通了,ADF4113_Select1()代表的是LE4113 = 0;它是带分号的,所以不再需要分号了。
而2这种方式,虽然只有一个语句,但还是一个函数,在编译成汇编后,后面还是会有个RET命令。
下面介绍单片机下3-wire接口的控制。
首先,实现CLK,DATA,LE三个物理接口的跳变控制。
然后,实现单个字节的通讯。
再根据ADF4113芯片,实现一条命令的写入。
文章评论(0条评论)
登录后参与讨论