📄 at45db~1.s
字号:
.module at45db161.c
.area text(rom, con, rel)
.dbfile D:\gkdoor\oldboardsoftware\at45db161.c
.dbfunc e read_byte _read_byte fc
; data -> R16
; i -> R18
.even
_read_byte::
.dbline -1
.dbline 6
; #include <d:\gkdoor\oldboardsoftware\main.h>
; #include <d:\gkdoor\oldboardsoftware\at45db161.h>
; #include <iom128v.h>
; #include <macros.h>
; unsigned char read_byte(void)
; {
.dbline 7
; unsigned char i,data=0;
clr R16
.dbline 8
; SET_45IO();
cbi 0x11,5
.dbline 9
; for (i=0;i<8;i++)
clr R18
xjmp L5
L2:
.dbline 10
; {
.dbline 11
; SET_45SCK();
cbi 0x11,6
.dbline 12
; data<<=1;
lsl R16
.dbline 13
; if((PIND&0x20)==0x20) // sda bit input data.
in R24,0x10
andi R24,32
cpi R24,32
brne L6
.dbline 14
; data|=1;
ori R16,1
L6:
.dbline 15
sbi 0x11,6
.dbline 16
L3:
.dbline 9
inc R18
L5:
.dbline 9
cpi R18,8
brlo L2
.dbline 17
; CLEAR_45SCK();
; }
; return data;
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbsym r i 18 c
.dbend
.dbfunc e write_byte _write_byte fV
; i -> R20
; data1 -> R22
.even
_write_byte::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 20
; }
; void write_byte(unsigned char data1)
; {
.dbline 22
; unsigned char i;
; for(i=0;i<8;i++)
clr R20
xjmp L12
L9:
.dbline 23
; {
.dbline 24
; if (data1&0x80)
sbrs R22,7
rjmp L13
.dbline 25
; SET_45IO();
cbi 0x11,5
xjmp L14
L13:
.dbline 27
; else
; CLEAR_45IO();
sbi 0x11,5
L14:
.dbline 28
xcall _CLOCK1
.dbline 29
lsl R22
.dbline 30
L10:
.dbline 22
inc R20
L12:
.dbline 22
cpi R20,8
brlo L9
.dbline -2
.dbline 31
; CLOCK1();
; data1<<=1;
; }
; }
L8:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data1 22 c
.dbend
.dbfunc e CLOCK1 _CLOCK1 fV
.even
_CLOCK1::
.dbline -1
.dbline 33
; void CLOCK1(void)
; {
.dbline 34
; SET_45SCK();
cbi 0x11,6
.dbline 35
; DELAY();
xcall _DELAY
.dbline 36
; CLEAR_45SCK();
sbi 0x11,6
.dbline -2
.dbline 37
; }
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DELAY _DELAY fV
; i -> R16
.even
_DELAY::
.dbline -1
.dbline 39
; void DELAY(void)
; {
.dbline 41
clr R16
xjmp L20
L17:
.dbline 41
L18:
.dbline 41
inc R16
L20:
.dbline 41
; unsigned char i;
; for (i=0;i<2;i++);
cpi R16,2
brlo L17
.dbline -2
.dbline 42
; }
L16:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e read_status _read_status fc
; temp2 -> R20
.even
_read_status::
xcall push_gset1
.dbline -1
.dbline 44
; unsigned char read_status(void)
; {
.dbline 46
; unsigned char temp2;
; CLEAR_45CS();
sbi 0x11,4
.dbline 47
; CLEAR_45SCK();
sbi 0x11,6
.dbline 48
; SET_45IO();
cbi 0x11,5
.dbline 49
; write_byte(0x57);
ldi R16,87
xcall _write_byte
.dbline 50
; CLOCK1();
xcall _CLOCK1
.dbline 51
; NOP();
nop
.dbline 52
; temp2=read_byte();
xcall _read_byte
mov R20,R16
.dbline 53
; SET_45CS();
cbi 0x11,4
.dbline 54
; return temp2;
.dbline -2
L21:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp2 20 c
.dbend
.dbfunc e write_buffer1 _write_buffer1 fV
; i -> R20,R21
; pt -> R22,R23
; bitnum -> R10,R11
.even
_write_buffer1::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 57
; }
; void write_buffer1(unsigned int bitnum,unsigned char *pt)
; {
.dbline 59
; unsigned int i;
; CLEAR_45CS();
sbi 0x11,4
.dbline 60
; CLEAR_45SCK();
sbi 0x11,6
.dbline 61
; SET_45IO();
cbi 0x11,5
.dbline 62
; write_byte(0x84);
ldi R16,132
xcall _write_byte
.dbline 63
; write_byte(0x00);
clr R16
xcall _write_byte
.dbline 64
; i=bitnum>>8;
movw R20,R10
mov R20,R21
clr R21
.dbline 65
; write_byte((unsigned char)i);
mov R16,R20
xcall _write_byte
.dbline 66
; write_byte((unsigned char)bitnum);
mov R16,R10
xcall _write_byte
.dbline 67
; for(i=0;i<528;i++)
clr R20
clr R21
xjmp L26
L23:
.dbline 68
movw R30,R22
ld R16,Z+
movw R22,R30
xcall _write_byte
L24:
.dbline 67
subi R20,255 ; offset = 1
sbci R21,255
L26:
.dbline 67
cpi R20,16
ldi R30,2
cpc R21,R30
brlo L23
.dbline 69
; write_byte(*pt++);
; DELAY();
xcall _DELAY
.dbline 70
; SET_45CS();
cbi 0x11,4
.dbline -2
.dbline 71
; }
L22:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r pt 22 pc
.dbsym r bitnum 10 i
.dbend
.dbfunc e write_mainmemory _write_mainmemory fV
; i -> R20,R21
; pt -> R22,R23
; pagenum -> R10,R11
.even
_write_mainmemory::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 73
; void write_mainmemory(unsigned int pagenum,unsigned char *pt)
; {
.dbline 75
; unsigned int i;
; CLEAR_45CS();
sbi 0x11,4
.dbline 76
; SET_45IO();
cbi 0x11,5
.dbline 77
; CLEAR_45SCK();
sbi 0x11,6
.dbline 78
; write_byte(0x82);
ldi R16,130
xcall _write_byte
.dbline 79
; i=pagenum>>6;
ldi R18,6
ldi R19,0
movw R16,R10
xcall lsr16
.dbline 80
; write_byte((unsigned char)i);
xcall _write_byte
.dbline 81
; i=pagenum<<2;
movw R20,R10
lsl R20
rol R21
lsl R20
rol R21
.dbline 82
; write_byte((unsigned char)i);
mov R16,R20
xcall _write_byte
.dbline 83
; write_byte(0x00);
clr R16
xcall _write_byte
.dbline 84
; for(i=0;i<528;i++)
clr R20
clr R21
xjmp L31
L28:
.dbline 85
movw R30,R22
ld R16,Z+
movw R22,R30
xcall _write_byte
L29:
.dbline 84
subi R20,255 ; offset = 1
sbci R21,255
L31:
.dbline 84
cpi R20,16
ldi R30,2
cpc R21,R30
brlo L28
.dbline 86
; write_byte(*pt++);
; NOP();
nop
.dbline 87
; SET_45IO();
cbi 0x11,5
.dbline 88
; CLEAR_45SCK();
sbi 0x11,6
.dbline 89
; SET_45CS();
cbi 0x11,4
.dbline 90
clr R20
clr R21
xjmp L35
L32:
.dbline 90
L33:
.dbline 90
subi R20,255 ; offset = 1
sbci R21,255
L35:
.dbline 90
; for(i=0;i<50000;i++);
cpi R20,80
ldi R30,195
cpc R21,R30
brlo L32
.dbline -2
.dbline 91
; }
L27:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r pt 22 pc
.dbsym r pagenum 10 i
.dbend
.dbfunc e write_buffer2 _write_buffer2 fV
; i -> R20,R21
; pt -> R22,R23
; bitnum -> R10,R11
.even
_write_buffer2::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 93
; void write_buffer2(unsigned int bitnum,unsigned char *pt)
; {
.dbline 95
; unsigned int i;
; CLEAR_45CS();
sbi 0x11,4
.dbline 96
; DELAY();
xcall _DELAY
.dbline 97
; write_byte(0x87);
ldi R16,135
xcall _write_byte
.dbline 98
; write_byte(0x00);
clr R16
xcall _write_byte
.dbline 99
; i=bitnum>>8;
movw R20,R10
mov R20,R21
clr R21
.dbline 100
; write_byte((unsigned char)i);
mov R16,R20
xcall _write_byte
.dbline 101
; write_byte((unsigned char)bitnum);
mov R16,R10
xcall _write_byte
.dbline 102
; for(i=0;i<528;i++)
clr R20
clr R21
xjmp L40
L37:
.dbline 103
movw R30,R22
ld R16,Z+
movw R22,R30
xcall _write_byte
L38:
.dbline 102
subi R20,255 ; offset = 1
sbci R21,255
L40:
.dbline 102
cpi R20,16
ldi R30,2
cpc R21,R30
brlo L37
.dbline 104
; write_byte(*pt++);
; SET_45CS();
cbi 0x11,4
.dbline -2
.dbline 105
; }
L36:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r pt 22 pc
.dbsym r bitnum 10 i
.dbend
.dbfunc e write_buffer1mainmemory _write_buffer1mainmemory fV
; i -> R20,R21
; flag -> R20
; pagenum -> R22,R23
.even
_write_buffer1mainmemory::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 107
; void write_buffer1mainmemory(unsigned int pagenum)
; {
xjmp L43
L42:
.dbline 112
; unsigned int i;
; unsigned char flag;
; // write_buffer1(chip_cs,0,yyj02);
; while(1)
; {
.dbline 113
; flag=read_status();
xcall _read_status
mov R20,R16
.dbline 114
; if((flag&0x80)==0x80)
mov R24,R20
andi R24,128
cpi R24,128
brne L45
.dbline 115
; break;
xjmp L44
L45:
.dbline 116
L43:
.dbline 111
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -