?? 24c01.s
字號:
.module _24c01.c
.area text(rom, con, rel)
.dbfile F:\yyjapp\yymk\software\24c01.c
.dbfunc e mDelay _mDelay fV
; ll -> R20,R21
; i -> R22,R23
; j -> R16
.even
_mDelay::
xcall push_gset2
.dbline -1
.dbline 7
; #include <f:\yyjapp\yymk\software\main.h>
; #include <f:\yyjapp\yymk\software\24c01.h>
; #include <iom128v.h>
; #include <macros.h> /* hardware write protect*/
;
; void mDelay(unsigned char j)
; {
.dbline 9
; unsigned int i,ll;
; for(ll=0;ll<j;ll++)
clr R20
clr R21
xjmp L5
L2:
.dbline 10
; {
.dbline 11
; for(i=0;i<125;i--)
clr R22
clr R23
xjmp L9
L6:
.dbline 12
.dbline 12
.dbline 12
L7:
.dbline 11
subi R22,1
sbci R23,0
L9:
.dbline 11
cpi R22,125
ldi R30,0
cpc R23,R30
brlo L6
.dbline 13
L3:
.dbline 9
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 9
mov R2,R16
clr R3
cp R20,R2
cpc R21,R3
brlo L2
.dbline -2
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ll 20 i
.dbsym r i 22 i
.dbsym r j 16 c
.dbend
.dbfunc e Start _Start fV
; i -> R16
.even
_Start::
.dbline -1
.dbline 17
; {;}
; }
; }
;
; void Start(void)
; {
.dbline 19
; unsigned char i;
; SET_SDA();
cbi 0x11,1
.dbline 21
clr R16
xjmp L14
L11:
.dbline 21
L12:
.dbline 21
inc R16
L14:
.dbline 21
; // SET_SCL();
; for(i=0;i<10;i++);
cpi R16,10
brlo L11
.dbline 22
; CLEAR_SDA();
sbi 0x11,1
.dbline 23
clr R16
xjmp L18
L15:
.dbline 23
L16:
.dbline 23
inc R16
L18:
.dbline 23
; for(i=0;i<10;i++);
cpi R16,10
brlo L15
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Stop _Stop fV
; i -> R16
.even
_Stop::
.dbline -1
.dbline 27
; }
;
; void Stop(void)
; {
.dbline 29
; unsigned char i;
; CLEAR_SDA();
sbi 0x11,1
.dbline 31
clr R16
xjmp L23
L20:
.dbline 31
L21:
.dbline 31
inc R16
L23:
.dbline 31
; // SET_SCL();
; for(i=0;i<10;i++);
cpi R16,10
brlo L20
.dbline 32
; SET_SDA();
cbi 0x11,1
.dbline 33
clr R16
xjmp L27
L24:
.dbline 33
L25:
.dbline 33
inc R16
L27:
.dbline 33
; for(i=0;i<10;i++);
cpi R16,10
brlo L24
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Ack _Ack fV
; i -> R16
.even
_Ack::
.dbline -1
.dbline 37
; }
;
; void Ack(void) /*answer bit*/
; {
.dbline 39
; unsigned char i;
; CLEAR_SDA();
sbi 0x11,1
.dbline 40
clr R16
xjmp L32
L29:
.dbline 40
L30:
.dbline 40
inc R16
L32:
.dbline 40
; for(i=0;i<10;i++);
cpi R16,10
brlo L29
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e NoAck _NoAck fV
; i -> R16
.even
_NoAck::
.dbline -1
.dbline 46
; // SET_SCL();
; // for(i=0;i<10;i++);
; // CLEAR_SCL();
; }
; void NoAck(void) /*backfard answer bit*/
; {
.dbline 48
; unsigned char i;
; SET_SDA();
cbi 0x11,1
.dbline 49
clr R16
xjmp L37
L34:
.dbline 49
L35:
.dbline 49
inc R16
L37:
.dbline 49
; for(i=0;i<10;i++);
cpi R16,10
brlo L34
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Send _Send fV
; j -> R20
; i -> R22
; Data -> R16
.even
_Send::
xcall push_gset2
.dbline -1
.dbline 56
; // SET_SCL();
; // for(i=0;i<10;i++);
; // CLEAR_SCL();
; }
;
; void Send(unsigned char Data) /*send data sub ,data for send of data*/
; {
.dbline 59
; unsigned char j,i; /*bit counter control*/
; // unsigned char temp; /*middle var control*/
; for(j=0;j<8;j++)
clr R20
xjmp L42
L39:
.dbline 60
; {
.dbline 62
clr R22
xjmp L46
L43:
.dbline 62
L44:
.dbline 62
inc R22
L46:
.dbline 62
; // CLEAR_SCL();
; for(i=0;i<10;i++);
cpi R22,10
brlo L43
.dbline 63
; if((Data&0x80)==0x80)
mov R24,R16
andi R24,128
cpi R24,128
brne L47
.dbline 64
; SET_SDA();
cbi 0x11,1
xjmp L48
L47:
.dbline 66
; else
; CLEAR_SDA();
sbi 0x11,1
L48:
.dbline 68
lsl R16
.dbline 69
L40:
.dbline 59
inc R20
L42:
.dbline 59
cpi R20,8
brlo L39
.dbline -2
L38:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r Data 16 c
.dbend
.dbfunc e Read _Read fc
; j -> R16
; temp -> R18
; i -> R20
.even
_Read::
xcall push_gset1
.dbline -1
.dbline 74
; // SET_SCL();
; Data=Data<<1;
; }
; // CLEAR_SCL();
; }
;
; unsigned char Read(void) /* read a byte of data ,and return this data*/
; {
.dbline 77
; unsigned char temp,i;
; unsigned char j;
; SET_SDA();
cbi 0x11,1
.dbline 78
; for(j=0;j<8;j++)
clr R16
xjmp L53
L50:
.dbline 79
; {
.dbline 80
; temp<<=1;
lsl R18
.dbline 82
clr R20
xjmp L57
L54:
.dbline 82
L55:
.dbline 82
inc R20
L57:
.dbline 82
; // CLEAR_SCL();
; for(i=0;i<10;i++);
cpi R20,10
brlo L54
.dbline 84
clr R20
xjmp L61
L58:
.dbline 84
L59:
.dbline 84
inc R20
L61:
.dbline 84
; // SET_SCL();
; for(i=0;i<10;i++);
cpi R20,10
brlo L58
.dbline 85
; if((PIND&0x02)==0x02) /* if Sda=1;*/
in R24,0x10
andi R24,2
cpi R24,2
brne L62
.dbline 86
; temp=temp|0x01;
ori R18,1
L62:
.dbline 87
L51:
.dbline 78
inc R16
L53:
.dbline 78
cpi R16,8
brlo L50
.dbline 88
; }
; return temp;
mov R16,R18
.dbline -2
L49:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbsym r temp 18 c
.dbsym r i 20 c
.dbend
.dbfunc e WrToROM _WrToROM fV
; i -> R20
; Num -> R22
; Address -> y+6
; Data -> R10,R11
.even
_WrToROM::
st -y,r19
st -y,r18
xcall push_gset3
movw R10,R16
ldd R22,y+8
.dbline -1
.dbline 91
; }
; void WrToROM(unsigned char *Data,unsigned int Address,unsigned char Num)
; {
.dbline 93
; unsigned char i;
; Start(); /* send start signed*/
xcall _Start
.dbline 94
; Send(0xa0); /* send SLA+W*/
ldi R16,160
xcall _Send
.dbline 95
; Ack();
xcall _Ack
.dbline 96
; Send(*((unsigned char *)&Address+1)); /* send address*/
ldd R16,y+7
xcall _Send
.dbline 97
; Ack();
xcall _Ack
.dbline 98
; Send(*((unsigned char *)&Address));
movw R30,R28
ldd R16,z+6
xcall _Send
.dbline 99
; Ack();
xcall _Ack
.dbline 100
; for(i=0;i<Num;i++)
clr R20
xjmp L69
L66:
.dbline 101
.dbline 102
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R16,z+0
xcall _Send
.dbline 103
xcall _Ack
.dbline 104
L67:
.dbline 100
inc R20
L69:
.dbline 100
cp R20,R22
brlo L66
.dbline 105
; {
; Send(*(Data+i));
; Ack();
; }
; Stop();
xcall _Stop
.dbline 106
; mDelay(10);
ldi R16,10
xcall _mDelay
.dbline -2
L64:
xcall pop_gset3
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r Num 22 c
.dbsym l Address 6 i
.dbsym r Data 10 pc
.dbend
.dbfunc e RdFromROM _RdFromROM fV
; i -> R20
; Num -> R22
; Address -> y+6
; Data -> R10,R11
.even
_RdFromROM::
st -y,r19
st -y,r18
xcall push_gset3
movw R10,R16
ldd R22,y+8
.dbline -1
.dbline 110
;
; }
; void RdFromROM(unsigned char *Data,unsigned int Address,unsigned char Num)
; {
.dbline 114
; unsigned char i;
; // unsigned char *PData;
; // PData=Data;
; for(i=0;i<Num;i++)
clr R20
xjmp L74
L71:
.dbline 115
.dbline 116
xcall _Start
.dbline 117
ldi R16,160
xcall _Send
.dbline 118
xcall _Ack
.dbline 119
ldd R16,y+7
xcall _Send
.dbline 120
xcall _Ack
.dbline 121
movw R30,R28
ldd R16,z+6
xcall _Send
.dbline 122
xcall _Ack
.dbline 123
xcall _Start
.dbline 124
ldi R16,161
xcall _Send
.dbline 125
xcall _Ack
.dbline 126
xcall _Read
mov R30,R20
clr R31
add R30,R10
adc R31,R11
std z+0,R16
.dbline 128
xcall _NoAck
.dbline 129
xcall _Stop
.dbline 130
ldd R24,y+6
ldd R25,y+7
adiw R24,1
std y+7,R25
std y+6,R24
.dbline 131
L72:
.dbline 114
inc R20
L74:
.dbline 114
cp R20,R22
brlo L71
.dbline -2
L70:
xcall pop_gset3
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r Num 22 c
.dbsym l Address 6 i
.dbsym r Data 10 pc
.dbend
.dbfunc e write_byte01 _write_byte01 fV
; data -> y+2
; Address -> y+0
.even
_write_byte01::
xcall push_arg4
.dbline -1
.dbline 135
; {
; Start();
; Send(0xa0);
; Ack();
; Send(*((unsigned char *)&Address+1));
; Ack();
; Send(*((unsigned char *)&Address));
; Ack();
; Start();
; Send(0xa1);
; Ack();
; *(Data+i)=Read();
; // CLEAR_SCL();
; NoAck();
; Stop();
; Address++;
; }
; }
;
; void write_byte01(unsigned int Address,unsigned char data)
; {
.dbline 136
; Start(); /* send start signed*/
xcall _Start
.dbline 137
; Send(0xa0); /* send SLA+W*/
ldi R16,160
xcall _Send
.dbline 138
; Ack();
xcall _Ack
.dbline 139
; Send(*((unsigned char *)&Address+1)); /* send address*/
ldd R16,y+1
xcall _Send
.dbline 140
; Ack();
xcall _Ack
.dbline 141
; Send(*((unsigned char *)&Address));
movw R30,R28
ldd R16,z+0
xcall _Send
.dbline 142
; Ack();
xcall _Ack
.dbline 143
; Send(data);
ldd R16,y+2
xcall _Send
.dbline 144
; Ack();
xcall _Ack
.dbline 145
; Stop();
xcall _Stop
.dbline 146
; mDelay(30);
ldi R16,30
xcall _mDelay
.dbline -2
L76:
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l data 2 c
.dbsym l Address 0 i
.dbend
.dbfunc e read_byte01 _read_byte01 fc
; temp -> R20
; Address -> y+2
.even
_read_byte01::
st -y,r17
st -y,r16
xcall push_gset1
.dbline -1
.dbline 150
;
; }
; unsigned char read_byte01(unsigned int Address)
; {
.dbline 152
; unsigned char temp;
; Start();
xcall _Start
.dbline 153
; Send(0xa0);
ldi R16,160
xcall _Send
.dbline 154
; Ack();
xcall _Ack
.dbline 155
; Send(*((unsigned char *)&Address+1));
ldd R16,y+3
xcall _Send
.dbline 156
; Ack();
xcall _Ack
.dbline 157
; Send(*((unsigned char *)&Address));
movw R30,R28
ldd R16,z+2
xcall _Send
.dbline 158
; Ack();
xcall _Ack
.dbline 159
; Start();
xcall _Start
.dbline 160
; Send(0xa1);
ldi R16,161
xcall _Send
.dbline 161
; Ack();
xcall _Ack
.dbline 162
; temp=Read();
xcall _Read
mov R20,R16
.dbline 164
; // CLEAR_SCL();
; NoAck();
xcall _NoAck
.dbline 165
; Stop();
xcall _Stop
.dbline 166
; return temp;
mov R16,R20
.dbline -2
L78:
xcall pop_gset1
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym l Address 2 i
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -