完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我又一个IIC的读函数如下;
u8 I2C_Read_Byte(unsigned char ack) { //unsigned char i,receive=0; u8 i,receive = 0; SDA_IN(); for(i=0;i<8;i++ ) { SCL_H(); delay_us(5); receive<<=1; if(READ_SDA())receive++; delay_us(5); SCL_L(); delay_us(5); } if (!ack) I2C_NACK(); else I2C_ACK(); return receive; } 他的上一层是:void I2C_Read_Function(u8 ReadAddr,u8 ReData) { I2C_START(); I2C_Send_Byte(PCF8563_ADDR_W); if(I2C_Wait_ACK())return; I2C_Send_Byte(ReadAddr); if(I2C_Wait_ACK())return; I2C_START(); I2C_Send_Byte(PCF8563_ADDR_R); if(I2C_Wait_ACK())return; ReData = I2C_Read_Byte(0); I2C_STOP(); } 而这个函数的上一层是: I2C_Read_Function(PCF8563_SECOND_REGISTER,R_date.Second_Time); 这个函数在调试的时候发现,receive是有读取到值,当我顶层调用的时候,ReData也是有值的,可是顶层R_date.Second_Time的值一直都是0x00 这个是什么原因呢,数据类型都是U8没有问题啊? |
|
相关推荐
14个回答
|
|
你的意思参数必须得定义成指针吗,是这样吗,我之前也有直接传递变量的时候啊
|
|
|
|
如果,你是需要往函数里传入值,可以直接传递变量,如果你要从函数返回值,要么直接返回,要么通过参数的指针来操作函数外层的参数 |
|
|
|
本帖最后由 watercici 于 2018-5-3 17:04 编辑 那下面这个函数呢: R_date.Second_Time = (u8)BCDToDec(R_date.Second_Time & 0x7f); unsigned char BCDToDec(unsigned char _BCD) { unsigned char temp = 0; unsigned char temp1 = 0; temp = ((unsigned char)(_BCD & (unsigned char)0xF0) >> (unsigned char)0x04) * 10; temp1 = temp + (_BCD & (unsigned char)0x0F); return temp1; } 这个是temp1的返回值给不了R_date.Second_Time,这个是怎么回事?? 在线等,谢谢,有点儿着急 |
|
|
|
你这个函数是对的呀,你在PC上单独测试这个函数是正确的 |
|
|
|
老铁 黑皮男说的对 你坚持值传递也可以如下 u8 I2C_Read_Function(u8 ReadAddr) { u8 ReData ; I2C_START(); I2C_Send_Byte(PCF8563_ADDR_W); if(I2C_Wait_ACK())return; I2C_Send_Byte(ReadAddr); if(I2C_Wait_ACK())return; I2C_START(); I2C_Send_Byte(PCF8563_ADDR_R); if(I2C_Wait_ACK())return; ReData = I2C_Read_Byte(0); I2C_STOP(); return ReData ; } R_date.Second_Time=I2C_Read_Function(PCF8563_SECOND_REGISTER); |
|
|
|
可是,我的值传不上来,现在也不能调试,一点运行按钮,就停止,PC指针指向0x00000000 |
|
|
|
本帖最后由 anobodykey 于 2018-5-3 17:42 编辑 你的BCDToDec函数是对的,返回值可以正确的返回,你可以通过PC来测试 可以看到num的值是变了的,至于你说的在单片机上,值传不上来是其他的问题。 |
|
|
|
void I2C_Read_Function(u8 ReadAddr,u8 ReData),这里是错误的。要么用指针入口,要么用返回结果。
|
|
|
|
入口的内容是什么,如果是0返回0是正常的。 |
|
|
|
|
|
|
|
对,这个问题弄明白了,是形参实参的问题 |
|
|
|
对,这个问题弄明白了,是形参实参的问题 |
|
|
|
时钟的问题了
|
|
|
|
结贴:这个问题主要是形参实参的问题,实参可以传递给形参,但形参不能传给实参
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1107 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1055 浏览 2 评论
2159 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1253 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1678 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 11:55 , Processed in 0.817184 second(s), Total 72, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号