这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 430 求教:430与铁电的接口程序

共2条 1/1 1 跳转至

430 求教:430与铁电的接口程序

院士
2006-09-17 18:14:16     打赏
430 求教:430与铁电的接口程序



关键词: 求教     铁电     接口     程序    

院士
2006-12-22 22:43:00     打赏
2楼
问 我的程序如下,但就是在写第一个地址时就停在检测反馈信号那里,始终不出来了。大家帮忙。

;********************************
; 产生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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]