共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年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |