新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 24C02(EEPROM)記憶開機次數(shù)程序

24C02(EEPROM)記憶開機次數(shù)程序

作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
24C02記憶開機次數(shù),開機次數(shù)存放地址為00H,做此實驗時,先用地址清0程序?qū)?0H清0,再去做記憶開機次數(shù)實驗!??!

計數(shù)地址清0程序如下:

本文引用地址:http://2s4d.com/article/201611/317444.htm

;/////////////////////////////////////////////////////
;將AT24C02(EEPROM)的00H單元的地址清0
;AT24C02存儲開機次數(shù)(準備程序)
;////////////////////////////////////////////////////
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開始數(shù)據(jù)傳送信號
START:SETB SDA
SETB SCL
LCALL D5U
CLR SDA
LCALL D5U
CLR SCL
RET
;寫一個字節(jié)子程序
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應(yīng)答信號子程序
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

................................記憶開機次數(shù)程序(已調(diào)試過).....................................

;/////////////////////////////////////////////////
;AT24C02(EEPROM)存儲開機次數(shù)
;開機次數(shù)存儲地址為00H,在記憶前以清0
;////////////////////////////////////////////////
WP BIT P1.0
SCL BIT P1.1
SDA BIT P1.2

WRDA EQU 40H;寫入數(shù)據(jù)暫存器
RDDA EQU 41H;讀出數(shù)據(jù)暫存器
OPUN EQU 42H;開機次數(shù)暫存器

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;將開機次數(shù)存入暫存器
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A;顯示開機次數(shù)
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
;讀一個字節(jié)子程序
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

;傳送一個字節(jié)子程序
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應(yīng)答信號檢測子程序
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
;顯示數(shù)據(jù)表
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H
DB 0F8H,080H,090H,088H,083H,0C6H,0A1H
DB 086H,08EH

END

................................帶復(fù)位的記憶開機次數(shù)程序(已調(diào)試過).....................................

wp bit p1.0
scl bit p1.1
sda bit p1.2

count equ 30h;開機次數(shù)計數(shù)器
date equ 31h;IIC數(shù)據(jù)緩沖器

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動態(tài)顯示程序===================*/

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

/*=============復(fù)位程序===================*/

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



關(guān)鍵詞: 24C02EEPROM開機次

評論


技術(shù)專區(qū)

關(guān)閉