搜索
bottom↓
回复: 21

请抽点时间吧,大神。

[复制链接]

出0入0汤圆

发表于 2013-8-10 16:49:45 | 显示全部楼层 |阅读模式
本帖最后由 大哈欠E 于 2013-8-10 16:50 编辑

小生刚接触汇编,用汇编写了一个AT24c02的驱动程序,可是怎样都写不了数据,读出来的数据竟然是零,悲剧,检查了半天也没检查出来,无奈,只好来此论坛来骚扰各位大神,请大神帮帮忙啊。

ACK  BIT  10H        ;应答位标志
SLA  DATA 30H        //器件地址
SUBA DATA 31H         //字节地址
NUMBYTE DATA 32H  //写或读取的字节长度
SDA EQU P2.1          //数据口
SCL EQU P2.0          //时钟
MTD EQU 40H                  //写数据的缓冲首地址
MRD EQU 49H                  //读取数据的缓冲首地址
N   EQU 01H                   //数据长度
;---------------------主程序------------------------------
;---功能为写一个0xFE数据到AT24c02,然后读取出来付给P3口,使P3.7led亮,验证读取-------
ORG 0000H
AJMP MAIN
ORG  0030H
MAIN:
MOV MTD,#0FEH
ACALL WRAT24C
ACALL RDAT24C
MOV A,MRD
MOV P3,A
SJMP $

;-----------------写多字节子程序------------------
WRAT24C: MOV SLA, #0A0H
MOV NUMBYTE,#N
MOV SUBA ,#20H
LCALL IWRENBYTE
RET
IWRENBYTE: MOV A,NUMBYTE
MOV R3,A
LCALL START
MOV A, SLA
LCALL WRBYTE
LCALL CACK
JNB  ACK,RETWRN
MOV  A,SUBA
LCALL WRBYTE
LCALL CACK
;JNB ACK,RETWRN
MOV R1,#MTD
WRDA:         MOV A,@R1
LCALL WRBYTE
LCALL CACK
JNB ACK,IWRENBYTE
INC R1
DJNZ R3,WRDA
RETWRN:  LCALL STOP
RET

;------------------读取多字节子程序-------------------                                 
RDAT24C: MOV SLA,#0A0H
MOV NUMBYTE,#N
MOV SUBA,#20H
LCALL IRDNBYTE
RET

IRDNBYTE: MOV R3,NUMBYTE
   LCALL START
   MOV A,SLA
   LCALL WRBYTE
   LCALL CACK
   JNB ACK,RETRDN
   MOV A,SUBA
   LCALL WRBYTE
   LCALL CACK
   LCALL START
   MOV A,SLA
   INC A
   LCALL WRBYTE
   LCALL CACK
   JNB  ACK,IRDNBYTE
   MOV  R1,#MRD
RDN1   : LCALL RDBYTE
   MOV @R1,A
   DJNZ R3,SACK
   LCALL MNACK
RETRDN:   LCALL STOP
   RET
SACK:     LCALL MACK                          //发送应答
   INC R1
   SJMP RDN1

;------------------------开始信号--------------------------------------------------------
START:
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR  SDA
NOP
CLR SCL
RET
;--------------结束信号-----------------
STOP:  
CLR SDA
NOP
SETB SCL
NOP
NOP
SETB SDA
NOP
CLR SCL
RET

;-------------写字节子程序-------------------
WRBYTE: MOV R0,#08H
WR1: RLC A
MOV SDA,C
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R0,WR1
NOP
RET

;---------读取字节子程序--------------------
RDBYTE: MOV R0,#08H
RD1:    SETB SDA    ;读之前io口先置1
SETB SCL
NOP
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
NOP
DJNZ R0,RD1
RET

;------------发送应答位子程序--------------------
MACK:          CLR SDA ;低电平位应答信号
NOP
NOP
SETB SCL
NOP
NOP
CLR  SCL
NOP
NOP
RET

;------------发送非应答位子程序-------------
MNACK:    SETB SDA  ;高电平时为非应答信号
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR  SCL
NOP
NOP
RET

;-----------------检查应答位子程序-----------------------   
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
MOV C,SDA
JC  CEND
SETB ACK
CEND: NOP
CLR  SCL
NOP
RET
END


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入12汤圆

发表于 2013-8-10 17:21:42 | 显示全部楼层
看到汇编,吓死掉,赶紧路过

出0入0汤圆

 楼主| 发表于 2013-8-10 17:21:46 | 显示全部楼层
要落空了。。。

出0入8汤圆

发表于 2013-8-10 17:24:06 | 显示全部楼层
什么时候还用汇编,

出0入0汤圆

 楼主| 发表于 2013-8-10 17:24:23 | 显示全部楼层
skynet 发表于 2013-8-10 17:21
看到汇编,吓死掉,赶紧路过

我也知道,大家都一样,看代码就烦,不期待了,专心找错误。。

出0入0汤圆

 楼主| 发表于 2013-8-10 17:26:32 | 显示全部楼层
hellowolf 发表于 2013-8-10 17:24
什么时候还用汇编,

那用什么?我是用c之后觉得很有必要搞一下汇编,才返过去学的

出0入0汤圆

发表于 2013-8-10 17:52:10 | 显示全部楼层
大神!没学过汇编的撸过

出0入0汤圆

发表于 2013-8-10 18:09:35 | 显示全部楼层
最好自己搭电路测试,而不是用仿真。汇编那么长没几个人会义务帮你看下去的。自己耐心点,这些东西网上很多参考,只要你有耐心很容易解决这问题的。

出0入0汤圆

发表于 2013-8-10 18:25:05 来自手机 | 显示全部楼层
没用示波器看波形吗

出0入0汤圆

发表于 2013-8-10 18:26:08 来自手机 | 显示全部楼层
好吧,没看到是仿真

出0入0汤圆

发表于 2013-8-10 18:26:47 | 显示全部楼层
其实,你才是大神

出0入0汤圆

发表于 2013-8-10 18:41:26 | 显示全部楼层
楼主才是大神!~

出0入0汤圆

发表于 2013-8-10 18:51:49 | 显示全部楼层
去周立功网站下一个模版,非常经典的I2C

出0入0汤圆

 楼主| 发表于 2013-8-10 20:36:26 | 显示全部楼层
SevenLiu 发表于 2013-8-10 18:09
最好自己搭电路测试,而不是用仿真。汇编那么长没几个人会义务帮你看下去的。自己耐心点,这些东西网上很多 ...

嗯,要不是不久前 打球把左手给废了,很多电路都想搭建了,现在还是一个手码字。。。我操。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

出0入0汤圆

 楼主| 发表于 2013-8-10 20:37:15 | 显示全部楼层
zuu0 发表于 2013-8-10 18:26
其实,你才是大神

你才是大神,你全家都是大神!呵呵。。

出0入0汤圆

 楼主| 发表于 2013-8-10 20:37:38 | 显示全部楼层
孩子莫悲伤 发表于 2013-8-10 18:41
楼主才是大神!~

你也是大神。。

出0入0汤圆

 楼主| 发表于 2013-8-10 20:38:10 | 显示全部楼层
jacky2011 发表于 2013-8-10 18:51
去周立功网站下一个模版,非常经典的I2C

是吗?去看看。。

出0入0汤圆

 楼主| 发表于 2013-8-10 20:38:51 | 显示全部楼层
meirenai 发表于 2013-8-10 17:52
大神!没学过汇编的撸过

嗯 我也接触不久。。

出0入0汤圆

 楼主| 发表于 2013-8-10 22:33:38 | 显示全部楼层
尼玛,终于找出错误了!!!!希望像我一样的新手,不要犯此类错误,原因:由于此前用惯了C,习惯在建立文件之前添加keil A51启动文件,这个文件主要是配置程序入口 堆栈指针等初始化环境的,用c写是需要的该启动文件的,不过熟悉汇编的话,也可以自己写,而我用的是汇编写代码就不需要该启动代码了。
   大神说“startup.a51中一般已经包含了main标号,初学者写汇编如果还包含启动文件,容易出现符号重定义错误。而且用汇编多半意味着编程者希望事必躬亲,从初始化到向量配置等等底层工作全部包干,这种情况下startup.a51在编程者眼中完全是垃圾。 而对于采用C/C++编写程序就是完全另一回事了。这类编程者多半对于硬件底层未见得需要了解得多么透彻,启动文件准备好了一个可预测的初始工作环境,方便高级语言在此基础上完成较为抽象的工作”

出145入215汤圆

发表于 2013-8-11 02:55:57 | 显示全部楼层
楼主厉害。有多少人用了C还去学汇编了!支持楼主

出0入0汤圆

发表于 2013-8-11 03:24:31 | 显示全部楼层
好吧 当年我也会汇编 现在给我认真看汇编那就算了吧

出0入0汤圆

发表于 2013-8-11 07:52:28 | 显示全部楼层
恭喜楼主解决问题 mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表