一个iic的问题

[复制链接]
 楼主| 1262910135 发表于 2014-6-11 17:08 | 显示全部楼层 |阅读模式
51单片机中定义:sbit SDA=P2^3;
有以下语句:
temp=0x00;
SDA=temp & 0x01;
我想问一下此时SDA的值是一个16进制数  还是  一个二进制数(0或1)?当temp改变的时候呢?
SDA=temp & 0x80呢?
求指点
电子缘科技 发表于 2014-6-11 17:44 | 显示全部楼层

程序

本帖最后由 电子缘科技 于 2014-6-11 21:43 编辑

本身程序
dirtwillfly 发表于 2014-6-11 20:50 | 显示全部楼层
SDA是二进制数,赋值时会强制数据类型转换
 楼主| 1262910135 发表于 2014-6-11 21:18 | 显示全部楼层
dirtwillfly 发表于 2014-6-11 20:50
SDA是二进制数,赋值时会强制数据类型转换

位定义sbit SDA=P2^3;之后SDA就是一个二进制数了吗?
SDA=temp & 0x01;后     temp最低位为0  SDA为0;  最低位为1时,SDA为0x01;强制转换为1吗?
那if((c<<1)&0x80)SDA=1;中,(c<<1)& 0x80后的值如果是0x80,也就是c左移一位后最高位为1时;if(0x80)这个判断是真还是假?是不是像c语言里面一样if后面括号里非0就是真   条件就成立?
 楼主| 1262910135 发表于 2014-6-11 21:18 | 显示全部楼层
dirtwillfly 发表于 2014-6-11 22:26 | 显示全部楼层
本帖最后由 dirtwillfly 于 2014-6-11 22:29 编辑
1262910135 发表于 2014-6-11 21:18
位定义sbit SDA=P2^3;之后SDA就是一个二进制数了吗?
SDA=temp & 0x01;后     temp最低位为0  SDA为0;   ...

相信不用我回答,你也已经有答案了:lol
实践出真知,用keil调试一下,看看变量值的变化,最直观的了
miaoaoao 发表于 2014-6-18 23:15 | 显示全部楼层
写上0x不就代表是十六进制了么,要是二进制的话写0b吧?
roykin 发表于 2014-6-18 23:24 | 显示全部楼层
要注意,&是位与运算,SDA=temp & 0x01;是读取最后一位的值,如果temp最后一位的值为1,那么SDA的值为1,否则为0;
对于引脚来说,它的状态只有两个,高电平和低电平,对引脚赋值的时候,除了0,其他数值对于这个引脚都视为高电平。
bestray 发表于 2014-9-9 11:16 | 显示全部楼层
debug
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

31

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部