共2条
1/1 1 跳转至页
430 求教:430与铁电的接口程序
问
我的程序如下,但就是在写第一个地址时就停在检测反馈信号那里,始终不出来了。大家帮忙。
;********************************
; 产生I2C总线启动时序子程序 *
;********************************
I2C_Start BIC.B #SCL+SDA,&P3DIR ; Set SCL/SDA to Input
BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
RET
;********************************
; 产生I2C总线停止时序子程序 *
;********************************
I2C_Stop BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
BIC.B #SDA,&P3DIR ; SDA Input, SDA=1
RET
;********************************
; 从I2C总线读取一个字节子程序 *
;********************************
; 数据保存在R14中,R15为位计数器
I2C_Read MOV.B #8,R15
I2C_RX BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
BIT.B #SDA,&P3IN ; SDA-->C
RLC.B R14 ; C-->R14
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
DEC.B R15
JNZ I2C_RX
RET
;********************************
; 向I2C总线发送一个字节子程序 *
;********************************
; R14为发送的数据,R15为位计数器
I2C_TX MOV.B #8,R15
I2C_Send RLA.B R14 ; R14-->C
JC Send1
Send0 BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
JMP Send_Bit
Send1 BIC.B #SDA,&P3DIR ; SDA Input, SDA=1
Send_Bit BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
NOP
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
NOP
DEC.B R15
JNZ I2C_Send
BIC.B #SDA,&P3DIR ; SDA Input, SDA=1,发送完毕,SDA置为空闲
CALL #I2C_Ackn
RET
;********************************
; 从I2C总线检测反馈信号子程序 *
;********************************
I2C_Ackn BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
Ack_Wait BIT.B #SDA,&P3IN ; 检测SDA是否有反馈信号
JNZ Ack_Wait
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
RET 答 1: 若无反馈信号,应该是继续从新发送数据,而不是一直等待。程序我没细看,大体上是正确的。你先调着,不行,在发例程给你。 答 2: 铁电的频率越慢越好,最好在每次断口操作后延时。3-5个NOP 答 3: 不行。还是调不通。还在是不断检测反馈信号。
给我例程吧,让我参考参考。我的Email是:jhdzmail.jxptt.zj.cn
谢谢。 答 4: 读出好象已经可以了,但写入还是有问题。好象没有写进的感觉。
以下这段程序是将01h写入铁电的00字节区域。请大家帮忙。
CALL #I2C_Start
MOV.B #10100000b,R14
CALL #I2C_TX
MOV.B #00h,R14
CALL #I2C_TX
MOV.B #01h,R14
CALL #I2C_TX
CALL #I2C_Stop 答 5: 读和写的时序频率一定不要大于400K!注意这个就可以了 答 6: 我的UCLK=ACLK=32768Hz,即每执行一条指令要30.5us左右,根本不会超出400K的速度。可是就是无法写。
我会继续调。但愿有经验的朋友也帮个忙。 答 7: 用的哪种型号?工作电压几伏?我试过FM24C04,用51写的,完全正常! 答 8: 像FM24CLxx,我将MCLK频率控制在2MHz上一点问题也没有. 答 9: 我用的是FM24CL04,工作电压3.2V,它的总线频率可以达到1M。
3qxj:能给我一个示例程序吗?
;********************************
; 产生I2C总线启动时序子程序 *
;********************************
I2C_Start BIC.B #SCL+SDA,&P3DIR ; Set SCL/SDA to Input
BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
RET
;********************************
; 产生I2C总线停止时序子程序 *
;********************************
I2C_Stop BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
BIC.B #SDA,&P3DIR ; SDA Input, SDA=1
RET
;********************************
; 从I2C总线读取一个字节子程序 *
;********************************
; 数据保存在R14中,R15为位计数器
I2C_Read MOV.B #8,R15
I2C_RX BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
BIT.B #SDA,&P3IN ; SDA-->C
RLC.B R14 ; C-->R14
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
DEC.B R15
JNZ I2C_RX
RET
;********************************
; 向I2C总线发送一个字节子程序 *
;********************************
; R14为发送的数据,R15为位计数器
I2C_TX MOV.B #8,R15
I2C_Send RLA.B R14 ; R14-->C
JC Send1
Send0 BIS.B #SDA,&P3DIR ; SDA Output,SDA=0
JMP Send_Bit
Send1 BIC.B #SDA,&P3DIR ; SDA Input, SDA=1
Send_Bit BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
NOP
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
NOP
DEC.B R15
JNZ I2C_Send
BIC.B #SDA,&P3DIR ; SDA Input, SDA=1,发送完毕,SDA置为空闲
CALL #I2C_Ackn
RET
;********************************
; 从I2C总线检测反馈信号子程序 *
;********************************
I2C_Ackn BIC.B #SCL,&P3DIR ; SCL Input, SCL=1
Ack_Wait BIT.B #SDA,&P3IN ; 检测SDA是否有反馈信号
JNZ Ack_Wait
BIS.B #SCL,&P3DIR ; SCL Output,SCL=0
RET 答 1: 若无反馈信号,应该是继续从新发送数据,而不是一直等待。程序我没细看,大体上是正确的。你先调着,不行,在发例程给你。 答 2: 铁电的频率越慢越好,最好在每次断口操作后延时。3-5个NOP 答 3: 不行。还是调不通。还在是不断检测反馈信号。
给我例程吧,让我参考参考。我的Email是:jhdzmail.jxptt.zj.cn
谢谢。 答 4: 读出好象已经可以了,但写入还是有问题。好象没有写进的感觉。
以下这段程序是将01h写入铁电的00字节区域。请大家帮忙。
CALL #I2C_Start
MOV.B #10100000b,R14
CALL #I2C_TX
MOV.B #00h,R14
CALL #I2C_TX
MOV.B #01h,R14
CALL #I2C_TX
CALL #I2C_Stop 答 5: 读和写的时序频率一定不要大于400K!注意这个就可以了 答 6: 我的UCLK=ACLK=32768Hz,即每执行一条指令要30.5us左右,根本不会超出400K的速度。可是就是无法写。
我会继续调。但愿有经验的朋友也帮个忙。 答 7: 用的哪种型号?工作电压几伏?我试过FM24C04,用51写的,完全正常! 答 8: 像FM24CLxx,我将MCLK频率控制在2MHz上一点问题也没有. 答 9: 我用的是FM24CL04,工作电压3.2V,它的总线频率可以达到1M。
3qxj:能给我一个示例程序吗?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |