📄 tco1.lis
字号:
.module TCO1.C
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile F:\mega8\icc\TCO1\TCO1.C
000A .dbsym e Table _Table A[10:10]c
000A _Data::
000A .blkb 2
.area idata
000A 0000 .byte 0,0
.area data(ram, con, rel)
000C .dbfile F:\mega8\icc\TCO1\TCO1.C
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile F:\mega8\icc\TCO1\TCO1.C
000E .dbsym e Data _Data A[4:4]c
000E _CNT::
000E .blkb 2
.area idata
000E 0000 .word 0
.area data(ram, con, rel)
0010 .dbfile F:\mega8\icc\TCO1\TCO1.C
0010 .dbsym e CNT _CNT i
.area text(rom, con, rel)
0000 .dbfile F:\mega8\icc\TCO1\TCO1.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 14
0002 ; //******************************FileName: Counter.C*************************//
0002 ; //******************************ICCAVR V6.30编译***************************//
0002 ;
0002 ; #include <iom8v.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ;
0002 ; //数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
0002 ; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0002 ; uchar Data[4]={0,0,0,0}; //显示初始值:0 0 0 0
0002 ; uint CNT=0; //初始计数值:0
0002 ;
0002 ; void DelayMs(uint i) //Ms级延时,参数i为延时时间
0002 ; {uint j;
0002 .dbline 15
0002 ; for(;i!=0;i--)
0002 0AC0 rjmp L5
0004 L2:
0004 .dbline 16
0004 .dbline 16
0004 40E2 ldi R20,800
0006 53E0 ldi R21,3
0008 02C0 rjmp L9
000A L6:
000A .dbline 16
000A .dbline 16
000A .dbline 16
000A L7:
000A .dbline 16
000A 4150 subi R20,1
000C 5040 sbci R21,0
000E L9:
000E .dbline 16
000E 4030 cpi R20,0
0010 4507 cpc R20,R21
0012 D9F7 brne L6
0014 X0:
0014 .dbline 16
0014 L3:
0014 .dbline 15
0014 0150 subi R16,1
0016 1040 sbci R17,0
0018 L5:
0018 .dbline 15
0018 0030 cpi R16,0
001A 0107 cpc R16,R17
001C 99F7 brne L2
001E X1:
001E .dbline -2
001E L1:
001E 00D0 rcall pop_gset1
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r j 20 i
0022 .dbsym r i 16 i
0022 .dbend
0022 .dbfunc e Display _Display fV
0022 ; sel -> R20
0022 ; i -> R22
0022 ; p -> R10,R11
.even
0022 _Display::
0022 00D0 rcall push_gset3
0024 5801 movw R10,R16
0026 .dbline -1
0026 .dbline 20
0026 ; {for(j=800;j!=0;j--) {;}}
0026 ; }
0026 ;
0026 ; void Display(uchar *p) //动态显示函数,参数p为待显示的数组名
0026 ; {uchar i,sel=0x01;
0026 .dbline 20
0026 41E0 ldi R20,1
0028 .dbline 21
0028 ; for(i=0;i<4;i++)
0028 6627 clr R22
002A 14C0 rjmp L14
002C L11:
002C .dbline 22
002C .dbline 22
002C 242E mov R2,R20
002E 2094 com R2
0030 25BA out 0x15,R2
0032 .dbline 23
0032 E62F mov R30,R22
0034 FF27 clr R31
0036 EA0D add R30,R10
0038 FB1D adc R31,R11
003A E081 ldd R30,z+0
003C FF27 clr R31
003E 80E0 ldi R24,<_Table
0040 90E0 ldi R25,>_Table
0042 E80F add R30,R24
0044 F91F adc R31,R25
0046 2080 ldd R2,z+0
0048 22BA out 0x12,R2
004A .dbline 24
004A 02E0 ldi R16,2
004C 10E0 ldi R17,0
004E D8DF rcall _DelayMs
0050 .dbline 25
0050 440F lsl R20
0052 .dbline 26
0052 L12:
0052 .dbline 21
0052 6395 inc R22
0054 L14:
0054 .dbline 21
0054 6430 cpi R22,4
0056 50F3 brlo L11
0058 .dbline -2
0058 L10:
0058 00D0 rcall pop_gset3
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r sel 20 c
005C .dbsym r i 22 c
005C .dbsym r p 10 pc
005C .dbend
005C .dbfunc e Process _Process fV
005C ; p -> R22,R23
005C ; i -> R20
.even
005C _Process::
005C 00D0 rcall push_gset2
005E B901 movw R22,R18
0060 402F mov R20,R16
0062 .dbline -1
0062 .dbline 32
0062 ; {PORTC=~sel; //选通最右边的数码管
0062 ; PORTD=Table[p[i]]; //送字型码
0062 ; DelayMs(2); //显示延时
0062 ; sel=sel<<1; //移位以显示前一位
0062 ; }
0062 ; }
0062 ;
0062 ; //计数值处理函数。参数i:计数值;参数p:处理数据存放的数组名//
0062 ; //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
0062 ; void Process(uchar i,uchar *p)
0062 ; {p[0]=i/1000;
0062 .dbline 32
0062 28EE ldi R18,1000
0064 33E0 ldi R19,3
0066 042F mov R16,R20
0068 1127 clr R17
006A 00D0 rcall div16s
006C FB01 movw R30,R22
006E 0083 std z+0,R16
0070 .dbline 33
0070 ; i=i%1000;
0070 28EE ldi R18,1000
0072 33E0 ldi R19,3
0074 042F mov R16,R20
0076 1127 clr R17
0078 00D0 rcall mod16s
007A 402F mov R20,R16
007C .dbline 34
007C ; p[1]=i/100;
007C 14E6 ldi R17,100
007E 00D0 rcall div8u
0080 FB01 movw R30,R22
0082 0183 std z+1,R16
0084 .dbline 35
0084 ; i=i%100;
0084 14E6 ldi R17,100
0086 042F mov R16,R20
0088 00D0 rcall mod8u
008A 402F mov R20,R16
008C .dbline 36
008C ; p[2]=i/10;
008C 1AE0 ldi R17,10
008E 00D0 rcall div8u
0090 FB01 movw R30,R22
0092 0283 std z+2,R16
0094 .dbline 37
0094 ; i=i%10;
0094 1AE0 ldi R17,10
0096 042F mov R16,R20
0098 00D0 rcall mod8u
009A 402F mov R20,R16
009C .dbline 38
009C ; p[3]=i;
009C FB01 movw R30,R22
009E 4383 std z+3,R20
00A0 .dbline -2
00A0 L15:
00A0 00D0 rcall pop_gset2
00A2 .dbline 0 ; func end
00A2 0895 ret
00A4 .dbsym r p 22 pc
00A4 .dbsym r i 20 c
00A4 .dbend
00A4 .dbfunc e Init_IO _Init_IO fV
.even
00A4 _Init_IO::
00A4 .dbline -1
00A4 .dbline 42
00A4 ; }
00A4 ;
00A4 ; void Init_IO(void) //初始化I/O口
00A4 ; {DDRD=0xff; //设置A口为推挽1输出
00A4 .dbline 42
00A4 8FEF ldi R24,255
00A6 81BB out 0x11,R24
00A8 .dbline 43
00A8 ; PORTD=0xff;
00A8 82BB out 0x12,R24
00AA .dbline 44
00AA ; DDRB=0x00; //设置B口为不带上拉电阻输入
00AA 2224 clr R2
00AC 27BA out 0x17,R2
00AE .dbline 45
00AE ; PORTB=0x00;
00AE 28BA out 0x18,R2
00B0 .dbline 46
00B0 ; DDRC=0xff; //设置C口为推挽1输出;
00B0 84BB out 0x14,R24
00B2 .dbline 47
00B2 ; PORTC=0xff;
00B2 85BB out 0x15,R24
00B4 .dbline -2
00B4 L16:
00B4 .dbline 0 ; func end
00B4 0895 ret
00B6 .dbend
00B6 .dbfunc e main _main fV
00B6 ; Load -> R20
.even
00B6 _main::
00B6 .dbline -1
00B6 .dbline 51
00B6 ; }
00B6 ;
00B6 ; void main(void)
00B6 ; {uchar Load;
00B6 .dbline 52
00B6 ; Init_IO(); //初始化I/O口
00B6 F6DF rcall _Init_IO
00B8 .dbline 53
00B8 ; PORTD=0xff; //点亮以测试所有的数码管
00B8 8FEF ldi R24,255
00BA 82BB out 0x12,R24
00BC .dbline 54
00BC ; PORTC=0x00;
00BC 2224 clr R2
00BE 25BA out 0x15,R2
00C0 .dbline 55
00C0 ; DelayMs(300); //延时
00C0 0CE2 ldi R16,300
00C2 11E0 ldi R17,1
00C4 9DDF rcall _DelayMs
00C6 .dbline 56
00C6 ; PORTC=0xff; //熄灭所有的数码管
00C6 8FEF ldi R24,255
00C8 85BB out 0x15,R24
00CA .dbline 57
00CA ; TCCR0=0x05; //T/C0工作于计数方式,下降沿计数
00CA 85E0 ldi R24,5
00CC 83BF out 0x33,R24
00CE .dbline 58
00CE ; TCNT0=CNT; //计数初始值0
00CE 20900E00 lds R2,_CNT
00D2 30900F00 lds R3,_CNT+1
00D6 22BE out 0x32,R2
00D8 08C0 rjmp L19
00DA L18:
00DA .dbline 60
00DA .dbline 60
00DA 42B7 in R20,0x32
00DC .dbline 61
00DC 20E0 ldi R18,<_Data
00DE 30E0 ldi R19,>_Data
00E0 042F mov R16,R20
00E2 BCDF rcall _Process
00E4 .dbline 62
00E4 00E0 ldi R16,<_Data
00E6 10E0 ldi R17,>_Data
00E8 9CDF rcall _Display
00EA .dbline 63
00EA L19:
00EA .dbline 59
00EA F7CF rjmp L18
00EC X2:
00EC .dbline -2
00EC L17:
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbsym r Load 20 c
00EE .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -