查看完全版本 : 串行控制
我想容89c51串行控制mc145170,汇编语言怎么写?
最初由 bg6iah 发布
我想容89c51串行控制mc145170,汇编语言怎么写? 145170的资料我没仔细看过,如果用的不是标准的串行口,那就只能用软件模拟符合它的协议的一个串口的程序,这种程序网上有很多类似的,但一样的很少,只要自已改一下就行了,这也正是乐趣所在!
大家到 www.ic.net.cn 上去找需要的芯片吧,基本上能想到的肯定能找到
这你要看时序了,另外一个字节也写不完,不如就直接用 IO 口线模拟了。
我仔细看了一眼MC145170, 应该可以用串行口直接写,它的三个控制字分别是1个字节,2个字节和三个字节,时序是和51的一样的,你自己加一根 ENB的控制线,另外,51是先发低比特LSB,但是PLL要求先发高比特MSB.
下面一段是我刚在另外一个帖子里边写的。如果有用,你就看几眼。
首先,先准备出三根空余的口线,一根作使能控制,就是连接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单片机是先发低字节的。要先组织好数据结构,然后再发。
starnewtech
2003-12-08, 13:08
不能直接使用51的串行口,因为CLK无法提供!
移位时钟不就是时钟吗?只不过具体时序我还没有太仔细看,觉得似乎是没有问题。
要控制70,随便用2、3根IO线来模拟70的协议就OK,很简单的,我已经做过了用MB1504、MC。。。70的PLL,以及AD985X系列的DDS,都是用IO口线来模拟时序的
可以和我合作,我写程序,报酬是最后得到几快做好的板子
感谢大家的回复,我再试试看。
谢谢了!
73! 73! 73!
vBulletin Version 3.0.7 Translated by
NewVBB.com™ 2009.
Translated and Hacked by:
Ztbbs