维修网

 找回密码
 注册

QQ登录

只需一步,快速开始

微信扫码 , 快速开始

查看: 232|回复: 0

MCS-51单片机读写24C02汇编程序。

[复制链接]

classn_11

发表于 2010-1-29 21:13:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
;SDA EQU P1.6 ;(你可以根据你的情况变更引脚);SCL EQU P1.7;D15US,D1MS子程序分别为15uS和1mS延时程序,请根据你的晶体自行编写。;**************************************************************;24C01写初始.(传递的数据在R7中).;**************************************************************AT2401W: MOV P0,#0FFH ;置SDA/SCL=1 LCALL R2STAR ;写开始状态字 MOV R7,#10100000B ;SET 2401=写 LCALL R2SEND ;送 MOV ACC,30H ;30H指向2401数据的起始地址 MOV R7,ACC ;将要写2401的起始地址送到R7 LCALL R2SEND MOV R0,31H MOV ACC,@R0 ;取第一个号 MOV R7,ACC ;数据传递到R7 LCALL R2SEND ;写具体号码 LCALL R2STOP ;停止 LCALL D1MS ;等待一定时间使24C01内部写完成 RET;------------------------------------------;写到2401 本程序开始及结束SDA & SCL 均=0 ,发送数据在R7;------------------------------------------R2SEND: PUSH,ACC ;保存ACC MOV ACC,R7 ;将R7中的数发送出去 MOV R6,#08H ;往2401发送数据R2SLOP1: RLC A ;将ACC中的数据移到数据线上 MOV SDA,C ;送出数据 LCALL D15US SETB SCL ;发送串行时钟进行写操作 LCALL D15US CLR SCL DJNZ R6,R2SLOP1 ;串行发送8 BIT SETB SDA ;准备接收ACK LCALL D15US SETB SCL ;接收ACK的时钟 LCALL D15USR2SLOP2: MOV C,SDA ;写完后等待确认信号 ACK JC R2SLOP2 CLR SCL ;为下一步其它操作做准备 CLR SDA POP ACC ;还原ACC LCALL D1MS ;等待内部写完 RET;*******************************************************************;2401读初始.;------------------------------------------------------------------AT2401RC: LCALL R2STAR ;写状态字 MOV R7,#10100000B ;SET 2401=WRI LCALL R2SEND ;送出状态字 MOV A,30H ;上程序传来的读取地址 MOV R7,A ;地址数据送R7 LCALL R2SEND ;送出数据 MOV P0,#11111111B ;保证SDA/SCL起始=1 LCALL R2STAR MOV R7,#10100001B ;0A1H ;读状态 LCALL R2SEND LCALL R2READ ;读所需的数 LCALL R2STOP RET;**************************************************************;设置开始 ,初始SDA &SCL=1,结束 SDA & SCL=0;--------------------------------------------------------------R2STAR: LCALL D15US ;对2401操作开始 CLR SDA ;在SCL=1时,SDA由1变为0表示开始 LCALL D15US CLR SCL LCALL D15US RET;----------------------------------------------------------------;读取2401数据;----------------------------------------------------------------R2READ: PUSH ACC ;保存ACC MOV R6,#08HR2RLOP1: SETB SDA ;置数据线=1 LCALL D15US SETB SCL ;输出一个串行时钟 LCALL D15US MOV C,SDA ;读数据线上的数据到 C RLC A ;移到 ACC LCALL D15US CLR SCL DJNZ R6,R2RLOP1 ;读 8 BIT 数据 LCALL D15US CLR SDA MOV R7,ACC ;将接收到的数据保存到R7 POP ACC ;还原ACC RET;----------------------------------------------------------------;设置结束 在SEND & READ 后DSA & SCL均=0 ,本程序退出后 SDA & SCL=1;----------------------------------------------------------------R2STOP: LCALL D15US ;对2401操作结束 SETB SCL ;在SCL=1时,SDA由0变为1表示结束 LCALL D15US SETB SDA LCALL D15US RET

手机扫码浏览
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|手机版|小黑屋|最新贴|维修网 ( 粤ICP备09047344号

GMT+8, 2024-5-5 10:37 , Processed in 0.261986 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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