📄 feedis_flash.s
字号:
.module feedis_flash.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_flash.c
.dbfunc e flash_read _flash_read fV
; num -> R20,R21
; temp -> R22
; temp1 -> R12
; fors -> y+10
; length -> R10,R11
; page -> R20,R21
; column -> R22
.even
_flash_read::
xcall push_gset4
movw R20,R18
mov R22,R16
ldd R10,y+8
ldd R11,y+9
.dbline -1
.dbline 4
; #include <include.h>
; uchar hantemp[32];
; void flash_read(uchar column,uint page,uint length,uchar fors) //fors 表示是第一或者第二区段
; {
.dbline 7
; uchar temp,temp1;
; uint num;
; DDRA = 0xff; //PORTA 变成输出口
ldi R24,255
out 0x1a,R24
.dbline 9
; // P1.4 ;RB置高
; SETBIT(PORTF, RW_4245_1);
lds R24,98
ori R24,1
sts 98,R24
.dbline 11
; //RW_4245_1 = 1; //设置第一个4245方向为写
; CLEARBIT(PORTF, OE_4245_1);
lds R24,98
andi R24,251
sts 98,R24
.dbline 13
; //OE_4245_1 = 0; //第一个4245使能输出
; SETBIT(PORTF, RW_4245_2 );
lds R24,98
ori R24,2
sts 98,R24
.dbline 15
; //RW_4245_2 = 1; //设置第二个4245方向为写
; CLEARBIT(PORTF, OE_4245_2);
lds R24,98
andi R24,247
sts 98,R24
.dbline 17
; //OE_4245_2 = 0; //第二个4245使能输出
; SETBIT(PORTE, RE_4245);
sbi 0x3,5
.dbline 19
; //RE_4245 = 1; //RE置高
; CLEARBIT(PORTE, ALE_4245);
cbi 0x3,3
.dbline 21
; //ALE_4245 = 0; //ALE置低
; CLEARBIT(PORTE, WE_4245);
cbi 0x3,4
.dbline 23
; //WE_4245 = 0; //WE置低
; SETBIT(PORTE, CLE_4245);
sbi 0x3,2
.dbline 25
; //CLE_4245 = 1; //CLE置高
; PORTA = fors;
ldd R0,y+10
out 0x1b,R0
.dbline 27
; //P0 = fors; //命令字,'00'从前面为读 '01'从后面读
; SETBIT(PORTE, WE_4245);
sbi 0x3,4
.dbline 29
; //WE_4245 = 1; //WE置高
; CLEARBIT(PORTE, CLE_4245);
cbi 0x3,2
.dbline 31
; //CLE_4245 = 0; //CLE置低
; SETBIT(PORTE, ALE_4245);
sbi 0x3,3
.dbline 33
; //ALE_4245 = 1; //ALE置高
; CLEARBIT(PORTE, WE_4245);
cbi 0x3,4
.dbline 35
; //WE_4245 = 0; //WE置低
; PORTA = column;
out 0x1b,R22
.dbline 37
; //P0 = column; //地址0-7位
; SETBIT(PORTE, WE_4245);
sbi 0x3,4
.dbline 39
; //WE_4245 = 1; //WE置高
; CLEARBIT(PORTE, WE_4245);
cbi 0x3,4
.dbline 41
; //WE_4245 = 0; //WE置低
; temp = (uchar)((page>>1) & 0x00ff);
movw R22,R20
lsr R23
ror R22
andi R23,0
.dbline 42
; PORTA = temp;
out 0x1b,R22
.dbline 44
; //P0 = temp; //地址8-15位
; SETBIT(PORTE, WE_4245);
sbi 0x3,4
.dbline 46
; //WE_4245 = 1; //WE置高
; CLEARBIT(PORTE, WE_4245);
cbi 0x3,4
.dbline 48
; //WE_4245 = 0; //WE置低
; temp = (uchar)((page>>9) & 0x00ff);
ldi R18,9
ldi R19,0
movw R16,R20
xcall lsr16
mov R22,R16
andi R23,0
.dbline 49
; PORTA = temp;
out 0x1b,R22
.dbline 51
; //P0 = temp; //地址16-23位
; SETBIT(PORTE, WE_4245);
sbi 0x3,4
.dbline 53
; //WE_4245 = 1; //WE置高
; CLEARBIT(PORTE, ALE_4245);
cbi 0x3,3
.dbline 55
; //ALE_4245 = 0; //ALE置低
; for(temp = 0;temp < 20;temp++)
clr R22
xjmp L6
L3:
.dbline 56
nop
L4:
.dbline 55
inc R22
L6:
.dbline 55
cpi R22,20
brlo L3
.dbline 95
; NOP();
; /*
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; _nop_();*/
;
; CLEARBIT(PORTF, RW_4245_1);
lds R24,98
andi R24,254
sts 98,R24
.dbline 97
; //RW_4245_1 = 0; //设置第一个4245方向为读l
; PORTA = 0XFF;
ldi R24,255
out 0x1b,R24
.dbline 98
; DDRA = 0x00; //PORTA 变成输入口
clr R2
out 0x1a,R2
.dbline 100
; //P0 = 0xff; //清理P0口
; for(num = 1;num <= length; num++)
ldi R20,1
ldi R21,0
xjmp L10
L7:
.dbline 101
; {
.dbline 102
; CLEARBIT(PORTE, RE_4245);
cbi 0x3,5
.dbline 104
; //RE_4245 = 0;
; SETBIT(PORTE, RE_4245);
sbi 0x3,5
.dbline 106
; //RE_4245 = 1;
; temp = PINA;
in R22,0x19
.dbline 107
; hantemp[num-1] = temp;
ldi R24,<_hantemp
ldi R25,>_hantemp
movw R30,R20
sbiw R30,1
add R30,R24
adc R31,R25
std z+0,R22
.dbline 109
; // ramadd++;
; WDR();
wdr
.dbline 111
; //WDOG;
; if((num % 512) == 0)
movw R24,R20
andi R25,1
cpi R24,0
cpc R24,R25
brne L11
X0:
.dbline 112
; {
.dbline 113
; for(temp1 = 0;temp1 <16;temp1++ )
clr R12
xjmp L16
L13:
.dbline 114
.dbline 116
wdr
.dbline 117
cbi 0x3,5
.dbline 119
sbi 0x3,5
.dbline 121
L14:
.dbline 113
inc R12
L16:
.dbline 113
mov R24,R12
cpi R24,16
brlo L13
.dbline 124
; {
; //WDOG;
; WDR();
; CLEARBIT(PORTE, RE_4245);
; //RE_4245 = 0;
; SETBIT(PORTE, RE_4245);
; //RE_4245 = 1;
; }
; // page +=2;
; // column = 0x00;
; PORTA = 0XFF;
ldi R24,255
out 0x1b,R24
.dbline 127
; //P0 = 0xff;
;
; }
L11:
.dbline 129
L8:
.dbline 100
subi R20,255 ; offset = 1
sbci R21,255
L10:
.dbline 100
cp R10,R20
cpc R11,R21
brsh L7
.dbline -2
L2:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r num 20 i
.dbsym r temp 22 c
.dbsym r temp1 12 c
.dbsym l fors 10 c
.dbsym r length 10 i
.dbsym r page 20 i
.dbsym r column 22 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_flash.c
_hantemp::
.blkb 32
.dbsym e hantemp _hantemp A[32:32]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -