📄 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 text(rom, con, rel)
.dbfile C:\ATMega8515\数码管/ForATmega8515.h
.dbfile C:\ATMega8515\数码管\main.c
.dbfunc e main _main fV
; softdelay -> R20,R21
; count -> R22
.even
_main::
.dbline -1
.dbline 8
; #include <iom8515v.h>
; #include"ForATmega8515.h"
;
; void delay(uint ticks);
; void display(uchar left,uchar right);
;
; void main()
; {
.dbline 9
; uchar count=0;
clr R22
.dbline 10
; uint softdelay=1000;
ldi R20,1000
ldi R21,3
.dbline 11
; init_devices();
rcall _init_devices
rjmp L3
X0:
.dbline 13
; while(1)
; {
L5:
.dbline 14
ldi R17,10
mov R16,R22
rcall mod8u
mov R18,R16
ldi R17,10
mov R16,R22
rcall div8u
rcall _display
L6:
.dbline 14
; while(softdelay--)display(count/10,count%10);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L5
tst R3
brne L5
X1:
.dbline 15
; softdelay=1000;
ldi R20,1000
ldi R21,3
.dbline 16
; if(++count==100)count=0;
mov R24,R22
subi R24,255 ; addi 1
mov R22,R24
cpi R22,100
brne L8
.dbline 16
clr R22
L8:
.dbline 17
L3:
.dbline 12
rjmp L6
X2:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r softdelay 20 i
.dbsym r count 22 c
.dbend
.dbfunc e delay _delay fV
; i -> R20
; ticks -> R16,R17
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 21
; }
; }
;
; void delay(uint ticks)
; {
.dbline 23
rjmp L14
L11:
.dbline 23
ldi R20,200
rjmp L18
L15:
.dbline 23
L16:
.dbline 23
dec R20
L18:
.dbline 23
tst R20
brne L15
L12:
.dbline 23
subi R16,1
sbci R17,0
L14:
.dbline 23
; uchar i;
; for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
cpi R16,0
cpc R16,R17
brne L11
X3:
.dbline -2
L10:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r ticks 16 i
.dbend
.dbfunc e display _display fV
; right -> R20
; left -> R22
.even
_display::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 27
; }
;
; void display(uchar left,uchar right)
; {
.dbline 28
; PORTA=Tab[left];//查表显示数码管
ldi R24,<_Tab
ldi R25,>_Tab
mov R30,R22
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 29
; PORTC&=~SEG0; //选通左边的数码管
cbi 0x15,7
.dbline 30
; delay(1); //延时
ldi R16,1
ldi R17,0
rcall _delay
.dbline 31
; PORTC|=SEG0; //关左边的数码管
sbi 0x15,7
.dbline 32
; PORTA=Tab[right];//查表显示数码管
ldi R24,<_Tab
ldi R25,>_Tab
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
out 0x1b,R30
.dbline 33
; PORTC&=~SEG1; //选通右边的数码管
cbi 0x15,6
.dbline 34
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 35
; PORTC|=SEG1; //关右边的数码管
sbi 0x15,6
.dbline -2
L19:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r right 20 c
.dbsym r left 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -