📄 addcounterdisplay.s
字号:
.module AddCounterDisplay.c
.area lit
_DATA_7SEG::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 'w,124
.byte 57,94
.byte 'y,'q
.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
.dbsym s DATA_7SEG _DATA_7SEG Ac[16:16]
.area text
.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
.dbfunc s delay _delay fI
; i -> R20,R21
; t -> R16,R17
.even
_delay::
rcall push_gset1
.dbline 9{
; #include <io8515.h>
; #define uchar unsigned char
; #define uint unsigned int
; const uchar DATA_7SEG[ ] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*LED 字形表*/
; uchar led[6] ;
; uint count;
; void delay(uint t)
; {
.dbline 11
; uint i;
; for (i=0;i<t;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 12
L3:
.dbline 11
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 11
cp R20,R16
cpc R21,R17
brlo L2
.dbline 13}
; ;
; }
L1:
rcall pop_gset1
ret
.dbsym r i 20 i
.dbsym r t 16 i
.dbfunc s init_disp _init_disp fI
.even
_init_disp::
.dbline 15{
; void init_disp(void)
; {
.dbline 16
; DDRB=0xff;
ldi R24,255
out 0x17,R24
.dbline 17
; DDRD=0x7f;
ldi R24,127
out 0x11,R24
.dbline 18
; PORTD|=0x80;
sbi 0x12,7
.dbline 19}
; }
L6:
ret
.dbfunc s disp _disp fI
; i -> R20
.even
_disp::
rcall push_gset1
.dbline 21{
; void disp(void)
; {
.dbline 23
; uchar i;
; for (i=0;i<6;i++)
clr R20
rjmp L11
L8:
.dbline 24
.dbline 25
ldi R16,1
mov R17,R20
rcall lsl8
mov R2,R16
com R2
out 0x12,R2
.dbline 26
ldi R24,<_led
ldi R25,>_led
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
ldi R24,<_DATA_7SEG
ldi R25,>_DATA_7SEG
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
out 0x18,R0
.dbline 27
ldi R16,232
ldi R17,3
rcall _delay
.dbline 28
L9:
.dbline 23
inc R20
L11:
.dbline 23
cpi R20,6
brlo L8
.dbline 29
; {
; PORTD=~(0x01<<i);
; PORTB=DATA_7SEG[led[i]];
; delay(1000);
; }
; PORTB=0x00;
clr R2
out 0x18,R2
.dbline 30
; PORTD=0xff;
ldi R24,255
out 0x12,R24
.dbline 31}
; }
L7:
rcall pop_gset1
ret
.dbsym r i 20 c
.dbfunc s be_pc0 _be_pc0 fI
; i -> R20,R21
.even
_be_pc0::
rcall push_gset1
.dbline 33{
; void be_pc0(void)
; {
.dbline 35
; uint i;
; DDRC|=0x01;
sbi 0x14,0
.dbline 36
; for (i=0;i<350;i++)
clr R20
clr R21
rjmp L16
L13:
.dbline 37
.dbline 38
ldi R24,1
in R2,0x15
eor R2,R24
out 0x15,R2
.dbline 39
ldi R16,94
ldi R17,1
rcall _delay
.dbline 40
L14:
.dbline 36
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 36
cpi R20,94
ldi R30,1
cpc R21,R30
brlo L13
.dbline 41}
; {
; PORTC^=0x01;
; delay(350);
; }
; }
L12:
rcall pop_gset1
ret
.dbsym r i 20 i
.dbfunc s conv _conv fI
.even
_conv::
.dbline 43{
; void conv(void)
; {
.dbline 44
; led[5] =0;
clr R2
sts _led+5,R2
.dbline 45
; led[4] =count/10000;
ldi R18,16
ldi R19,39
lds R17,_count+1
lds R16,_count
rcall div16u
sts _led+4,R16
.dbline 46
; led[3] =count/1000%10;
ldi R18,232
ldi R19,3
lds R17,_count+1
lds R16,_count
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
sts _led+3,R16
.dbline 47
; led[2] =count/100%10;
ldi R18,100
ldi R19,0
lds R17,_count+1
lds R16,_count
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
sts _led+2,R16
.dbline 48
; led[1] =count/10%10;
ldi R18,10
ldi R19,0
lds R17,_count+1
lds R16,_count
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
sts _led+1,R16
.dbline 49
; led[0] =count%10;
ldi R18,10
ldi R19,0
lds R17,_count+1
lds R16,_count
rcall mod16u
sts _led,R16
.dbline 50}
; }
L17:
ret
.dbfunc s main _main fI
.even
_main::
.dbline 52{
; void main(void)
; {
.dbline 53
; init_disp();
rcall _init_disp
.dbline 54
; count=0;
clr R2
clr R3
sts _count+1,R3
sts _count,R2
.dbline 55
; conv();
rcall _conv
.dbline 56
; for(;;)
.dbline 57
; {
rjmp L29
L28:
.dbline 59
rcall _disp
L29:
.dbline 58
; while((PIND&0x80)==0x80)
in R24,0x10
andi R24,128
cpi R24,128
breq L28
.dbline 60
; disp();
; be_pc0();
rcall _be_pc0
.dbline 61
; count++;
lds R25,_count+1
lds R24,_count
adiw R24,1
sts _count+1,R25
sts _count,R24
.dbline 62
; conv();
rcall _conv
rjmp L32
L31:
.dbline 64
rcall _disp
L32:
.dbline 63
; while((PIND&0x80)==0)
sbis 0x10,7
rjmp L31
.dbline 65
; disp();
; }
.dbline 56
.dbline 56
rjmp L29
X0:
L23:
ret
.dbline 57}
.area bss
.dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
_count::
.blkb 2
.dbsym s count _count i
_led::
.blkb 6
.dbsym s led _led Ac[6:6]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -