24C02回忆开机次数,开机次数寄存地址为00H,做此试验时,先用地址清0程序将00H清0,再去做回忆开机次数试验!!!
计数地址清0程序如下:
;/////////////////////////////////////////////////////
;将AT24C02(EEPROM)的00H单元的地址清0
;AT24C02存储开机次数(预备程序)
;////////////////////////////////////////////////////
WP BIT P1.0
SCL BIT P1.1
SDA BIT P1.2
WRDA EQU 41H
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:CLR WP
MOV SP,70H
LCALL START
MOV WRDA,#0AEH
LCALL SEND
LCALL SACK
MOV WRDA,#00H
LCALL SEND
LCALL SACK
MOV WRDA,#00H
LCALL SEND
LCALL SACK
LCALL STOP
CLR P1.7
SJMP $
;24C02开端数据传送信号
START:SETB SDA
SETB SCL
LCALL D5U
CLR SDA
LCALL D5U
CLR SCL
RET
;写一个字节子程序
SEND: MOV R0,#08H
MOV A,WRDA
D1:RLC A
MOV SDA,C
LCALL D5U
SETB SCL
LCALL D5U
CLR SCL
DJNZ R0,D1
RET
;24c02应对信号子程序
SACK: SETB SDA
LCALL D5U
SETB SCL
LCALL D5U
D2:MOV C,SDA
JC D2
CLR SCL
RET
;STOP子程序
STOP: CLR SDA
LCALL D5U
SETB SCL
LCALL D5U
SETB SDA
LCALL D5U
CLR SCL
RET
;延时子程序
D5U: NOP
NOP
NOP
NOP
NOP
RET
END
…………………………..回忆开机次数程序(已调试过)……………………………….
;/////////////////////////////////////////////////
;AT24C02(EEPROM)存储开机次数
;开机次数存储地址为00H,在回忆前以清0
;////////////////////////////////////////////////
WP BIT P1.0
SCL BIT P1.1
SDA BIT P1.2
WRDA EQU 40H;写入数据暂存器
RDDA EQU 41H;读出数据暂存器
OPUN EQU 42H;开机次数暂存器
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:CLR WP;开写保护
MOV SP,70H
LCALL READ
MOV A,RDDA
MOV DPTR,#TAB
INC A
MOV R1,A
CJNE R1,#16,D4
CLR A
D4:MOV OPUN,A;将开机次数存入暂存器
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A;显现开机次数
LCALL WIRT
SJMP $
;读24C02子程序
READ:LCALL START
MOV WRDA,#0AEH
LCALL SEND
LCALL SACK
MOV WRDA,#00H
LCALL SEND
LCALL SACK
LCALL START
MOV WRDA,#0AFH
LCALL SEND
LCALL SACK
LCALL REBY
LCALL STOP
RET
;写C2402子程序
WIRT:LCALL START
MOV WRDA,#0AEH
LCALL SEND
LCALL SACK
MOV WRDA,#00H
LCALL SEND
LCALL SACK
MOV A,OPUN
MOV WRDA,A
LCALL SEND
LCALL SACK
LCALL STOP
RET
;24C02开端子程序
START:SETB SDA
SETB SCL
LCALL DE5U
CLR SDA
LCALL DE5U
CLR SCL
RET
;读一个字节子程序
REBY: MOV R0,#08H
SETB SDA
D3:LCALL DE5U
SETB SCL
LCALL DE5U
MOV C,SDA
RLC A
CLR SCL
SETB SDA
DJNZ R0,D3
MOV RDDA,A
RET
;传送一个字节子程序
SEND: MOV R0,#08H
MOV A,WRDA
D1:RLC A
MOV SDA,C
LCALL DE5U
SETB SCL
LCALL DE5U
CLR SCL
DJNZ R0,D1
RET
;24C02应对信号检测子程序
SACK: SETB SDA
LCALL DE5U
SETB SCL
LCALL DE5U
D2:MOV C,SDA
JC D2
CLR SCL
RET
;24C02中止通讯子程序
STOP: CLR SDA
LCALL DE5U
SETB SCL
LCALL DE5U
SETB SDA
LCALL DE5U
CLR SCL
RET
;5U延时子程序
DE5U: NOP
NOP
NOP
NOP
NOP
RET
;显现数据表
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H
DB 0F8H,080H,090H,088H,083H,0C6H,0A1H
DB 086H,08EH
END
…………………………..带复位的回忆开机次数程序(已调试过)……………………………….
wp bit p1.0
scl bit p1.1
sda bit p1.2
count equ 30h;开机次数计数器
date equ 31h;I%&&&&&%数据缓冲器
org 0000h
sjmp main
org 0003h
ljmp inx0
org 000bh
ljmp itx0
org 0030h
main:clr wp
clr ea
mov sp,#40h
mov dptr,#tab
lcall init
lcall reiic
mov count,date
inc count
mov r1,count
lcall wriic
setb ea
sjmp $
/*=============INT0,TO中止初始化程序===================*/
init:mov tmod,#00000001b
mov th0,#0d8h
mov tl0,#00h
setb et0
setb it0
setb ex0
setb tr0
ret
/*=============LED动态显现程序===================*/
itx0:mov th0,#0d8h
mov tl0,#00h
mov a,count
mov b,#100
div ab
mov r0,a
movc a,@a+dptr
mov p0,a
cjne r0,#0,n1
sjmp n2
n1:clr p2.2
lcall d2ms
setb p2.2
n2:mov a,b
mov b,#10
div ab
mov r0,a
movc a,@a+dptr
mov p0,a
cjne r0,#0,n3
sjmp n4
n3:clr p2.1
lcall d2ms
setb p2.1
n4:mov a,b
movc a,@a+dptr
mov p0,a
clr p2.0
lcall d2ms
setb p2.0
reti
/*=============复位程序===================*/
inx0:clr tr0
mov r1,#00h
lcall wriic
lcall d10ms
lcall reiic
mov count,date
setb tr0
reti
/*=============AT24C02读写程序===================*/
wriic:lcall start
mov date,#10101110b
lcall write
lcall wack
mov date,#00h
lcall write
lcall wack
mov date,r1
lcall write
lcall wack
lcall stop
ret
reiic:lcall start
mov date,#10101110b
lcall write
lcall wack
mov date,#00h
lcall write
lcall wack
lcall start
mov date,#10101111b
lcall write
lcall wack
lcall read
lcall stop
ret
read: mov r3,#08h
e1:setb sda
setb scl
lcall d5u
mov c,sda
rlc a
clr scl
lcall d5u
djnz r3,e1
mov date,a
ret
start:setb sda
setb scl
lcall d5u
clr sda
lcall d5u
clr scl
ret
write:mov a,date
mov r4,#08h
w1:rlc a
mov sda,c
lcall d5u
setb scl
lcall d5u
clr scl
lcall d5u
djnz r4,w1
ret
wack: setb sda
setb scl
lcall d5u
w2:mov c,sda
jc w2
clr scl
ret
stop: clr sda
setb scl
lcall d5u
setb sda
lcall d5u
clr scl
ret
tab:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
d5u: nop
nop
nop
nop
nop
ret
D10ms: ;差错 -0.000000000002us
MOV R6,#0F9H
DL0:
MOV R5,#22H
DJNZ R5,$
DJNZ R6,DL0
RET
d2ms: ;差错 -0.217013888889us
MOV R6,#0b0H
DL1:
MOV R5,#0AH
DJNZ R5,$
DJNZ R6,DL1
RET
end