📄 main.s
字号:
.module main.c
.area lit(rom, con, rel)
_Tab::
.byte 33,249
.byte 19,'Q
.byte 201,'E
.byte 5,241
.byte 1,'A
.byte 129,13
.byte 39,25
.byte 7,135
.dbfile C:\ATMega8515\测试程序/ForATmega8515.h
.dbsym e Tab _Tab A[16:16]kc
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序/ForATmega8515.h
_leddata::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序/ForATmega8515.h
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e leddata _leddata c
_left::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e left _left c
_right::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e right _right c
_lcdindex::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e lcdindex _lcdindex c
_ledflag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e ledflag _ledflag c
_shuflag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e shuflag _shuflag c
_lcdflag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e lcdflag _lcdflag c
_index::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbsym e index _index c
.area lit(rom, con, rel)
_str::
.byte 48,49,50,51,52,53,54,55,56,57,'A,'B,'C,'D,'E,'F
.byte 0
.dbsym e str _str A[17:17]kc
_line::
.byte 0,2
.byte 4,6
.byte 8,10
.byte 12,14
.byte 0,2
.byte 4,6
.byte 8,10
.byte 12,14
.dbsym e line _line A[16:16]kc
_pic1::
.byte 24,24
.byte 153,219
.byte 126,60
.byte 24,0
.dbsym e pic1 _pic1 A[8:8]kc
.area text(rom, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 41
; #include <iom8515v.h>
; #include <macros.h>
; #include <stdio.h>
; #include"ForATmega8515.h"
;
; #define SomeNop NOP();NOP();NOP();NOP();NOP();NOP();\
; NOP();NOP();NOP();NOP();NOP();NOP();\
; NOP();NOP();NOP();NOP();NOP();NOP();
;
; #define C0 0x04
; #define C1 0x08
; #define C2 0x10
; #define R0 0x40
; #define R1 0x80
; ///////////////////////////////
; uchar leddata=0;
; uchar left=0;
; uchar right=0;
; uchar lcdindex=0;
; unsigned char ledflag=0;
; unsigned char shuflag=0;
; unsigned char lcdflag=0;
; uchar index=0;
; uchar key,temp;
; uchar const str[]={"0123456789ABCDEF"};
; uchar const line[]={0,2,4,6,8,10,12,14,
; 0,2,4,6,8,10,12,14};//关
; uchar const pic1[]={0x18,0x18,0x99,0xDB,0x7E,0x3C,0x18,0x00};
; ///////////////////////////////
; void delay(uint ticks);
; void display();
; /////////LCD///////////
; void writedata(uchar lcddata);
; void writecom(uchar lcddata);
; void writeline(uchar x,uchar const *pt);
; void initlcd();
; //////////////////////////////
; uchar GetKey(void);
; /////////////////////////////
; void main()
; {
.dbline 42
; init_devices();
rcall _init_devices
.dbline 43
; initlcd();
rcall _initlcd
.dbline 44
; printf("-----------Test For ATMega8515--------------\n");
ldi R16,<L2
ldi R17,>L2
rcall _printf
rjmp L4
L3:
.dbline 46
; while(1)
; {
.dbline 47
; display();
rcall _display
.dbline 48
lds R2,_ledflag
tst R2
breq L6
.dbline 48
.dbline 48
lds R24,_leddata
subi R24,255 ; addi 1
sts _leddata,R24
.dbline 48
clr R2
sts _ledflag,R2
.dbline 48
lds R2,_index
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _index,R24
mov R24,R2
cpi R24,7
brne L8
.dbline 48
clr R2
sts _index,R2
L8:
.dbline 48
; if(ledflag){leddata++;ledflag=0; if(index++==7)index=0;}
L6:
.dbline 49
lds R2,_shuflag
tst R2
breq L10
.dbline 49
.dbline 49
lds R2,_left
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _left,R24
mov R24,R2
cpi R24,9
brne L12
.dbline 49
clr R2
sts _left,R2
L12:
.dbline 49
; if(shuflag){if(left++==9)left=0;shuflag=0;}
clr R2
sts _shuflag,R2
.dbline 49
L10:
.dbline 50
lds R2,_lcdflag
tst R2
breq L14
.dbline 50
.dbline 50
lds R2,_lcdindex
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _lcdindex,R24
mov R24,R2
cpi R24,16
brne L16
.dbline 50
clr R2
sts _lcdindex,R2
L16:
.dbline 50
; if(lcdflag){if(lcdindex++==16)lcdindex=0;writeline(lcdindex,str);lcdflag=0;}
ldi R18,<_str
ldi R19,>_str
lds R16,_lcdindex
rcall _writeline
.dbline 50
clr R2
sts _lcdflag,R2
.dbline 50
L14:
.dbline 51
; if(lcdindex==16)PORTD&=~BEEL;
lds R24,_lcdindex
cpi R24,16
brne L18
.dbline 51
cbi 0x12,5
rjmp L19
L18:
.dbline 52
; else PORTD|=BEEL;
sbi 0x12,5
L19:
.dbline 54
; ///////////////////////////////////
; temp=GetKey();
rcall _GetKey
sts _temp,R16
.dbline 55
; key=temp;
mov R2,R16
sts _key,R2
.dbline 56
; if((key&0x10)!=0)
sbrs R16,4
rjmp L20
.dbline 57
; {
.dbline 58
; if((temp&0x01)==0)right=1;
sbrc R16,0
rjmp L22
.dbline 58
ldi R24,1
sts _right,R24
rjmp L21
L22:
.dbline 59
; else if((temp&0x02)==0)right=3;
lds R2,_temp
sbrc R2,1
rjmp L24
.dbline 59
ldi R24,3
sts _right,R24
rjmp L21
L24:
.dbline 60
; else if((temp&0x04)==0)right=5;
lds R2,_temp
sbrc R2,2
rjmp L21
.dbline 60
ldi R24,5
sts _right,R24
.dbline 61
; }
rjmp L21
L20:
.dbline 62
; else if((key&0x20)!=0)
lds R2,_key
sbrs R2,5
rjmp L28
.dbline 63
; {
.dbline 64
; if((temp&0x01)==0)right=2;
lds R2,_temp
sbrc R2,0
rjmp L30
.dbline 64
ldi R24,2
sts _right,R24
rjmp L31
L30:
.dbline 65
; else if((temp&0x02)==0)right=4;
lds R2,_temp
sbrc R2,1
rjmp L32
.dbline 65
ldi R24,4
sts _right,R24
rjmp L33
L32:
.dbline 66
; else if((temp&0x04)==0)right=6;
lds R2,_temp
sbrc R2,2
rjmp L34
.dbline 66
ldi R24,6
sts _right,R24
L34:
L33:
L31:
.dbline 67
; }
L28:
L21:
.dbline 69
L4:
.dbline 45
rjmp L3
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay _delay fV
; x -> R20
; ticks -> R16,R17
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 75
; /////////////////////////////////////
; }
;
;
; }
; //////////////////////////////
; void delay(uint ticks)
; {
.dbline 77
rjmp L40
L37:
.dbline 77
ldi R20,100
rjmp L44
L41:
.dbline 77
L42:
.dbline 77
dec R20
L44:
.dbline 77
tst R20
brne L41
L38:
.dbline 77
subi R16,1
sbci R17,0
L40:
.dbline 77
; uchar x;
; for(;ticks!=0;ticks--)for(x=100;x!=0;x--);
cpi R16,0
cpc R16,R17
brne L37
X1:
.dbline -2
L36:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbsym r ticks 16 i
.dbend
.dbfunc e display _display fV
; i -> R20
.even
_display::
rcall push_gset1
.dbline -1
.dbline 81
; }
;
; void display()
; {
.dbline 83
; uchar i;
; PORTA=~leddata;
lds R2,_leddata
com R2
out 0x1b,R2
.dbline 84
; PORTC&=~LED;
cbi 0x15,5
.dbline 85
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 86
; PORTC|=LED;
sbi 0x15,5
.dbline 88
; ///////////
; PORTA=Tab[left];
ldi R24,<_Tab
ldi R25,>_Tab
lds R30,_left
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 89
; PORTC&=~SEG0;
cbi 0x15,7
.dbline 90
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 91
; PORTC|=SEG0;
sbi 0x15,7
.dbline 93
; /////////////////
; PORTA=Tab[right];
ldi R24,<_Tab
ldi R25,>_Tab
lds R30,_right
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 94
; PORTC&=~SEG1;
cbi 0x15,6
.dbline 95
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 96
; PORTC|=SEG1;
sbi 0x15,6
.dbline 98
; //////////////////
; for(i=0;i!=8;i++)
clr R20
rjmp L49
L46:
.dbline 99
.dbline 101
sbi 0x18,0
.dbline 102
ldi R24,<_pic1
ldi R25,>_pic1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0xf,R30
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 103
nop
.dbline 104
in R24,0x18
andi R24,241
out 0x18,R24
.dbline 105
lds R2,_index
clr R3
mov R30,R20
clr R31
add R30,R2
adc R31,R3
ldi R24,<_line
ldi R25,>_line
add R30,R24
adc R31,R25
lpm R30,Z
in R2,0x18
or R2,R30
out 0x18,R2
.dbline 106
cbi 0x18,0
.dbline 107
ldi R16,1
ldi R17,0
rcall _delay
.dbline 108
L47:
.dbline 98
inc R20
L49:
.dbline 98
cpi R20,8
breq X2
rjmp L46
X2:
.dbline -2
L45:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e writedata _writedata fV
; lcddata -> R20
.even
_writedata::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 114
; {
;
; PORTB|=0x01;
; SPDR=pic1[i];
; SomeNop
; PORTB&=0xf1;
; PORTB|=line[i+index];
; PORTB&=~0x01;
; delay(1);
; }
; }
;
; /////////////////LCD///////////////////////
; ///////////////////////////////
; void writedata(uchar lcddata)
; {
.dbline 116
; // E=1;
; PORTC|=E;
sbi 0x15,4
.dbline 118
; // RS=1;
; PORTC|=RS;
sbi 0x15,2
.dbline 120
; // RW=0;
; PORTA=lcddata;
out 0x1b,R20
.dbline 122
; // E=0;
; PORTC&=~E;
cbi 0x15,4
.dbline 123
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline -2
L50:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r lcddata 20 c
.dbend
.dbfunc e writecom _writecom fV
; lcddata -> R20
.even
_writecom::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 127
; }
; /////////////////////////////////
; void writecom(uchar lcddata)
; {
.dbline 129
; // E=1;
; PORTC|=E;
sbi 0x15,4
.dbline 131
; // RS=0;
; PORTC&=~RS;
cbi 0x15,2
.dbline 133
; // RW=0;
; PORTA=lcddata;
out 0x1b,R20
.dbline 135
; // E=0;
; PORTC&=~E;
cbi 0x15,4
.dbline 136
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline -2
L51:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r lcddata 20 c
.dbend
.dbfunc e writeline _writeline fV
; pt -> R20,R21
; x -> R22
.even
_writeline::
rcall push_gset2
movw R20,R18
mov R22,R16
.dbline -1
.dbline 140
; }
;
; void writeline(uchar x,uchar const *pt)
; {
.dbline 141
; if(x==0)
tst R22
brne L53
.dbline 142
; {
.dbline 143
; writecom(0x01);
ldi R16,1
rcall _writecom
.dbline 144
; writecom(0x80);
ldi R16,128
rcall _writecom
.dbline 145
; }
rjmp L54
L53:
.dbline 147
.dbline 148
mov R30,R22
clr R31
sbiw R30,1
add R30,R20
adc R31,R21
lpm R16,Z
rcall _writedata
.dbline 149
L54:
.dbline -2
L52:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r pt 20 pkc
.dbsym r x 22 c
.dbend
.dbfunc e initlcd _initlcd fV
.even
_initlcd::
.dbline -1
.dbline 154
; else
; {
; writedata(pt[x-1]);
; }
; }
;
; ///////////////////////////////////
; void initlcd()
; {
.dbline 155
; writecom(0x01);
ldi R16,1
rcall _writecom
.dbline 156
; writecom(0x38);
ldi R16,56
rcall _writecom
.dbline 157
; writecom(0x0f);
ldi R16,15
rcall _writecom
.dbline 158
; writecom(0x06);
ldi R16,6
rcall _writecom
.dbline 159
; writecom(0x01);
ldi R16,1
rcall _writecom
.dbline 160
; writecom(0x80);
ldi R16,128
rcall _writecom
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbend
.dbfunc e GetKey _GetKey fc
; temp -> R20
; key -> R22
.even
_GetKey::
rcall push_gset2
.dbline -1
.dbline 169
; }
; ///////////////////////////////////
;
;
;
;
; //////////////////////////////////
; uchar GetKey(void)
; {
.dbline 174
; uchar key;
; uchar temp;
; //temp的高4位是按下的列
; //temp低4位是按下的行
; DDRD&=~(C0+C1+C2);//输
in R24,0x11
andi R24,227
out 0x11,R24
.dbline 175
; DDRD|=R0+R1;//输
in R24,0x11
ori R24,192
out 0x11,R24
.dbline 176
; PORTD&=~(R0+R1);
in R24,0x12
andi R24,63
out 0x12,R24
.dbline 177
; key=PIND;
in R22,0x10
.dbline 178
; key>>=2;
lsr R22
lsr R22
.dbline 179
; key&=0x07;
andi R22,7
.dbline 180
; if(key!=0x07)
cpi R22,7
breq L57
.dbline 181
; {
.dbline 182
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 183
; key=PIND;
in R22,0x10
.dbline 184
; key>>=2;
lsr R22
lsr R22
.dbline 185
; key&=0x07;
andi R22,7
.dbline 186
; if(key!=0x07)
cpi R22,7
breq L59
.dbline 187
; {
.dbline 189
; //确实有键按下
; temp=key;
mov R20,R22
.dbline 190
; DDRD|=C0+C1+C2;//输出
in R24,0x11
ori R24,28
out 0x11,R24
.dbline 191
; DDRD&=~(R0+R1);//输入
in R24,0x11
andi R24,63
out 0x11,R24
.dbline 192
; PORTD|=C0+C1+C2;
in R24,0x12
ori R24,28
out 0x12,R24
.dbline 193
; key=PIND;
in R22,0x10
.dbline 194
; key>>=2;
lsr R22
lsr R22
.dbline 195
; key&=0x30;
andi R22,48
.dbline 196
; temp+=key;
add R20,R22
.dbline 197
; return temp;
mov R16,R20
rjmp L56
L59:
.dbline 199
; }
; }
L57:
.dbline 200
; return 0xff;
ldi R16,255
.dbline -2
L56:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r key 22 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
_temp::
.blkb 1
.dbsym e temp _temp c
_key::
.blkb 1
.dbsym e key _key c
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
L2:
.blkb 46
.area idata
.byte 45,45,45,45,45,45,45,45,45,45,45,'T,'e,'s,'t,32
.byte 'F,'o,'r,32,'A,'T,'M,'e,'g,'a,56,53,49,53,45,45
.byte 45,45,45,45,45,45,45,45,45,45,45,45,10,0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\测试程序\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -