51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
E2PROM芯片24C02的读写程序
发布时间:2009/6/29  阅读次数:3147  字体大小: 【】 【】【

wrloop:Mov a,@r0

               Mov r7,a

               Inc r0

               Lcall send

               Djnz r5, wrloop             ;把3个字节的数据发送出去

               lcall stop                         ;停止

               lcall d1s      

               mov r5,#Numdata           ; 要读取的字节数重新赋值

Mainre:lcall start                         ;启动

               Mov r7,#0a0h

               Lcall send                         ;发送写24C02的寻址字节

               Mov r7,#2402data

               Lcall send                         ;发接受缓冲区首址

               Lcall start                         ; 再次启动

               Mov r7,#0a1h

               Lcall send                         ;发送读24C02的寻址字节

Reloop: Lcall read                         ;调用读取一个字节数据的子程序

               mov p0,r7                       ;把读进来的数送到p0口显示

               lcall d1s

               lcall d1s

               Djnz r5,reloop

               Lcall stop                        ;3字节读取完毕发出停止信号

               Ajmp $

init:         mov p2,#0ffh                   ;初始化,30h、31h、32h中存入0、1、2的段码

                 mov 30h,#48h                

               mov 31h,#0ebh

               mov 32h,#52h

               ret

start:  setb sda                         ;启动信号子程序,大家可以参考开始信号的时序图

               setb scl

               lcall d5u

               clr sda

               lcall d5u

               clr scl

               ret

stop:  clr sda                                 ;停止信号子程序

               setb scl

lcall d5u

               setb sda

               lcall d5u

               clr sda

               clr scl

               ret              

;send是发送一个字节子程序

send: mov r6,#08h                        

               mov a,r7                             ;要发送的数在r7中

sendlop1 : rlc a                                   ;左环移,把A的最高位移入cy

                 mov sda,c                         ;把cy的值通过sda发送出去

                 setb scl                             ;在scl上产生一个时钟

                 lcall d5u

                 clr scl

                 djnz r6, sendlop1               ;重复8次,发送一个字节

  ;cack是检查应答信号的子程序

cack:  setb sda                               ;主机首先拉高sda

               setb scl                                 ;发出一个时钟

               lcall d5u

sendlop2:mov c,sda                             ;读入sda的状态,如果是0表示接受到了应答

       jc sendlop2                  

        clr scl                                 ;接受到应答位,结束时钟

        ret            

read:         mov r6,#08h                           ;读取一个字节子程序

readlop1:   setb sda                                 ;置sda为输入方式

                 setb scl                                     ;发出一个时钟  

                 lcall d5u

                 mov c,sda                             ;读入sda状态

                 rlc a                                       ;把该位的状态移入A中  

                 clr scl                                   ;结束时钟

                 djnz r6,readlop1                   ;重复8次,读入一个字节

                 mov r7,a                                 ;读进来的数放在r7中  

;sack是发送应答位子程序

sack:    clr sda                                   ;拉低sda线

                 setb scl                                 ;发出时钟信号

                 lcall d5u

                 clr scl

                 setb sda

                 ret

d5u:         nop                                   ;延时5us子程序

                 nop

                 nop

                 nop

                 nop

                 ret

d1s:         mov r1,#100                 ;延时1s子程序

del1:       mov r4,#20

del2:       mov r3,#0ffh    

del3:       djnz r3,del3

                 djnz r4,del2

                 djnz r1,del1

                 ret

                 end

  

大家把这个程序下载到测试板上面,发现数码管依次显示数字0、1、2

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号