论坛风格切换切换到宽版
  • 3089阅读
  • 11回复

用89C51的标准串行口输出来控制MC145157工作 [复制链接]

上一主题 下一主题
离线Mit
 
发帖
808
只看楼主 倒序阅读 0楼 发表于: 2003-10-24
如果想用89c51的标准串行口输出(txd,rxd,clk)来控制mc145157工作不知是否可以?我没有条件做试验。谢谢!
离线bg4jj
发帖
5094
只看该作者 1楼 发表于: 2003-10-24
离线Mit
发帖
808
只看该作者 2楼 发表于: 2003-10-25
数据分两次传送?另外,标准的串行输出波形是什么样子的啊?我指的是时钟和数据的波形。每个脉冲是上凸还是下凹?
离线BG6AGB
发帖
915
只看该作者 3楼 发表于: 2003-10-26
我控制145162是用并口模拟串口.
离线Mit
发帖
808
只看该作者 4楼 发表于: 2003-10-26
请问怎么模拟串口?用移位寄存器吗?谢谢!
离线bg4jj
发帖
5094
只看该作者 5楼 发表于: 2003-10-27
正脉冲
离线1259
发帖
373
只看该作者 6楼 发表于: 2003-12-03
就用 i/o 口模拟就行了,你还要更详细吗,你说一声。
离线Mit
发帖
808
只看该作者 7楼 发表于: 2003-12-05
当然了,谢谢!!!!!
离线1259
发帖
373
只看该作者 8楼 发表于: 2003-12-06
首先,先准备出三根空余的口线,一根作使能控制,就是连接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单片机是先发低字节的。要先组织好数据结构,然后再发。
离线Mit
发帖
808
只看该作者 9楼 发表于: 2003-12-06
我要送两车皮的73给您!
离线1259
发帖
373
只看该作者 10楼 发表于: 2003-12-06
不客气
离线bg4jj
发帖
5094
只看该作者 11楼 发表于: 2003-12-09
敬佩:)