📄 addcounterdisplay.lst
字号:
.module AddCounterDisplay.c
.area lit
000D _DATA_7SEG::
000D 063F .byte 63,6
000E 4F5B .byte 91,'O
000F 6D66 .byte 'f,'m
0010 077D .byte 125,7
0011 6F7F .byte 127,'o
0012 7C77 .byte 'w,124
0013 5E39 .byte 57,94
0014 7179 .byte 'y,'q
0015 .dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
0015 .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
0032 _delay::
0032 D0C1 rcall push_gset1
0033 .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)
; {
0033 .dbline 11
; uint i;
; for (i=0;i<t;i++)
0033 2744 clr R20
0034 2755 clr R21
0035 C002 rjmp L5
0036 L2:
0036 .dbline 12
0036 L3:
0036 .dbline 11
0036 5F4F subi R20,255 ; offset = 1
0037 4F5F sbci R21,255
0038 L5:
0038 .dbline 11
0038 1740 cp R20,R16
0039 0751 cpc R21,R17
003A F3D8 brlo L2
003B .dbline 13}
; ;
; }
003B L1:
003B D0BB rcall pop_gset1
003C 9508 ret
003D .dbsym r i 20 i
003D .dbsym r t 16 i
003D .dbfunc s init_disp _init_disp fI
.even
003D _init_disp::
003D .dbline 15{
; void init_disp(void)
; {
003D .dbline 16
; DDRB=0xff;
003D EF8F ldi R24,255
003E BB87 out 0x17,R24
003F .dbline 17
; DDRD=0x7f;
003F E78F ldi R24,127
0040 BB81 out 0x11,R24
0041 .dbline 18
; PORTD|=0x80;
0041 9A97 sbi 0x12,7
0042 .dbline 19}
; }
0042 L6:
0042 9508 ret
0043 .dbfunc s disp _disp fI
; i -> R20
.even
0043 _disp::
0043 D0B0 rcall push_gset1
0044 .dbline 21{
; void disp(void)
; {
0044 .dbline 23
; uchar i;
; for (i=0;i<6;i++)
0044 2744 clr R20
0045 C01A rjmp L11
0046 L8:
0046 .dbline 24
0046 .dbline 25
0046 E001 ldi R16,1
0047 2F14 mov R17,R20
0048 D0C2 rcall lsl8
0049 2E20 mov R2,R16
004A 9420 com R2
004B BA22 out 0x12,R2
004C .dbline 26
004C E682 ldi R24,<_led
004D E090 ldi R25,>_led
004E 2FE4 mov R30,R20
004F 27FF clr R31
0050 0FE8 add R30,R24
0051 1FF9 adc R31,R25
0052 8020 ldd R2,z+0
0053 2433 clr R3
0054 E18A ldi R24,<_DATA_7SEG
0055 E090 ldi R25,>_DATA_7SEG
0056 0E28 add R2,R24
0057 1E39 adc R3,R25
0058 2DE2 mov R30,R2
0059 2DF3 mov R31,R3
005A 95C8 lpm
005B BA08 out 0x18,R0
005C .dbline 27
005C EE08 ldi R16,232
005D E013 ldi R17,3
005E DFD3 rcall _delay
005F .dbline 28
005F L9:
005F .dbline 23
005F 9543 inc R20
0060 L11:
0060 .dbline 23
0060 3046 cpi R20,6
0061 F320 brlo L8
0062 .dbline 29
; {
; PORTD=~(0x01<<i);
; PORTB=DATA_7SEG[led[i]];
; delay(1000);
; }
; PORTB=0x00;
0062 2422 clr R2
0063 BA28 out 0x18,R2
0064 .dbline 30
; PORTD=0xff;
0064 EF8F ldi R24,255
0065 BB82 out 0x12,R24
0066 .dbline 31}
; }
0066 L7:
0066 D090 rcall pop_gset1
0067 9508 ret
0068 .dbsym r i 20 c
0068 .dbfunc s be_pc0 _be_pc0 fI
; i -> R20,R21
.even
0068 _be_pc0::
0068 D08B rcall push_gset1
0069 .dbline 33{
; void be_pc0(void)
; {
0069 .dbline 35
; uint i;
; DDRC|=0x01;
0069 9AA0 sbi 0x14,0
006A .dbline 36
; for (i=0;i<350;i++)
006A 2744 clr R20
006B 2755 clr R21
006C C009 rjmp L16
006D L13:
006D .dbline 37
006D .dbline 38
006D E081 ldi R24,1
006E B225 in R2,0x15
006F 2628 eor R2,R24
0070 BA25 out 0x15,R2
0071 .dbline 39
0071 E50E ldi R16,94
0072 E011 ldi R17,1
0073 DFBE rcall _delay
0074 .dbline 40
0074 L14:
0074 .dbline 36
0074 5F4F subi R20,255 ; offset = 1
0075 4F5F sbci R21,255
0076 L16:
0076 .dbline 36
0076 354E cpi R20,94
0077 E0E1 ldi R30,1
0078 075E cpc R21,R30
0079 F398 brlo L13
007A .dbline 41}
; {
; PORTC^=0x01;
; delay(350);
; }
; }
007A L12:
007A D07C rcall pop_gset1
007B 9508 ret
007C .dbsym r i 20 i
007C .dbfunc s conv _conv fI
.even
007C _conv::
007C .dbline 43{
; void conv(void)
; {
007C .dbline 44
; led[5] =0;
007C 2422 clr R2
007D 92200067 sts _led+5,R2
007F .dbline 45
; led[4] =count/10000;
007F E120 ldi R18,16
0080 E237 ldi R19,39
0081 91100061 lds R17,_count+1
0083 91000060 lds R16,_count
0085 D051 rcall div16u
0086 93000066 sts _led+4,R16
0088 .dbline 46
; led[3] =count/1000%10;
0088 EE28 ldi R18,232
0089 E033 ldi R19,3
008A 91100061 lds R17,_count+1
008C 91000060 lds R16,_count
008E D048 rcall div16u
008F E02A ldi R18,10
0090 E030 ldi R19,0
0091 D043 rcall mod16u
0092 93000065 sts _led+3,R16
0094 .dbline 47
; led[2] =count/100%10;
0094 E624 ldi R18,100
0095 E030 ldi R19,0
0096 91100061 lds R17,_count+1
0098 91000060 lds R16,_count
009A D03C rcall div16u
009B E02A ldi R18,10
009C E030 ldi R19,0
009D D037 rcall mod16u
009E 93000064 sts _led+2,R16
00A0 .dbline 48
; led[1] =count/10%10;
00A0 E02A ldi R18,10
00A1 E030 ldi R19,0
00A2 91100061 lds R17,_count+1
00A4 91000060 lds R16,_count
00A6 D030 rcall div16u
00A7 E02A ldi R18,10
00A8 E030 ldi R19,0
00A9 D02B rcall mod16u
00AA 93000063 sts _led+1,R16
00AC .dbline 49
; led[0] =count%10;
00AC E02A ldi R18,10
00AD E030 ldi R19,0
00AE 91100061 lds R17,_count+1
00B0 91000060 lds R16,_count
00B2 D022 rcall mod16u
00B3 93000062 sts _led,R16
00B5 .dbline 50}
; }
00B5 L17:
00B5 9508 ret
00B6 .dbfunc s main _main fI
.even
00B6 _main::
00B6 .dbline 52{
; void main(void)
; {
00B6 .dbline 53
; init_disp();
00B6 DF86 rcall _init_disp
00B7 .dbline 54
; count=0;
00B7 2422 clr R2
00B8 2433 clr R3
00B9 92300061 sts _count+1,R3
00BB 92200060 sts _count,R2
00BD .dbline 55
; conv();
00BD DFBE rcall _conv
00BE .dbline 56
; for(;;)
00BE .dbline 57
; {
00BE C001 rjmp L29
00BF L28:
00BF .dbline 59
00BF DF83 rcall _disp
00C0 L29:
00C0 .dbline 58
; while((PIND&0x80)==0x80)
00C0 B380 in R24,0x10
00C1 7880 andi R24,128
00C2 3880 cpi R24,128
00C3 F3D9 breq L28
00C4 .dbline 60
; disp();
; be_pc0();
00C4 DFA3 rcall _be_pc0
00C5 .dbline 61
; count++;
00C5 91900061 lds R25,_count+1
00C7 91800060 lds R24,_count
00C9 9601 adiw R24,1
00CA 93900061 sts _count+1,R25
00CC 93800060 sts _count,R24
00CE .dbline 62
; conv();
00CE DFAD rcall _conv
00CF C001 rjmp L32
00D0 L31:
00D0 .dbline 64
00D0 DF72 rcall _disp
00D1 L32:
00D1 .dbline 63
; while((PIND&0x80)==0)
00D1 9B87 sbis 0x10,7
00D2 CFFD rjmp L31
00D3 .dbline 65
; disp();
; }
00D3 .dbline 56
00D3 .dbline 56
00D3 CFEC rjmp L29
00D4 X0:
00D4 L23:
00D4 9508 ret
00D5 .dbline 57}
.area bss
--- 0000 .dbfile E:\grc\licc\例子10.3.8\AddCounterDisplay.c
0030 _count::
0030 .blkb 2
0031 .dbsym s count _count i
0031 _led::
0031 .blkb 6
0034 .dbsym s led _led Ac[6:6]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -