首先,先准备出三根空余的口线,一根作使能控制,就是连接pll的enb,第二根用来模拟时钟,连接pll的clk,第三根用来作为数据输出,连接 din。
写pll寄存器有两种方式,一是中断模式,一是直接延时模式。
直接延时模式比较简单,你的单片机如果也没有其他的事情就这么用吧
我没有mc145157的数据手册,我写的是按mc145170的控制寄存器工作的,你比较一下吧,反正就是这个意思。
1. mc145170的控制字共有三个控制寄存器,一个八位的c控制寄存器,一个15位或者24位的r寄存器,一个16位的n寄存器。你写多少个比特,就自动进入那个寄存器,不需要额外的地址识别。比如说你写n寄存器,16个bit. 也就是要连着写16个bit,共2个字节。你可以先把控制字计算好了,然后放到2个字节当中,注意,pll要求高位在前,别搞反了。
2. 令使能端口有效,enb是低有效,你就把这个口线先置低,然后就延时10豪秒。
3. 准备数据,你先把高字节拿出来,注意最高比特在那个方向,假定数据是这样组织的,最高位在高字节的最左边,也就是高字节从左到右是依次是 bit15 到 bit8, 低字节从左到右依次是 bit7到 bit0。发送开始的时候,先对高字节向左移位,移出的第一位就是最高位,你判断这一位是0还是1,如果是0,数据线就置低,如果是1,就置高。
4. 由于数据是在时钟的上升沿写入的,所以要先准备好数据,再发时钟。在把enb置低之前,要先把时钟线初始化,也就是置低。在数据准备好以后,你就把时钟线置高,此时,一个bit就写进去了。延时10us,再把时钟线置低,这样不就模拟出一个时钟信号了吗。
5. 下一步就重复第三和第四步,对每一个bit进行移位和发送。直到所有的bit都移位进去。
6. 将使能端,也就是enb置高,这时完整的控制字就被写入到了相应的控制寄存器中了,注意,pll是根据写入的bit的位数来识别是写那个寄存器的。
最后说明:我写这些其实就是把数据手册上的时序图给你又口头的描述了一遍,你要是有时间就研究一下那个pll的时序图吧,看明白一个,其他也就明白了,还有什么问题,我们再探讨,我也好长时间没有用51了,今天才又现看了几眼和mc145170,可能有不对的地方,你要注意了。
还有,我仔细看了一下mc145170的数据手册,其实直接用串行口发送也应该是可以的,也就是让串行口工作在模式0,移位寄存器模式。但要注意,51单片机是先发低字节的。要先组织好数据结构,然后再发。