共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |