📄 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
_flag::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\ATMega8515\定时实验/ForATmega8515.h
.dbfile C:\ATMega8515\定时实验\main.c
.dbsym e flag _flag c
.area text(rom, con, rel)
.dbfile C:\ATMega8515\定时实验\main.c
.dbfunc e main _main fV
; count -> R20
.even
_main::
.dbline -1
.dbline 10
; #include <iom8515v.h>
; #include"ForATmega8515.h"
;
;
; void delay(uint ticks);
; void display(uchar left,uchar right);
; uchar flag=0;
;
; void main()
; {
.dbline 11
; uchar count=0;
clr R20
.dbline 12
; init_devices();
rcall _init_devices
rjmp L3
L2:
.dbline 15
;
; while(1)
; {
.dbline 16
; display(count/10,count%10);
ldi R17,10
mov R16,R20
rcall mod8u
mov R18,R16
ldi R17,10
mov R16,R20
rcall div8u
rcall _display
.dbline 17
; if(flag)
lds R2,_flag
tst R2
breq L5
.dbline 18
; {
.dbline 19
; if(count++==99)count=0;
mov R2,R20
clr R3
subi R20,255 ; addi 1
mov R24,R2
cpi R24,99
brne L7
.dbline 19
clr R20
L7:
.dbline 20
; flag=0;
clr R2
sts _flag,R2
.dbline 21
; }
L5:
.dbline 22
L3:
.dbline 14
rjmp L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r count 20 c
.dbend
.dbfunc e delay _delay fV
; i -> R20
; ticks -> R16,R17
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 26
; }
; }
;
; void delay(uint ticks)
; {
.dbline 28
rjmp L13
L10:
.dbline 28
ldi R20,200
rjmp L17
L14:
.dbline 28
L15:
.dbline 28
dec R20
L17:
.dbline 28
tst R20
brne L14
L11:
.dbline 28
subi R16,1
sbci R17,0
L13:
.dbline 28
; uchar i;
; for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
cpi R16,0
cpc R16,R17
brne L10
X1:
.dbline -2
L9:
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 32
; }
;
; void display(uchar left,uchar right)
; {
.dbline 33
; 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 34
; PORTC&=~SEG0; //选通左边的数码管
cbi 0x15,7
.dbline 35
; delay(1); //延时
ldi R16,1
ldi R17,0
rcall _delay
.dbline 36
; PORTC|=SEG0; //关左边的数码管
sbi 0x15,7
.dbline 37
; 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 38
; PORTC&=~SEG1; //选通右边的数码管
cbi 0x15,6
.dbline 39
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline 40
; PORTC|=SEG1; //关右边的数码管
sbi 0x15,6
.dbline -2
L18:
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 + -