您的位置 首页 新能源

24C02(EEPROM)回忆开机次数程序

24C02记忆开机次数,开机次数存放地址为00H,做此实验时,先用地址清0程序将00H清0,再去做记忆开机次数实验!!!计数地址清0程序如下:;/…

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/276166.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部