;
文章:行业新闻EDA文摘电源技术无线通信测量仪表嵌入式类电子技术制造技术半导体网络/协议展会实验家电维修  
  下载:EDA教程电源技术电子书籍电子元件无线通信通信网络电路图纸嵌入式类单片机传感/控制电子教材模拟数字
.... 音视频类
消费电子机械电子行业软件C/C++FPGA/ASIC规则标准家电维修DSPIC资料ARM软件电路图电子技术论坛
 
位置:电子发烧友 > 行业新闻 > 嵌入式类 > 单片机类 >24c64程序 退出登录 用户管理
栏目导航


· 单片机类 · 接口/总线/驱动
· ARM · DSP
· FPGA/ASIC技术 · 设计应用
· 嵌入式操作系统 · 电视卡
热门文章
· [组图] 电子元器件基础知识...
· [图文] USB接口定义
· [图文] 三极管开关电路图
· [组图] RS232 RS485接口原理...
· [组图] [组图]电动车充电器...
· [组图] 电子捕鱼器电路图
· [组图] 高品质音调电路的制...
· [组图] JRC4558电路
· [图文] M51134P低音炮电路图...
· [图文] TL494脉宽调制控制电...
相关文章

· [推荐] !!销售/收购VP7724A...
· [推荐] !泰克TDS2024B/TDS2...
· [图文] MAX6650和MAX6651风...
· DS8024 业内首款智能...
· 2009年第24届世界天...
· [图文] 得贝牌BC/BD-240型电...
· [图文] 声宝KP-F24B电热水瓶...
· [图文] 12V和24V直流辅助电...
· [组图] 输出电压24V 1.55A的...
· [图文] 罗马尼亚244型电视机...

24c64程序
作者:本站  来源:本站原创  发布时间:2008-4-14 13:03:15 减小字体 增大字体

24c64程序

该程序已使用过,免调试。

;宏定义区;
 N_NOP  MACRO
   nop
   nop
   nop
   ENDM

 TRAP  MACRO
   nop
   nop
   nop
   sjmp  $
   ENDM 
 
 TRAP_RET MACRO
   nop
   nop
   nop
   ret
   nop
   nop
   nop
   sjmp  $
   ENDM

;===============================================
;  function: start_24c ;启动I2C总线 
;  input:  ---------
;  output:  ---------
;  usage:  ---------  
;=============================================
start_24c: ;启动I2C总线
  setb  CSDA  ;数据线下降沿产生
  N_NOP
  setb  CSCL  ;时钟线下降沿
  N_NOP
  clr  CSDA
  N_NOP
  clr  CSCL
  N_NOP
  ret

;================================================
;  function: stop_24c ;停止I2C总线 
;  input:  
;  output:  ---------
;  usage:    
;================================================
stop_24c: ;停止I2C总线
  clr  CSDA  ;数据线上升沿有效?
  N_NOP
  setb  CSCL
  N_NOP
  setb  CSDA  ;数据线上升沿有效?
  N_NOP
  clr  CSDA  ;且时钟线须为高电平
  N_NOP
  clr  CSCL  ;且时钟线须为高电平
  N_NOP
  ret

;===============================================
;  function: ch_ack(应答位检查);应答位检查 
;  input:  
;  output:  ---------
;  usage:    
;==============================================
ch_ack:  ;应答位检查
  setb  CSDA
  N_NOP
  setb  CSCL
  N_NOP
out_chkack: mov  c,  SDA 
  jc  out_chkack
  clr  SCL
  N_NOP
  ret

;=================================================
;  function: send_ack(发送应答);;发送应答位 
;  input:  
;  output:  ---------
;  usage:    
;================================================
send_ack: ;发送应答位
  clr  CSDA
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP
  setb  CSDA
  N_NOP
  ret

;===================================================
;  function: send_ack(发送非应答);发送非应答位 
;  input:  
;  output:  ---------
;  usage:    
;=============================================
sendn_ack: ;发送非应答位
  setb  CSDA
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP
  clr  CSDA
  N_NOP
  ret

;=================================================
;  function: read_24c_N ;从I2C总线接收N个数据字节 
;  input:  r1---------欲接收数据存放缓冲区首址
;    b----------从器件地址/读写控制字
;    dptr-------欲从eprom读数据的首地址
;    r2---------欲接收数据的字节数
;  output:  ---------
;  usage:  a,c,r1,r2,dptr
;================================================
read_24c_N:;从I2C总线接收N个数据字节
  lcall  start_24c  ;start

  mov  a,  b ;ic_addr
  clr  acc.0
  lcall  out_24c

  ;mov  a,  dph ;addr_low
  ;lcall  out_24c

  mov  a,  dpl ;addr_hi
  lcall  out_24c

  lcall  start_24c  ;start

  mov  a,  b ;ic_addr
  lcall  out_24c

  dec  r2
  cjne  r2, #00h, read_loop
  sjmp  read_once
read_loop: lcall  in_24c   ;read
  lcall  send_ack  ;send nack
  mov  @r1,  a
  inc  r1
  djnz  r2,  read_loop

read_once: lcall  in_24c   ;read
  lcall  sendn_ack  ;send nack
  lcall  stop_24c  ;stop

  mov  @r1,  a
  TRAP_RET

;=================================================
;  function: write_24c_N ;向I2C总线发送N个数据字节 
;  input:  r0---------欲发送数据缓冲区首址
;    b----------从器件地址/写控制字
;    dptr-------欲写入eprom数据的首地址
;    r2---------欲发送数据的字节数
;  output:  ---------
;  usage:  a,c,r0,r2,dptr
;========================================================
write_24c_N:;向I2C总线发送N个数据字节
  lcall  start_24c  ;start

  mov  a,  b ;从地址
  lcall  out_24c

  ;mov  a,  dph ;高位地址
  ;lcall  out_24c

  mov  a,  dpl ;低位地址
  lcall  out_24c

write_loop: mov  a,  @r0
  lcall  out_24c
  inc  r0
  djnz  r2,  write_loop

  lcall  stop_24c  ;stop
  N_NOP
  N_NOP
  TRAP_RET

;=========================================================
;  function: write_24c_1 ;向I2C总线发送1个数据字节 
;  input:  b----------要写的数据
;    dpl-------欲写入eprom数据的地址
;  output:  ---------
;  usage:  a,b,dptr
;=========================================================
write_24c_1:;向I2C总线发送1个数据字节
  lcall  start_24c  ;start

  mov  a,  #0a0h ;从地址
  lcall  out_24c

  mov  a,  dpl ;低位地址
  lcall  out_24c

  mov  a,  b
  lcall  out_24c

  lcall  stop_24c  ;stop

  N_NOP
  N_NOP
  TRAP_RET

;===============================================
;  function: read_24c_1 ;从I2C总线接收1个数据字节 
;  input:  dpl-------欲从eprom读数据的地址
;  output:  a
;  usage:  a,dptr
;===================================================
read_24c_1:;从I2C总线接收1个数据字节
  lcall  start_24c  ;start

  mov  a,  #0a0h ;ic_addr
  lcall  out_24c

  mov  a,  dpl ;addr_hi
  lcall  out_24c

  lcall  start_24c  ;start

  mov  a,  #0a1h ;ic_addr
  lcall  out_24c

  lcall  in_24c   ;read

  lcall  sendn_ack  ;send nack
  lcall  stop_24c  ;stop
  TRAP_RET

;=================================================
;  function: out_24c  ;向I2C发送一个字节 
;  input:  a
;  output:  --------
;  usage:  a,c
;========================================================
out_24c:;向I2C发送一个字节
  ;lcall  dog_int_feed

  mov  c,  acc.7
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.6
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.5
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.4
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.3
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.2
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.1
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  mov  c,  acc.0
  mov  CSDA,  c
  N_NOP
  setb  CSCL
  N_NOP
  clr  CSCL
  N_NOP

  setb  CSDA
  N_NOP
  setb  CSCL
  N_NOP

out_wait: mov  c,  CSDA
  jc  out_wait
  clr  CSCL
  TRAP_RET

;=========================================================
;  function: in_24c  ;从I2C总线接收一个数据字节 
;  input:  ---------
;  output:  a
;  usage:  a,c
;=================================================
in_24c: ;从I2C总线接收一个数据字节
  ;lcall  dog_int_feed

  setb  CSDA
  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.7,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.6,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.5,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.4,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.3,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.2,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.1,  c
  clr  CSCL

  N_NOP
  setb  CSCL
  N_NOP
  mov  c,  CSDA
  mov  acc.0,  c
  clr  CSCL

  N_NOP
  TRAP_RET

[] [返回上一页] [打 印] [收 藏]
 

上一篇文章:max7219驱动程序
下一篇文章:cc1000无线模块电路图
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
 
关于本站- 意见反馈 - 网站导航 - 帮助 - 隐私政策 - 联系我们 - 使用条款 - 安全承诺 - 友情连接
站长QQ:39550527 Powered by: 飓风网络(电路图
Copyright 2006-2008 Elecfans.Com.电子发烧友: 粤ICP备07065979号All Rights Reserved