打印

8位单片机访问16位的寄存器问题

[复制链接]
4586|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzeyue|  楼主 | 2011-2-23 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在在做一个测量电阻的程序。芯片使用4位半芯片MAX1499,MCU使用STC的51单片机,但是MAX1499内部的寄存器有很多都是16位的。它与MCU的通信使用SPI方式,我想问如何用8位机访问16位的寄存器啊?传输两次可以吗?

截图00.png (22.92 KB )

截图00.png

截图01.png (33.52 KB )

截图01.png

相关帖子

沙发
mmax| | 2011-2-23 10:07 | 只看该作者
本帖最后由 mmax 于 2011-2-23 10:08 编辑

SPI接口多少位都没问题。如果是并口总线就有限制了。
16位寄存器访问肯定有相关时序,你得好好查查AD的资料。

你这的问题跟多少位单片机没有关系。
8位单片机可以操作任意位的变量。1位、8位、16位、32位。
你在软件里面定义为int型的变量。
把16位数据按位存到变量里。操作起来都用int来操作。

使用特权

评论回复
板凳
wangzeyue|  楼主 | 2011-2-23 11:23 | 只看该作者
max1499的读写时序都是高位在前,别的时序我看不到了。。比如要往16位寄存器送的数是0xffff,unsigned int DAT = 0xffff;
但是SPI的数据寄存器是8位的啊,SPIDAT=DAT;?这样好像不行吧?

使用特权

评论回复
地板
wangzeyue|  楼主 | 2011-2-23 11:25 | 只看该作者
能不能把这个16位的数据拆分成两个CHAR型,然后我分两次送出去?

截图02.png (18.73 KB )

截图02.png

使用特权

评论回复
5
haiping0823| | 2011-2-23 12:29 | 只看该作者
连续读2次,一个字节读完后不对CS线进行操作,只拉低SCLK线,然后再读一个字节;这样应该可以读出来16位数据。

使用特权

评论回复
6
pingis58| | 2011-2-23 23:25 | 只看该作者
也可以不用硬件上的SPI通讯,自己用IO模拟下

使用特权

评论回复
7
zjp8683463| | 2011-2-23 23:48 | 只看该作者
应该不行,SPI内核的时序做死了.应该去看看51的SPI时序是怎么样的

使用特权

评论回复
8
chunyang| | 2011-2-23 23:52 | 只看该作者
一次操作就可以了,也只能一次操作,芯片的SPI时序必须保证,对于16位信息,MCU需开两字节的缓冲区,同时SPI使用软件模拟,以确保可以进行16位操作。

使用特权

评论回复
9
ejack| | 2011-2-24 08:03 | 只看该作者
关键在于片选信号。
这是许多微控制器的SPI模块让人最不爽的地方……

使用特权

评论回复
10
wangzeyue|  楼主 | 2011-2-24 10:34 | 只看该作者
现在是我要如何写16位数据,先发送一个字节,我要查询是不是发送完成,然后发第二个字节,但是这期间会耽误时序。。。。

使用特权

评论回复
11
wangzeyue|  楼主 | 2011-2-24 10:47 | 只看该作者
写完第一个字节后我延时8个时钟周期再写行吗?我是在不想去模拟SPI了。。。

使用特权

评论回复
12
computer00| | 2011-2-24 10:49 | 只看该作者
如果芯片本身的SPI不支持16位操作,那只能自己用IO口模拟SPI了。SPI主机很容易模拟的,照着时序图写就好了。

使用特权

评论回复
13
wangzeyue|  楼主 | 2011-2-24 11:05 | 只看该作者
好吧。。我试试模拟吧。谢谢各位!!!:'(

使用特权

评论回复
14
wangzeyue|  楼主 | 2011-2-25 10:27 | 只看该作者
我来反馈信息。
8位的MCU读写16位MCU可以用硬件SPI实现。条件是:MCU工作在主模式。因为SCLK是完全由主机控制的。主机不向从机写数据就没有时钟。
感谢大家
!感谢STC的梁工!
程序已验证。

使用特权

评论回复
15
jimwu2011| | 2011-11-29 09:10 | 只看该作者
14# wangzeyue 你好, 现在我也在写SPI相关的程序,遇到了一点问题:8位SPI和DSP的16位SPI通信时,数据接收错误,而且每次接收都不一样。想请教一下,8位和16位通信的要求。

使用特权

评论回复
16
qwert12345_2012| | 2012-11-9 16:09 | 只看该作者
wangzeyue 你好, 在8位STC通过SPI发送16位命令字给外设的环节,我也遇到同样的问题,能否把你的解决方式详细讲解一下?

使用特权

评论回复
17
木子烦心| | 2017-1-2 14:04 | 只看该作者
haiping0823 发表于 2011-2-23 12:29
连续读2次,一个字节读完后不对CS线进行操作,只拉低SCLK线,然后再读一个字节;这样应该可以读出来16位数 ...

不可以。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:爱21ic,爱你们,所以爱技术。

94

主题

499

帖子

3

粉丝