OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4062|回复: 2

51单片机模拟iic时发现用到psw寄存器的CY位,求大神帮忙解答一下疑惑

[复制链接]

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
发表于 2017-1-19 21:41:17 | 显示全部楼层 |阅读模式
1金钱
这是模拟应答的程序:
//位定义
sbit SCL=P1^0;
sbit SDA=P1^1;
bit I2C_RecvACK()//处理器检测到SDA拉低就能知道外接IIC设备数据已经收到
{
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    CY = SDA;                   //读应答信号
    SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时
    return CY;
}我查了下资料,说:CY表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。我想问,
1.怎么才算借位??。
2.SDA只有1或0,那他最高位就只有1位,怎么都进不上去啊,那CY不就一直是0吗?。
3.CY位既然是处理器状态标志位,那么理论上CY应该是由硬件控制,为什么课一对他进行赋值呢?
4.能不能直接设个变量,如 uchar flag;flag=SDA;return flag;这样可以不?
求大神教教我,这种类型的寄存器不会用。还是我理解有问题,CY = SDA这句话表示,CY位对SDA引脚也就是P1.1进行检测?还有就是能否给我讲解一下什么是进位或者借位,能不能给我举个具体的例子?



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-1-19 22:10:54 | 显示全部楼层
就把CY当一个局部变量 就行了.不用真的去理解它的实际情况..功能做到了就可以了.如果要方便移植.最好不要使用CY.
回复

使用道具 举报

48

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
387
金钱
387
注册时间
2016-11-21
在线时间
64 小时
 楼主| 发表于 2017-1-20 15:32:33 | 显示全部楼层
对,我的意思是,能不能直接用一个变量flag去代替他。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 13:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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