📄 addcounterdisplay.lis
字号:
.module AddCounterDisplay.c
.area lit
0000 _DATA_7SEG::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
0010 .dbsym s DATA_7SEG _DATA_7SEG Ac[16:16]
.area text
0000 .dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
0000 .dbfunc s delay _delay fI
; i -> R20,R21
; t -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_gset1
0002 .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)
; {
0002 .dbline 11
; uint i;
; for (i=0;i<t;i++)
0002 4427 clr R20
0004 5527 clr R21
0006 02C0 rjmp L5
0008 L2:
0008 .dbline 12
0008 L3:
0008 .dbline 11
0008 4F5F subi R20,255 ; offset = 1
000A 5F4F sbci R21,255
000C L5:
000C .dbline 11
000C 4017 cp R20,R16
000E 5107 cpc R21,R17
0010 D8F3 brlo L2
0012 .dbline 13}
; ;
; }
0012 L1:
0012 00D0 rcall pop_gset1
0014 0895 ret
0016 .dbsym r i 20 i
0016 .dbsym r t 16 i
0016 .dbfunc s init_disp _init_disp fI
.even
0016 _init_disp::
0016 .dbline 15{
; void init_disp(void)
; {
0016 .dbline 16
; DDRB=0xff;
0016 8FEF ldi R24,255
0018 87BB out 0x17,R24
001A .dbline 17
; DDRD=0x7f;
001A 8FE7 ldi R24,127
001C 81BB out 0x11,R24
001E .dbline 18
; PORTD|=0x80;
001E 979A sbi 0x12,7
0020 .dbline 19}
; }
0020 L6:
0020 0895 ret
0022 .dbfunc s disp _disp fI
; i -> R20
.even
0022 _disp::
0022 00D0 rcall push_gset1
0024 .dbline 21{
; void disp(void)
; {
0024 .dbline 23
; uchar i;
; for (i=0;i<6;i++)
0024 4427 clr R20
0026 1AC0 rjmp L11
0028 L8:
0028 .dbline 24
0028 .dbline 25
0028 01E0 ldi R16,1
002A 142F mov R17,R20
002C 00D0 rcall lsl8
002E 202E mov R2,R16
0030 2094 com R2
0032 22BA out 0x12,R2
0034 .dbline 26
0034 80E0 ldi R24,<_led
0036 90E0 ldi R25,>_led
0038 E42F mov R30,R20
003A FF27 clr R31
003C E80F add R30,R24
003E F91F adc R31,R25
0040 2080 ldd R2,z+0
0042 3324 clr R3
0044 80E0 ldi R24,<_DATA_7SEG
0046 90E0 ldi R25,>_DATA_7SEG
0048 280E add R2,R24
004A 391E adc R3,R25
004C E22D mov R30,R2
004E F32D mov R31,R3
0050 C895 lpm
0052 08BA out 0x18,R0
0054 .dbline 27
0054 08EE ldi R16,232
0056 13E0 ldi R17,3
0058 D3DF rcall _delay
005A .dbline 28
005A L9:
005A .dbline 23
005A 4395 inc R20
005C L11:
005C .dbline 23
005C 4630 cpi R20,6
005E 20F3 brlo L8
0060 .dbline 29
; {
; PORTD=~(0x01<<i);
; PORTB=DATA_7SEG[led[i]];
; delay(1000);
; }
; PORTB=0x00;
0060 2224 clr R2
0062 28BA out 0x18,R2
0064 .dbline 30
; PORTD=0xff;
0064 8FEF ldi R24,255
0066 82BB out 0x12,R24
0068 .dbline 31}
; }
0068 L7:
0068 00D0 rcall pop_gset1
006A 0895 ret
006C .dbsym r i 20 c
006C .dbfunc s be_pc0 _be_pc0 fI
; i -> R20,R21
.even
006C _be_pc0::
006C 00D0 rcall push_gset1
006E .dbline 33{
; void be_pc0(void)
; {
006E .dbline 35
; uint i;
; DDRC|=0x01;
006E A09A sbi 0x14,0
0070 .dbline 36
; for (i=0;i<350;i++)
0070 4427 clr R20
0072 5527 clr R21
0074 09C0 rjmp L16
0076 L13:
0076 .dbline 37
0076 .dbline 38
0076 81E0 ldi R24,1
0078 25B2 in R2,0x15
007A 2826 eor R2,R24
007C 25BA out 0x15,R2
007E .dbline 39
007E 0EE5 ldi R16,94
0080 11E0 ldi R17,1
0082 BEDF rcall _delay
0084 .dbline 40
0084 L14:
0084 .dbline 36
0084 4F5F subi R20,255 ; offset = 1
0086 5F4F sbci R21,255
0088 L16:
0088 .dbline 36
0088 4E35 cpi R20,94
008A E1E0 ldi R30,1
008C 5E07 cpc R21,R30
008E 98F3 brlo L13
0090 .dbline 41}
; {
; PORTC^=0x01;
; delay(350);
; }
; }
0090 L12:
0090 00D0 rcall pop_gset1
0092 0895 ret
0094 .dbsym r i 20 i
0094 .dbfunc s conv _conv fI
.even
0094 _conv::
0094 .dbline 43{
; void conv(void)
; {
0094 .dbline 44
; led[5] =0;
0094 2224 clr R2
0096 20920700 sts _led+5,R2
009A .dbline 45
; led[4] =count/10000;
009A 20E1 ldi R18,16
009C 37E2 ldi R19,39
009E 10910100 lds R17,_count+1
00A2 00910000 lds R16,_count
00A6 00D0 rcall div16u
00A8 00930600 sts _led+4,R16
00AC .dbline 46
; led[3] =count/1000%10;
00AC 28EE ldi R18,232
00AE 33E0 ldi R19,3
00B0 10910100 lds R17,_count+1
00B4 00910000 lds R16,_count
00B8 00D0 rcall div16u
00BA 2AE0 ldi R18,10
00BC 30E0 ldi R19,0
00BE 00D0 rcall mod16u
00C0 00930500 sts _led+3,R16
00C4 .dbline 47
; led[2] =count/100%10;
00C4 24E6 ldi R18,100
00C6 30E0 ldi R19,0
00C8 10910100 lds R17,_count+1
00CC 00910000 lds R16,_count
00D0 00D0 rcall div16u
00D2 2AE0 ldi R18,10
00D4 30E0 ldi R19,0
00D6 00D0 rcall mod16u
00D8 00930400 sts _led+2,R16
00DC .dbline 48
; led[1] =count/10%10;
00DC 2AE0 ldi R18,10
00DE 30E0 ldi R19,0
00E0 10910100 lds R17,_count+1
00E4 00910000 lds R16,_count
00E8 00D0 rcall div16u
00EA 2AE0 ldi R18,10
00EC 30E0 ldi R19,0
00EE 00D0 rcall mod16u
00F0 00930300 sts _led+1,R16
00F4 .dbline 49
; led[0] =count%10;
00F4 2AE0 ldi R18,10
00F6 30E0 ldi R19,0
00F8 10910100 lds R17,_count+1
00FC 00910000 lds R16,_count
0100 00D0 rcall mod16u
0102 00930200 sts _led,R16
0106 .dbline 50}
; }
0106 L17:
0106 0895 ret
0108 .dbfunc s main _main fI
.even
0108 _main::
0108 .dbline 52{
; void main(void)
; {
0108 .dbline 53
; init_disp();
0108 86DF rcall _init_disp
010A .dbline 54
; count=0;
010A 2224 clr R2
010C 3324 clr R3
010E 30920100 sts _count+1,R3
0112 20920000 sts _count,R2
0116 .dbline 55
; conv();
0116 BEDF rcall _conv
0118 .dbline 56
; for(;;)
0118 .dbline 57
; {
0118 01C0 rjmp L29
011A L28:
011A .dbline 59
011A 83DF rcall _disp
011C L29:
011C .dbline 58
; while((PIND&0x80)==0x80)
011C 80B3 in R24,0x10
011E 8078 andi R24,128
0120 8038 cpi R24,128
0122 D9F3 breq L28
0124 .dbline 60
; disp();
; be_pc0();
0124 A3DF rcall _be_pc0
0126 .dbline 61
; count++;
0126 90910100 lds R25,_count+1
012A 80910000 lds R24,_count
012E 0196 adiw R24,1
0130 90930100 sts _count+1,R25
0134 80930000 sts _count,R24
0138 .dbline 62
; conv();
0138 ADDF rcall _conv
013A 01C0 rjmp L32
013C L31:
013C .dbline 64
013C 72DF rcall _disp
013E L32:
013E .dbline 63
; while((PIND&0x80)==0)
013E 879B sbis 0x10,7
0140 FDCF rjmp L31
0142 .dbline 65
; disp();
; }
0142 .dbline 56
0142 .dbline 56
0142 ECCF rjmp L29
0144 X0:
0144 L23:
0144 0895 ret
0146 .dbline 57}
.area bss
0000 .dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
0000 _count::
0000 .blkb 2
0002 .dbsym s count _count i
0002 _led::
0002 .blkb 6
0008 .dbsym s led _led Ac[6:6]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -