📄 m16_t0_counter.lis
字号:
.module M16_T0_Counter.c
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 C0F9 .byte 192,249
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 A4B0 .byte 164,176
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 9992 .byte 153,146
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 82F8 .byte 130,248
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 8090 .byte 128,144
.area data(ram, con, rel)
000A .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
000A .dbsym e Table _Table A[10:10]c
000A _Data::
000A .blkb 2
.area idata
000A 0000 .word 0
.area data(ram, con, rel)
000C .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
000C .blkb 2
.area idata
000C 0000 .word 0
.area data(ram, con, rel)
000E .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
000E .blkb 2
.area idata
000E 0000 .word 0
.area data(ram, con, rel)
0010 .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
0010 .blkb 2
.area idata
0010 0000 .word 0
.area data(ram, con, rel)
0012 .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
0012 .dbsym e Data _Data A[8:4]i
0012 _CNT::
0012 .blkb 2
.area idata
0012 0000 .word 0
.area data(ram, con, rel)
0014 .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
0014 .dbsym e CNT _CNT i
.area text(rom, con, rel)
0000 .dbfile F:\myavr\temp\M16_T0_Counter\M16_T0_Counter.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20
0000 ; i -> R16
.even
0000 _DelayMs::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 11
0004 ; #include <iom16v.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; //segment code 0123456789
0004 ; uchar Table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
0004 ; uint Data[4]={0,0,0,0};
0004 ; uint CNT=0;
0004 ;
0004 ; void DelayMs(uchar i)
0004 ; {
0004 .dbline 13
0004 ; uchar j;
0004 ; for(;i>0;i--)
0004 06C0 xjmp L5
0006 L2:
0006 .dbline 14
0006 ; {
0006 .dbline 15
0006 4427 clr R20
0008 01C0 xjmp L9
000A L6:
000A .dbline 15
000A L7:
000A .dbline 15
000A 4395 inc R20
000C L9:
000C .dbline 15
000C 4A3F cpi R20,250
000E E8F3 brlo L6
0010 .dbline 16
0010 L3:
0010 .dbline 13
0010 0A95 dec R16
0012 L5:
0012 .dbline 13
0012 2224 clr R2
0014 2016 cp R2,R16
0016 B8F3 brlo L2
0018 .dbline -2
0018 .dbline 17
0018 ; for(j=0;j<250;j++);
0018 ; }
0018 ; }
0018 L1:
0018 0E940000 xcall pop_gset1
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r j 20 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e Display _Display fV
001E ; sel -> R20
001E ; i -> R22
001E ; p -> R10,R11
.even
001E _Display::
001E 0E940000 xcall push_gset3
0022 5801 movw R10,R16
0024 .dbline -1
0024 .dbline 20
0024 ;
0024 ; void Display(uint *p)
0024 ; {
0024 .dbline 21
0024 ; uchar i,sel=0x01;
0024 41E0 ldi R20,1
0026 .dbline 22
0026 ; for(i=0;i<4;i++)
0026 6627 clr R22
0028 13C0 xjmp L14
002A L11:
002A .dbline 23
002A .dbline 24
002A 45BB out 0x15,R20
002C .dbline 25
002C 82E0 ldi R24,2
002E 869F mul R24,R22
0030 F001 movw R30,R0
0032 EA0D add R30,R10
0034 FB1D adc R31,R11
0036 2080 ldd R2,z+0
0038 3180 ldd R3,z+1
003A 80E0 ldi R24,<_Table
003C 90E0 ldi R25,>_Table
003E F101 movw R30,R2
0040 E80F add R30,R24
0042 F91F adc R31,R25
0044 2080 ldd R2,z+0
0046 2BBA out 0x1b,R2
0048 .dbline 26
0048 02E0 ldi R16,2
004A DADF xcall _DelayMs
004C .dbline 27
004C 440F lsl R20
004E .dbline 28
004E L12:
004E .dbline 22
004E 6395 inc R22
0050 L14:
0050 .dbline 22
0050 6430 cpi R22,4
0052 58F3 brlo L11
0054 .dbline -2
0054 .dbline 29
0054 ; {
0054 ; PORTC=sel;
0054 ; PORTA=Table[p[i]];
0054 ; DelayMs(2);
0054 ; sel=sel<<1;
0054 ; }
0054 ; }
0054 L10:
0054 0E940000 xcall pop_gset3
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r sel 20 c
005A .dbsym r i 22 c
005A .dbsym r p 10 pi
005A .dbend
005A .dbfunc e Process _Process fV
005A ; p -> R22,R23
005A ; i -> R20,R21
.even
005A _Process::
005A 0E940000 xcall push_gset2
005E B901 movw R22,R18
0060 A801 movw R20,R16
0062 .dbline -1
0062 .dbline 32
0062 ;
0062 ; void Process(uint i,uint *p)//由于T0是8位定时/计数器,最大计数值为255
0062 ; { // 所以下面的p[0]用不着
0062 .dbline 33
0062 ; p[0]=i/1000;
0062 28EE ldi R18,1000
0064 33E0 ldi R19,3
0066 8A01 movw R16,R20
0068 0E940000 xcall div16u
006C FB01 movw R30,R22
006E 1183 std z+1,R17
0070 0083 std z+0,R16
0072 .dbline 34
0072 ; i=i%1000;
0072 .dbline 35
0072 ; p[1]=i/100;
0072 28EE ldi R18,1000
0074 33E0 ldi R19,3
0076 8A01 movw R16,R20
0078 0E940000 xcall mod16u
007C A801 movw R20,R16
007E 24E6 ldi R18,100
0080 30E0 ldi R19,0
0082 0E940000 xcall div16u
0086 FB01 movw R30,R22
0088 1383 std z+3,R17
008A 0283 std z+2,R16
008C .dbline 36
008C ; i=i%100;
008C .dbline 37
008C ; p[2]=i/10;
008C 24E6 ldi R18,100
008E 30E0 ldi R19,0
0090 8A01 movw R16,R20
0092 0E940000 xcall mod16u
0096 A801 movw R20,R16
0098 2AE0 ldi R18,10
009A 30E0 ldi R19,0
009C 0E940000 xcall div16u
00A0 FB01 movw R30,R22
00A2 1583 std z+5,R17
00A4 0483 std z+4,R16
00A6 .dbline 38
00A6 ; i=i%10;
00A6 .dbline 39
00A6 ; p[3]=i;
00A6 2AE0 ldi R18,10
00A8 30E0 ldi R19,0
00AA 8A01 movw R16,R20
00AC 0E940000 xcall mod16u
00B0 A801 movw R20,R16
00B2 FB01 movw R30,R22
00B4 5783 std z+7,R21
00B6 4683 std z+6,R20
00B8 .dbline -2
00B8 .dbline 40
00B8 ; }
00B8 L15:
00B8 0E940000 xcall pop_gset2
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbsym r p 22 pi
00BE .dbsym r i 20 i
00BE .dbend
00BE .dbfunc e Init_IO _Init_IO fV
.even
00BE _Init_IO::
00BE .dbline -1
00BE .dbline 43
00BE ;
00BE ; void Init_IO(void)
00BE ; {
00BE .dbline 44
00BE ; DDRA=0xff;
00BE 8FEF ldi R24,255
00C0 8ABB out 0x1a,R24
00C2 .dbline 45
00C2 ; PORTA=0xff;
00C2 8BBB out 0x1b,R24
00C4 .dbline 46
00C4 ; DDRC=0xff;
00C4 84BB out 0x14,R24
00C6 .dbline 47
00C6 ; PORTC=0xff;
00C6 85BB out 0x15,R24
00C8 .dbline 48
00C8 ; DDRB=0x00;
00C8 2224 clr R2
00CA 27BA out 0x17,R2
00CC .dbline 49
00CC ; PORTB=0x00;
00CC 28BA out 0x18,R2
00CE .dbline -2
00CE .dbline 50
00CE ; }
00CE L16:
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbend
00D0 .dbfunc e main _main fV
00D0 ; load -> R20,R21
.even
00D0 _main::
00D0 .dbline -1
00D0 .dbline 53
00D0 ;
00D0 ; void main(void)
00D0 ; {
00D0 .dbline 55
00D0 ; uint load;
00D0 ; Init_IO();
00D0 F6DF xcall _Init_IO
00D2 .dbline 56
00D2 ; TCCR0=0x06;//T0工作在计数方式,T0是8位,所以最大计数值为255;
00D2 86E0 ldi R24,6
00D4 83BF out 0x33,R24
00D6 09C0 xjmp L19
00D8 L18:
00D8 .dbline 61
00D8 .dbline 62
00D8 .dbline 64
00D8 42B7 in R20,0x32
00DA 5527 clr R21
00DC 20E0 ldi R18,<_Data
00DE 30E0 ldi R19,>_Data
00E0 8A01 movw R16,R20
00E2 BBDF xcall _Process
00E4 .dbline 65
00E4 00E0 ldi R16,<_Data
00E6 10E0 ldi R17,>_Data
00E8 9ADF xcall _Display
00EA .dbline 66
00EA L19:
00EA .dbline 60
00EA F6CF xjmp L18
00EC X0:
00EC .dbline -2
00EC .dbline 67
00EC ; //TCCR1B=0x07;//T1工作在计数方式,T1是16位,所以最大计数值为65535;
00EC ; //TCNT1H=CNT;
00EC ; //TCNT1L=CNT;
00EC ; while(1)
00EC ; {
00EC ; load=TCNT0;//T0工作在8位计数方式
00EC ; //load=(TCNT1H<<8)+TCNT1L;//T1工作在16位计数方式
00EC ; Process(load,Data);
00EC ; Display(Data);
00EC ; }
00EC ; }
00EC L17:
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbsym r load 20 i
00EE .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -