📄 main.s
字号:
.module main.c
.area lit(rom, con, rel)
_p1::
.byte 0,0
.byte 0,0
.byte 0,192
.byte 240,248
.byte 252,252
.byte 254,254
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,254
.byte 128,128
.byte 0,0
.byte 0,0
.byte 0,0
.byte 254,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,127
.byte 31,6
.byte 0,0
.byte 0,0
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,127
.byte 1,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 127,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 127,127
.byte 63,63
.byte 31,7
.byte 3,0
.byte 0,0
.byte 0,0
.dbfile C:\DOCUME~1\zhuji\桌面\photo/photo.h
.dbsym e p1 _p1 A[128:4:32]kc
_p2::
.byte 0,0
.byte 64,64
.byte 64,64
.byte 64,246
.byte 64,64
.byte 64,64
.byte 64,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,'w
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.dbsym e p2 _p2 A[32:2:16]kc
_p3::
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,128
.byte 128,192
.byte 224,224
.byte 224,240
.byte 240,240
.byte 248,248
.byte 248,248
.byte 248,248
.byte 248,248
.byte 248,248
.byte 248,240
.byte 240,240
.byte 224,224
.byte 192,192
.byte 128,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,192
.byte 240,252
.byte 254,255
.byte 255,255
.byte 255,223
.byte 31,127
.byte 255,255
.byte 255,255
.byte 255,'w
.byte 55,'G
.byte 15,31
.byte 63,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,254
.byte 252,252
.byte 240,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,208
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 'p,'p
.byte 48,48
.byte 63,63
.byte 63,63
.byte 63,56
.byte 56,96
.byte 96,'p
.byte 48,61
.byte 159,223
.byte 255,31
.byte 63,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,127
.byte 63,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,240
.byte 240,240
.byte 248,240
.byte 248,240
.byte 248,240
.byte 255,255
.byte 231,159
.byte 63,223
.byte 187,59
.byte 'c,40
.byte 224,220
.byte 254,255
.byte 254,254
.byte 254,126
.byte 127,126
.byte 126,126
.byte 254,62
.byte 255,231
.byte 59,57
.byte 60,30
.byte 31,31
.byte 15,15
.byte 15,135
.byte 163,179
.byte 177,153
.byte 204,244
.byte 246,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,1
.byte 3,7
.byte 15,31
.byte 63,127
.byte 127,255
.byte 255,255
.byte 255,255
.byte 255,255
.byte 255,29
.byte 25,25
.byte 'y,217
.byte 159,47
.byte 47,251
.byte 248,'x
.byte 56,60
.byte 60,62
.byte 63,63
.byte 57,25
.byte 24,24
.byte 24,28
.byte 12,12
.byte 12,'V
.byte 254,127
.byte 255,255
.byte 255,247
.byte 255,255
.byte 255,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,3
.byte 3,3
.byte 3,3
.byte 3,0
.byte 0,0
.byte 0,0
.byte 1,1
.byte 0,1
.byte 3,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,1
.byte 3,3
.byte 3,3
.byte 3,3
.byte 3,3
.byte 3,0
.byte 0,128
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.dbsym e p3 _p3 A[384:6:64]kc
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\zhuji\桌面\photo/photo.h
.dbfile C:\DOCUME~1\zhuji\桌面\photo\main.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 18
; // Project :12864 LCD Display
; // Writer : you hu
; // ICC-AVR application builder :2005-7-12
; // Target : M128
; // Crystal: 8.0000Mhz
; // Description : display photo 32*32 big
;
; #include <iom128v.h>
; #include <macros.h>
; #include "main.h"
; #include "photo.h"
; typedef unsigned char uchar;
; typedef unsigned int uint;
;
; unsigned char flag;
;
; void port_init(void)
; {
.dbline 20
; //访问外部ram的总线端口
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 21
; DDRA = 0x00;
out 0x1a,R2
.dbline 22
; PORTC = 0x00;
out 0x15,R2
.dbline 23
; DDRC = 0xFF;
ldi R24,255
out 0x14,R24
.dbline -2
.dbline 24
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_busy _check_busy fV
; temp -> R20
; cs -> R16
.even
_check_busy::
xcall push_gset1
.dbline -1
.dbline 27
;
; void check_busy(uchar cs)
; {
xjmp L4
L3:
.dbline 30
; uchar temp;
; while(temp)
; {
.dbline 31
; if(cs)
tst R16
breq L6
.dbline 32
; temp=R_staus&0X80; //将忙状态读到temp中进行确定
lds R20,8197
andi R20,128
xjmp L7
L6:
.dbline 34
; else
; temp=L_staus&0X80;
lds R20,8201
andi R20,128
L7:
.dbline 35
L4:
.dbline 29
tst R20
brne L3
.dbline -2
.dbline 36
; }
; }
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r cs 16 c
.dbend
.dbfunc e LCD_Clean _LCD_Clean fV
; page -> R20
; y -> R22
.even
_LCD_Clean::
xcall push_gset2
.dbline -1
.dbline 39
;
; void LCD_Clean(void)
; {
.dbline 40
; unsigned char page=0,y; //定义表示页和列的局部变量
clr R20
.dbline 42
;
; for(page=0;page<8;page++)
xjmp L12
L9:
.dbline 43
; {
.dbline 45
; //LCD左半屏的操作
; check_busy(0);
clr R16
xcall _check_busy
.dbline 46
; L_command=LCD_PAGE+page; //设置LCD左半屏页地址
mov R24,R20
subi R24,72 ; addi 184
sts 8200,R24
.dbline 47
; check_busy(0);
clr R16
xcall _check_busy
.dbline 48
; L_command=LCD_Y;
ldi R24,64
sts 8200,R24
.dbline 50
; //LCD右半屏的操作
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 51
; R_command=LCD_PAGE+page; //设置LCD右半屏页地址
mov R24,R20
subi R24,72 ; addi 184
sts 8196,R24
.dbline 52
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 53
; R_command=LCD_Y;
ldi R24,64
sts 8196,R24
.dbline 55
;
; for(y=0;y<64;y++)
clr R22
xjmp L16
L13:
.dbline 56
.dbline 57
clr R2
sts 8202,R2
.dbline 58
sts 8198,R2
.dbline 59
L14:
.dbline 55
inc R22
L16:
.dbline 55
cpi R22,64
brlo L13
.dbline 60
L10:
.dbline 42
inc R20
L12:
.dbline 42
cpi R20,8
brlo L9
.dbline -2
.dbline 61
; {
; L_data=0x00;
; R_data=0x00;
; }
; }
; }
L8:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r page 20 c
.dbsym r y 22 c
.dbend
.dbfunc e LCD_Init _LCD_Init fV
.even
_LCD_Init::
.dbline -1
.dbline 64
;
; void LCD_Init(void) //LCD初始化子函数
; {
.dbline 66
; /*首先关闭12864的显示*/
; check_busy(0); //LCD左半屏正在工作,等待......
clr R16
xcall _check_busy
.dbline 67
; L_command=LCD_OFF; //先关闭LCD左半屏的显示
ldi R24,62
sts 8200,R24
.dbline 68
; check_busy(1); //LCD右半屏正在工作,等待......
ldi R16,1
xcall _check_busy
.dbline 69
; R_command=LCD_OFF; //先关闭LCD右半屏的显示
ldi R24,62
sts 8196,R24
.dbline 72
;
; /*开启12864的显示*/
; check_busy(0);
clr R16
xcall _check_busy
.dbline 73
; L_command=LCD_ON; //打开LCD左半屏的显示
ldi R24,63
sts 8200,R24
.dbline 74
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 75
; R_command=LCD_ON; //打开LCD右半屏的显示
ldi R24,63
sts 8196,R24
.dbline 78
;
; /*设置LCD显示的起始行*/
; check_busy(0);
clr R16
xcall _check_busy
.dbline 79
; L_command=LCD_X; //LCD左半屏起始行为0
ldi R24,192
sts 8200,R24
.dbline 80
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 81
; R_command=LCD_X; //LCD右半屏起始行为0
ldi R24,192
sts 8196,R24
.dbline -2
.dbline 82
; }
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 85
;
; void init_devices(void)
; {
.dbline 86
; XMCRA = 0x00; //外部存储器控制
clr R2
sts 109,R2
.dbline 87
; XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
ldi R24,7
sts 108,R24
.dbline 88
; port_init();
xcall _port_init
.dbline 89
; MCUCR = 0x80; //外部SRAM使能
ldi R24,128
out 0x35,R24
.dbline -2
.dbline 90
; }
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ch_pos _ch_pos fV
; n -> R20
; cs -> R22
.even
_ch_pos::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 93
;
; void ch_pos(unsigned char cs,unsigned char n) //屏选和页码设置函数
; {
.dbline 94
; if(cs)
tst R22
breq L20
.dbline 95
; {
.dbline 96
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 97
; R_command=LCD_PAGE+n; //设置LCD右半屏页地址
mov R24,R20
subi R24,72 ; addi 184
sts 8196,R24
.dbline 98
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 99
; R_command=LCD_Y;
ldi R24,64
sts 8196,R24
.dbline 100
; }
xjmp L21
L20:
.dbline 102
.dbline 103
clr R16
xcall _check_busy
.dbline 104
mov R24,R20
subi R24,72 ; addi 184
sts 8200,R24
.dbline 105
clr R16
xcall _check_busy
.dbline 106
ldi R24,64
sts 8200,R24
.dbline 107
L21:
.dbline -2
.dbline 108
; else
; {
; check_busy(0);
; L_command=LCD_PAGE+n; //设置LCD右半屏页地址
; check_busy(0);
; L_command=LCD_Y;
; }
; }
L19:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r n 20 c
.dbsym r cs 22 c
.dbend
.dbfunc e write_photo _write_photo fV
; j -> R20
; i -> R10
; cs -> R22
.even
_write_photo::
xcall push_gset3
mov R22,R16
.dbline -1
.dbline 110
; void write_photo(unsigned char cs)
; {
.dbline 112
; uchar i,j;
; for(j=0;j<3;j++)
clr R20
xjmp L26
L23:
.dbline 113
; {
.dbline 114
; if(cs) ch_pos(1,2*j); //右屏页码处理
tst R22
breq L27
.dbline 114
ldi R24,2
mul R24,R20
mov R18,R0
ldi R16,1
xcall _ch_pos
xjmp L28
L27:
.dbline 115
; else ch_pos(0,2*j); //左屏页码处理
ldi R24,2
mul R24,R20
mov R18,R0
clr R16
xcall _ch_pos
L28:
.dbline 116
; for(i=0;i<64;i++)
clr R10
xjmp L32
L29:
.dbline 117
; {
.dbline 119
;
; if(cs)
tst R22
breq L33
.dbline 120
; {
.dbline 121
; R_data=p3[2*j][i]; //右半屏显示
ldi R24,2
mul R24,R20
mov R17,R0
ldi R16,64
muls R16,R17
ldi R24,<_p3
ldi R25,>_p3
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8198,R30
.dbline 122
; }
xjmp L34
L33:
.dbline 124
; else
; {
.dbline 125
; L_data=p3[2*j][i]; //左半屏显示
ldi R24,2
mul R24,R20
mov R17,R0
ldi R16,64
muls R16,R17
ldi R24,<_p3
ldi R25,>_p3
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8202,R30
.dbline 126
; }
L34:
.dbline 127
L30:
.dbline 116
inc R10
L32:
.dbline 116
mov R24,R10
cpi R24,64
brlo L29
.dbline 128
; }
; if(cs) ch_pos(1,2*j+1); //右屏页码处理
tst R22
breq L35
.dbline 128
ldi R24,2
mul R24,R20
mov R18,R0
subi R18,255 ; addi 1
ldi R16,1
xcall _ch_pos
xjmp L36
L35:
.dbline 129
; else ch_pos(0,2*j+1); //左屏页码处理
ldi R24,2
mul R24,R20
mov R18,R0
subi R18,255 ; addi 1
clr R16
xcall _ch_pos
L36:
.dbline 130
; for(i=0;i<64;i++)
clr R10
xjmp L40
L37:
.dbline 131
; {
.dbline 132
; if(cs)
tst R22
breq L41
.dbline 133
; {
.dbline 134
; R_data=p3[2*j+1][i]; //右半屏显示
ldi R24,2
mul R24,R20
mov R17,R0
ldi R16,64
muls R16,R17
ldi R24,<_p3+64
ldi R25,>_p3+64
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8198,R30
.dbline 135
; }
xjmp L42
L41:
.dbline 137
; else
; {
.dbline 139
;
; L_data=p3[2*j+1][i]; //左半屏显示
ldi R24,2
mul R24,R20
mov R17,R0
ldi R16,64
muls R16,R17
ldi R24,<_p3+64
ldi R25,>_p3+64
movw R2,R0
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8202,R30
.dbline 140
; }
L42:
.dbline 141
L38:
.dbline 130
inc R10
L40:
.dbline 130
mov R24,R10
cpi R24,64
brlo L37
.dbline 142
L24:
.dbline 112
inc R20
L26:
.dbline 112
cpi R20,3
brsh X0
xjmp L23
X0:
.dbline -2
.dbline 143
; }
; }
; }
L22:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 10 c
.dbsym r cs 22 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 146
;
; void main(void)
; {
.dbline 147
; init_devices();
xcall _init_devices
.dbline 148
; LCD_Clean();
xcall _LCD_Clean
.dbline 149
; LCD_Init();
xcall _LCD_Init
.dbline 150
; write_photo(0);
clr R16
xcall _write_photo
.dbline 151
; write_photo(1);
ldi R16,1
.dbline -2
.dbline 152
; }
L45:
.dbline 0 ; func end
xjmp _write_photo
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\zhuji\桌面\photo\main.c
_flag::
.blkb 1
.dbsym e flag _flag c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -