搜索
bottom↓
回复: 9

模拟SPI程序书写思路

[复制链接]

出0入0汤圆

发表于 2014-10-23 15:19:42 | 显示全部楼层 |阅读模式
有哪位大神能帮忙列举一下,书写模拟SPI程序的大致思路和方法,小弟感激不尽。
另外,下面这段程序中有以下几个问题请教以下:
1、程序中if((i & (temp >> loop)))是什么意思?
2、通过SPI读一个数据的时候不用发送一个地址的吗?以下程序uchar SPI_READ_ONE_DATA(void) 好像没有。
void SPI_SEND_ONE_DATA(uchar i)    //SPI发一个字节
{
  uchar loop;
  uint delay;
  uchar temp;
  temp = 0x80;
  for(loop = 0; loop < 8; loop++)
  {
   if((i & (temp >> loop)))
    DIN_1;
   else
     DIN_0;
   for(delay = 10;delay > 0; delay--);
   SCLK_1;
   for(delay = 50;delay > 0; delay--);
   SCLK_0;
   for(delay = 50;delay > 0; delay--);
  }
//  for(delay = 50;delay> 0; delay--);
}

uchar SPI_READ_ONE_DATA(void)  //SPI收一个字节
{
  uchar loop;
  uint delay;
  uchar temp;
  uchar i;
  i = 0x00;
  for(loop = 0; loop < 8; loop++)
  {
   i = i << 1;
   SCLK_1;
   for(delay = 50; delay > 0; delay--);
   temp = P1IN;
   if((temp & 0x08))
     i |= 0x01;
   SCLK_0;
   for(delay = 50;delay > 0; delay--);
  }
//  for(delay = 50;delay > 0; delay--);
  return i;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-10-24 08:59:19 | 显示全部楼层
if((i & (temp >> loop)))   把数据分成1bit 1bit发送出去。譬如 i = 01100 0000,那么第一次就是0000 0000,那么为假DIN_0,第二次就是0100 0000 ,为真DIN_1.

出0入0汤圆

 楼主| 发表于 2014-10-24 09:29:01 | 显示全部楼层
suny1022 发表于 2014-10-24 08:59
if((i & (temp >> loop)))   把数据分成1bit 1bit发送出去。譬如 i = 01100 0000,那么第一次就是0000 0000 ...

你好,我想问一下temp=0x80是什么意思?

出0入0汤圆

发表于 2014-10-26 23:24:54 | 显示全部楼层
本帖最后由 siroyiryuu 于 2014-10-26 23:27 编辑

汉字编码区别于其他编码的标志就是汉字编码的最高位是1。 0x80在计算机内部表示为1000 0000,这段程序常用于判断当前字符是否是汉字。&是按位与, 对应都是1时才为1, 其它情况均未0. 如: 1010 1011 & 1000 0000 = 1000 0000 即你问题中的 temp&0x80。

或者:
temp|=0x80; //等价于
temp=temp|0x80;//表示将temp第一个字节的最高位置为1。

其实百度一下都有……

出0入0汤圆

发表于 2014-10-27 17:15:12 | 显示全部楼层
Mrcode 发表于 2014-10-24 09:29
你好,我想问一下temp=0x80是什么意思?

楼上说的很清楚了,汉字的编码规则确定了第一位为1,0X80的最高位就为1,然后&去判断

出0入0汤圆

发表于 2014-10-28 13:10:23 来自手机 | 显示全部楼层
Mrcode 发表于 2014-10-24 09:29
你好,我想问一下temp=0x80是什么意思?

取一个字节最高位的常数,取低位用0x01。

出0入0汤圆

 楼主| 发表于 2014-10-31 15:43:17 | 显示全部楼层
siroyiryuu 发表于 2014-10-26 23:24
汉字编码区别于其他编码的标志就是汉字编码的最高位是1。 0x80在计算机内部表示为1000 0000,这段程序常用 ...

谢谢,我明白了,呵呵。

出0入0汤圆

发表于 2014-11-3 14:32:53 | 显示全部楼层
大家都解释得很详细了,我围观下就好。最希望看到这样的情况,互助

出0入0汤圆

发表于 2015-10-20 15:13:30 | 显示全部楼层
2、通过SPI读一个数据的时候不用发送一个地址的吗?以下程序uchar SPI_READ_ONE_DATA(void) 好像没有。

楼主的第二条问题,好像还没人回答哦。

出0入0汤圆

发表于 2015-10-21 12:35:59 | 显示全部楼层
MC-26 发表于 2015-10-20 15:13
2、通过SPI读一个数据的时候不用发送一个地址的吗?以下程序uchar SPI_READ_ONE_DATA(void) 好像没有。

楼 ...

楼上的应该是一主一从的情况,如果是多从需要约定地址
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 04:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表