我曾用89c2051编程控制过mc145157(串行输入的芯片),瞎说两句,不知有无帮助:
mc145157内部有两个14位的移位寄存器-14-bit shift register,其分别作为片内两个锁存器(reference counter latch 和 n counter latch)的输入,另外还有一个长度为1位的移位积存器做为控制寄存器,其位于data引脚与14位移位积存器之间。与这些寄存器和锁存器相关的引脚为:data(数据输入pin10)、clk(时钟pin10)和enb(使能pin10)。用单片机控制向片内写数据时,它们有以下时序和逻辑关系:
当从data向片内写分频比时,先将enb置0(置0时,锁存器内容不随移位寄存器改变而改变),然后
clk每出现1个上升沿,1比特数据(1或0)即从data引脚被打入控制寄存器,然后随着后续时钟上升沿依次前移到14位寄存器的各位。当15个时钟上升沿过后,共打入15比特数据,其中14位为分频比,存储在移位积存器内,1位为控制位,存储在控制寄存器。
此时如enb置1,片内逻辑电路将根据控制位为1还是为0,决定写入那个锁存器(1-reference counter latch ,0- n counter latch),分频比生效。然后将enb置0。
编程时,数据写入部分的算法就是以上述关系为依据的。比如:可用89c2051的p1.7、p1.6、p1.5分别控制data、clk和enb引脚。首先,复位p1.5=0,将分频比分2次,共16位(第一位没有意义,最后一位是控制位)写入rn寄存器,然后通过循环位移指令从布尔累加器向p1.7输出数据,再令,p1.6复位和置位产生时钟信号上升沿,如此循环
16次后,令p1.5置位(置位后加一定的延时程序)使分频比生效,最后复位p1.5,写入成功。
我就是按上述思路试验的,用89c2051和mc145157在面包板上测试的,电路很简单。mc145157自带参考频率振荡器,写入分频比后,在片子的分fr引脚用频率计观察输出频率即可,验证程序是否工作正常。
如没有mc145157,也可用74s194等通用移位寄存器和发光二级管模拟也可,我试过,可以。
仅供参考