📄 ps2_study.s
字号:
ldi R16,2
ldi R17,0
xcall _Delaynus
L4:
.dbline 92
L5:
.dbline 91
; while(data_in & BUSY)
sbic 0x19,7
rjmp L4
.dbline 93
; ;
; CLR_E();
cbi 0x12,6
.dbline 94
; data_DDR=0XFF;
ldi R24,255
out 0x1a,R24
.dbline -2
.dbline 96
;
; }
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r L_R 20 c
.dbend
.dbfunc e LCD_write _LCD_write fV
; L_R -> R22
; data -> R20
.even
_LCD_write::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 100
; ///////////////////////////////////////////////////////////////////
;
; void LCD_write (unsigned char data,char L_R)
; {
.dbline 101
; LCD_Test(L_R);
mov R16,R22
xcall _LCD_Test
.dbline 102
; SET_D_I();
sbi 0x12,4
.dbline 103
; CLR_R_W();
cbi 0x12,5
.dbline 104
; SET_E();
sbi 0x12,6
.dbline 105
; data_OUT=data;
out 0x1b,R20
.dbline 106
; CLR_E();
cbi 0x12,6
.dbline -2
.dbline 107
; }
L7:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r L_R 22 c
.dbsym r data 20 c
.dbend
.dbfunc e LCD_write_command _LCD_write_command fV
; L_R -> R22
; data -> R20
.even
_LCD_write_command::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 110
;
; void LCD_write_command(unsigned char data,char L_R)
; {
.dbline 111
; LCD_Test(L_R);
mov R16,R22
xcall _LCD_Test
.dbline 112
; CLR_D_I();
cbi 0x12,4
.dbline 113
; CLR_R_W();
cbi 0x12,5
.dbline 114
; SET_E();
sbi 0x12,6
.dbline 115
; data_OUT=data;
out 0x1b,R20
.dbline 116
; CLR_E();
cbi 0x12,6
.dbline -2
.dbline 117
; }
L8:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r L_R 22 c
.dbsym r data 20 c
.dbend
.dbfunc e LCD_write_data _LCD_write_data fV
; L_R -> R22
; data -> y+6
; y -> R20
; x -> R10
.even
_LCD_write_data::
xcall push_gset3
mov R20,R18
mov R10,R16
ldd R22,y+8
.dbline -1
.dbline 121
;
;
; void LCD_write_data( char x ,char y,unsigned char data,char L_R)//设置xy地址
; {
.dbline 122
; LCD_Test(L_R);
mov R16,R22
xcall _LCD_Test
.dbline 123
; x=DIS_X | (x & MAX_X);
mov R24,R10
andi R24,63
ori R24,64
mov R10,R24
.dbline 124
; y=DIS_Y | (y & MAX_Y);
mov R24,R20
andi R24,7
ori R24,184
mov R20,R24
.dbline 127
; //x=x | 0x40;
; //y=y |0xb8;
; if(L_R)
tst R22
breq L10
.dbline 128
; {
.dbline 129
; SET_CS1();
sbi 0x12,2
.dbline 130
; CLR_CS2();
cbi 0x12,3
.dbline 131
; }
xjmp L11
L10:
.dbline 133
; else
; {
.dbline 134
; SET_CS2();
sbi 0x12,3
.dbline 135
; CLR_CS1();
cbi 0x12,2
.dbline 136
; }
L11:
.dbline 137
; LCD_write_command(x,L_R);//设置x,y的地址
mov R18,R22
mov R16,R10
xcall _LCD_write_command
.dbline 138
; LCD_write_command(y,L_R);
mov R18,R22
mov R16,R20
xcall _LCD_write_command
.dbline -2
.dbline 140
; //LCD_write(data,L_R);
; }
L9:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r L_R 22 c
.dbsym l data 6 c
.dbsym r y 20 c
.dbsym r x 10 c
.dbend
.dbfunc e LED_ini _LED_ini fV
; j -> <dead>
; i -> <dead>
.even
_LED_ini::
.dbline -1
.dbline 146
;
; //////////////////////////////
;
;
; void LED_ini(void)
; {
.dbline 148
; char i,j;
; COMMAND_INI();
in R24,0x11
ori R24,124
out 0x11,R24
.dbline 150
;
; data_DDR=0XFF;
ldi R24,255
out 0x1a,R24
.dbline 151
; LCD_write_command(LCD_OFF,LEFT);
clr R18
ldi R16,62
xcall _LCD_write_command
.dbline 152
; LCD_write_command(LCD_OFF,RIGHT);
ldi R18,1
ldi R16,62
xcall _LCD_write_command
.dbline 153
; LCD_write_command(LCD_ON,LEFT);
clr R18
ldi R16,63
xcall _LCD_write_command
.dbline 154
; LCD_write_command(LCD_ON,RIGHT);
ldi R18,1
ldi R16,63
xcall _LCD_write_command
.dbline 155
; LCD_write_command(0xc0,LEFT);
clr R18
ldi R16,192
xcall _LCD_write_command
.dbline 156
; LCD_write_command(0xc0,RIGHT);
ldi R18,1
ldi R16,192
.dbline -2
.dbline 157
; }
L12:
.dbline 0 ; func end
xjmp _LCD_write_command
.dbsym l j 1 c
.dbsym l i 1 c
.dbend
.dbfunc e LCD_clear _LCD_clear fV
; j -> <dead>
; i -> R20
.even
_LCD_clear::
xcall push_gset1
sbiw R28,8
.dbline -1
.dbline 159
; void LCD_clear(void)
; {
.dbline 161
; char i, j;
; for (i = 0; i < MAX_Y + 1; i++)
clr R20
xjmp L17
L14:
.dbline 162
.dbline 163
clr R2
clr R3
std y+6,R2
std y+7,R3
std y+4,R2
std y+5,R3
std y+2,R2
std y+3,R3
ldi R24,63
ldi R25,0
std y+0,R24
std y+1,R25
mov R18,R20
clr R19
clr R16
clr R17
xcall _LCD_write_page
.dbline 164
clr R2
clr R3
std y+6,R2
std y+7,R3
ldi R24,1
ldi R25,0
std y+4,R24
std y+5,R25
std y+2,R2
std y+3,R3
ldi R24,63
std y+0,R24
std y+1,R25
mov R18,R20
clr R19
clr R16
clr R17
xcall _LCD_write_page
.dbline 165
L15:
.dbline 161
inc R20
L17:
.dbline 161
cpi R20,8
brlo L14
.dbline -2
.dbline 166
; {
; LCD_write_page(0, i, MAX_X, 0x00, LEFT, 0);
; LCD_write_page(0, i, MAX_X, 0x00, RIGHT, 0);
; }
; }
L13:
adiw R28,8
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l j 9 c
.dbsym r i 20 c
.dbend
.dbfunc e LCD_write_page _LCD_write_page fV
; i -> R20
; over -> y+21
; L_R -> R22
; data -> R10
; end -> R12
; y -> y+13
; x -> R14
.even
_LCD_write_page::
st -y,r19
st -y,r18
xcall push_gset5
mov R14,R16
sbiw R28,3
ldd R12,y+15
ldd R10,y+17
ldd R22,y+19
.dbline -1
.dbline 169
;
; void LCD_write_page(char x, char y, unsigned char end, unsigned char data, char L_R, char over)
; {
.dbline 171
; char i;
; if (over == 0)
ldd R0,y+21
tst R0
brne L19
.dbline 172
; {
.dbline 173
; LCD_write_data(x, y, data, L_R);
std y+2,R22
std y+0,R10
ldd R18,y+13
mov R16,R14
xcall _LCD_write_data
.dbline 174
; for (i = 0; i < end - x+1; i++)
clr R20
xjmp L24
L21:
.dbline 175
.dbline 176
mov R18,R22
mov R16,R10
xcall _LCD_write
.dbline 177
L22:
.dbline 174
inc R20
L24:
.dbline 174
mov R24,R12
sub R24,R14
subi R24,255 ; addi 1
cp R20,R24
brlo L21
.dbline 178
; {
; LCD_write(data, L_R);
; }
; }
xjmp L20
L19:
.dbline 180
; else
; {
.dbline 181
; LCD_write_data(x, y, ~data, L_R);
std y+2,R22
mov R2,R10
com R2
std y+0,R2
ldd R18,y+13
mov R16,R14
xcall _LCD_write_data
.dbline 182
; for (i = 0; i < end - x; i++)
clr R20
xjmp L28
L25:
.dbline 183
.dbline 184
mov R18,R22
mov R16,R10
com R16
xcall _LCD_write
.dbline 185
L26:
.dbline 182
inc R20
L28:
.dbline 182
mov R2,R12
sub R2,R14
cp R20,R2
brlo L25
.dbline 186
L20:
.dbline -2
.dbline 187
; {
; LCD_write(~data, L_R);
; }
; }
; }
L18:
adiw R28,3
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym l over 21 c
.dbsym r L_R 22 c
.dbsym r data 10 c
.dbsym r end 12 c
.dbsym l y 13 c
.dbsym r x 14 c
.dbend
.dbfunc e Delaynus _Delaynus fV
; j -> <dead>
; m -> R20
; i -> R22
; k -> R16,R17
.even
_Delaynus::
xcall push_gset2
.dbline -1
.dbline 192
;
;
; ////////////////////////////////////////////////////////////////////////////
; void Delaynus(unsigned int k)
; {
.dbline 194
; char i, j, m;
; for (m = 0; m < 8; m++)
clr R20
xjmp L33
L30:
.dbline 195
; {
.dbline 196
; for (i = 0; i < k; i++)
clr R22
xjmp L37
L34:
.dbline 197
.dbline 199
.dbline 200
L35:
.dbline 196
inc R22
L37:
.dbline 196
mov R2,R22
clr R3
cp R2,R16
cpc R3,R17
brlo L34
.dbline 201
L31:
.dbline 194
inc R20
L33:
.dbline 194
cpi R20,8
brlo L30
.dbline -2
.dbline 202
; {
; //for (j = 0; j < 150; j++);
; ;
; }
; }
; }
L29:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym r m 20 c
.dbsym r i 22 c
.dbsym r k 16 i
.dbend
.dbfunc e Delaynms _Delaynms fV
; m -> R20
; i -> R22
; j -> R10
; k -> R16,R17
.even
_Delaynms::
xcall push_gset3
.dbline -1
.dbline 205
; //////////////////////////////////////////////////////
; void Delaynms(unsigned int k)
; {
.dbline 207
; char i, j, m;
; for (m = 0; m < 8; m++)
clr R20
xjmp L42
L39:
.dbline 208
; {
.dbline 209
; for (i = 0; i < k; i++)
clr R22
xjmp L46
L43:
.dbline 210
; {
.dbline 211
clr R10
xjmp L50
L47:
.dbline 211
L48:
.dbline 211
inc R10
L50:
.dbline 211
mov R24,R10
cpi R24,150
brlo L47
.dbline 213
L44:
.dbline 209
inc R22
L46:
.dbline 209
mov R2,R22
clr R3
cp R2,R16
cpc R3,R17
brlo L43
.dbline 214
L40:
.dbline 207
inc R20
L42:
.dbline 207
cpi R20,8
brlo L39
.dbline -2
.dbline 215
; for (j = 0; j < 150; j++);
;
; }
; }
; }
L38:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r m 20 c
.dbsym r i 22 c
.dbsym r j 10 c
.dbsym r k 16 i
.dbend
.dbfunc e Delay_key _Delay_key fV
; i -> R20
; j -> R22
; m -> R10
; k -> R16
.even
_Delay_key::
xcall push_gset3
.dbline -1
.dbline 219
; //////////////////////////////////
;
; void Delay_key(unsigned char k)
; {
.dbline 221
; unsigned char i, j, m;
; for (i = 0; i < k; i++)
clr R20
xjmp L55
L52:
.dbline 222
; {
.dbline 223
; for (j = 0; j < 8; j++)
clr R22
xjmp L59
L56:
.dbline 224
; {
.dbline 225
clr R10
xjmp L63
L60:
.dbline 225
L61:
.dbline 225
inc R10
L63:
.dbline 225
mov R24,R10
cpi R24,150
brlo L60
.dbline 226
L57:
.dbline 223
inc R22
L59:
.dbline 223
cpi R22,8
brlo L56
.dbline 227
L53:
.dbline 221
inc R20
L55:
.dbline 221
cp R20,R16
brlo L52
.dbline -2
.dbline 228
; for (m = 0; m < 150; m++);
; }
; }
; }
L51:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbsym r m 10 c
.dbsym r k 16 c
.dbend
.dbfunc e LCD_China _LCD_China fV
; i -> R20
; L_R -> R22
; data -> R10,R11
; y -> R12
; x -> R14
.even
_LCD_China::
xcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,3
ldd R10,y+13
ldd R11,y+14
ldd R22,y+15
.dbline -1
.dbline 233
;
;
;
; void LCD_China(char x, char y, unsigned char const *data, char L_R)
; {
.dbline 235
; char i;
; LCD_write_data(x, y, *data, L_R);
std y+2,R22
movw R30,R10
lpm R30,Z
std y+0,R30
mov R18,R12
mov R16,R14
xcall _LCD_write_data
.dbline 236
; for (i = 0; i < 16; i++)
clr R20
xjmp L68
L65:
.dbline 237
.dbline 238
mov R18,R22
mov R30,R20
clr R31
add R30,R10
adc R31,R11
lpm R16,Z
xcall _LCD_write
.dbline 239
L66:
.dbline 236
inc R20
L68:
.dbline 236
cpi R20,16
brlo L65
.dbline 241
; {
; LCD_write(*(data + i), L_R);
; }
;
; LCD_write_data(x, y + 1, *(data + 16), L_R);
std y+2,R22
movw R30,R10
adiw R30,16
lpm R30,Z
std y+0,R30
mov R18,R12
subi R18,255 ; addi 1
mov R16,R14
xcall _LCD_write_data
.dbline 242
; for (i = 16; i < 32; i++)
ldi R20,16
xjmp L72
L69:
.dbline 243
.dbline 244
mov R18,R22
mov R30,R20
clr R31
add R30,R10
adc R31,R11
lpm R16,Z
xcall _LCD_write
.dbline 247
L70:
.dbline 242
inc R20
L72:
.dbline 242
cpi R20,32
brlo L69
.dbline -2
.dbline 248
; {
; LCD_write(*(data + i), L_R);
;
;
; }
; }
L64:
adiw R28,3
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r L_R 22 c
.dbsym r data 10 pc
.dbsym r y 12 c
.dbsym r x 14 c
.dbend
.dbfunc e LCD_China_ini _LCD_China_ini fV
; j -> R20
; p -> R22
; i -> R14
; L_R -> R10
; data -> R12,R13
; y -> y+15
; x -> y+13
.even
_LCD_China_ini::
xcall push_arg4
xcall push_gset5
sbiw R28,3
ldd R12,y+17
ldd R13,y+18
ldd R10,y+19
.dbline -1
.dbline 251
; ///////////////////////////////////////////////
; void LCD_China_ini(char x, char y, unsigned char const *data, char L_R)
; {
.dbline 253
;
; char i,j,p=0;
clr R22
.dbline 254
; LED_ini();
xcall _LED_ini
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -