导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→贴出来好了。

* 44750: 弱弱的问个问题,关于EEPROM

   phoibos 
phoibos发表的帖子 

 贴出来好了。
调用前指明B_E2(收/发),E2ADDS(24C02起始地址),E2LONG(读写多少BYTES),E2START(目标起始地址)
设置B_T0OV和B_TR0是为了防止读死(在TIMER0里加标志)。
>   ;***************************
;READ AND WRITE 24C02(E2ROM)
;INPUT B_E2(WRITE OR READ),E2ADDS(BEGIN ADDRESS),E2LONG(WR OR RD LONG)
;IF READ,OUT=SIZE++,IF WRITE,IN=SIZE++ ;FROM R0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
E2ROM:
 PUSH ACC
 
E2_1:  CLR B_T0OV
  MOV TH0,#2BH
  MOV TL0,#0B4H
  MOV R_T0,#02H
  SETB B_TR0
 LCALL SBEGIN
 JB B_E2,E2W
E2R: MOV A,#0A0H       ;24C02地址
 LCALL SWR
         LCALL SWRACK
         JB B_T0OV,E2RET
 MOV A,E2ADDS
 LCALL SWR
         LCALL SWRACK
         JB B_T0OV,E2RET
 LCALL SBEGIN
 MOV A,#0A1H       ;24C02地址
 LCALL SWR
         LCALL SWRACK
         JB B_T0OV,E2RET
 MOV R0,E2START
E2R1: MOV R6,E2LONG
 CJNE R6,#00H,E2R3
 SJMP E2RET
E2R3: DEC R6
 CJNE R6,#00H,E2R2
        LCALL SRD
         MOV @R0,A
 LCALL SRDNACK
E2RET:  LCALL SEND
        CLR B_TR0
        JNB B_START,E2_2

E2_2:           POP ACC
        RET
E2R2:   LCALL SRD
 MOV @R0,A

 LCALL SRDACK

 INC R0
 SJMP E2R3
E2W: MOV A,#0A0H
 LCALL SWR
         LCALL SWRACK
         JB B_T0OV,E2RET
 MOV A,E2ADDS
 LCALL SWR
         LCALL SWRACK
         JB B_T0OV,E2RET
 MOV R0,E2START
 mov a,@r0
E2W1: LCALL SWR
        LCALL SWRACK
         JB B_T0OV,E2RET
 INC R0
 MOV A,@R0
 DJNZ E2LONG,E2W1
           SJMP E2RET

;*******************
SBEGIN:    SETB SDA
 SETB SCL
 ;nop
 CLR SDA
 CLR SCL
 ;nop
 RET
 ;**************
 ;INCLUDE A,
SWR:       MOV R7,#08H
 ;MOV A,#0A0H
SWR1: RLC A
 MOV SDA,C
 SETB SCL
 ;nop
 CLR SCL
 ;nop
 DJNZ R7,SWR1
 RET
 ;*******************
SRD:       MOV R7,#08H
SRD1: setb sda
 SETB SCL
 MOV C,SDA
 RLC A
 CLR SCL
 DJNZ R7,SRD1
 RET
 ;*****************
SEND:     SETB      CON2
 CLR SDA
 SETB SCL
 ;nop
 SETB SDA
 RET
 ;*****************
SWRACK:    setb sda
 SETB SCL
 ;nop
SWRACK3:   JB SDA,SWRACK1
 CLR SCL
 ;nop
SWRACK2:   RET
SWRACK1:   JB B_T0OV,SWRACK2
 SJMP SWRACK3
 ;*****************
SRDACK:    CLR SDA
 SETB SCL
 ;nop
 CLR SCL
 ;nop
 RET
 ;**************
SRDNACK:  SETB SDA
 SETB SCL
 ;nop
 CLR SCL
 ;nop
 RET

发表时间:2003年11月14日11:38:03

  
回复该帖

本主题共有 19 帖,分页:>>>>>该主题的所有内容[19]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  44755.[详细]要的呀,atmel的官方资料上说要的
摘要:......(无内容)
- [hatereg][952次] 2003年11月14日

  44765.[详细]不好意思的说,我不是很懂
摘要:我不太懂单片机 请问,设置了TH0、TL0和B_TOOV、B_TR0有什么关系? 是不是计数完毕就SET或CLR? 还有SEND子程序是干吗的啊? 呵呵 谢谢赐教啊 ......(139字)
- [hatereg][867次] 2003年11月14日

  44769.[详细]这样的
摘要:在定时器0里指定TH0,TL0就行了。 在写完之后等24C02的回答之前置B_TR0,回答了就清B_TR0;这样,在定时器的中断里经过几次(次数最好大于等于2)若B_TR0都为1,就置B_T0OV。当B_T0OV=1时,认为通信故......(366字)
- [phoibos][1022次] 2003年11月14日

[上一篇帖子]:什么性质的工程?我的qq:124885553
[下一篇帖子]:编一个简单的调试程序,实施;看看晶振;便一是有错吗?