1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
| org 0000h
sjmp start
start:
mov p1,#0ffh ; initializing port 1 as input
lcall none
sjmp start
none:ret
lcall write
lcall read
lcall none
;********** Write Routine*******
write:
mov r3,#00h ; mem address high ; is the address in eeprom where data will start
mov r4,#00h ;mem address low
mov r1,#00h ; byte to be send to eeprom is stored in r1
lcall bytewr
ret
bytewr:
lcall eepstart ; start to write
mov a,#0a0h ; eeprom write command
lcall send
mov a,r3
lcall send
mov a,r4
lcall send
mov a,r1
lcall send
lcall stop ;stop
ret
;********Transmission of data one by one********
send:
mov r2,#08h ; data transmission for 8 bits
bck:
rlc a
jc bck1
clr p1.1 ; if carry low clear data
setb p1.0
clr p1.0
djnz r2,bck
sjmp ack
bck1:
setb p1.1 ;if carry high set data
setb p1.0
clr p1.0
djnz r2,bck
;******** acknowledgement from eeprom*********
ack: ;ack from eeprom
setb p1.0
clr p1.0
ret
;*******read data routine********
read:
mov r3,#00h
mov r4,#00h
lcall byterd
mov r1,a
ret
byterd:
lcall eepstart ; start to read
mov a,#0a0h
lcall send
mov a,r4
lcall send
lcall stop
lcall cread
ret
cread:
lcall eepstart
mov a,#0a1h ;read command
lcall send
lcall recv
mov r1,a ; store data
lcall stop ; stop
ret
;**********receving data one by one********
recv:
mov r2,#08h
setb p1.1
rec:
clr p1.0
setb p1.0
clr c
jnb p1.1,rec1
cpl c
rec1:
rlc a
djnz r2,rec
clr p1.0
ret
;******** Start routine********
eepstart:
setb p1.1 ; high to low transistion of data with high clock
clr p1.0
setb p1.0
clr p1.1
clr p1.0
ret
; ***********Stop routine********
stop:
clr p1.1 ; low to high transistion of data with high clock
setb p1.0
setb p1.1
ret
end |