📄 counter.lis
字号:
.module 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\mydesign\seg_time\Counter.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:\myavr\mydesign\seg_time\Counter.C
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile F:\myavr\mydesign\seg_time\Counter.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:\myavr\mydesign\seg_time\Counter.C
0010 .dbsym e CNT _CNT i
.area text(rom, con, rel)
0000 .dbfile F:\myavr\mydesign\seg_time\Counter.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 17
0002 ;
0002 ; //******************************FileName: Counter.C**************************//
0002 ; //******************************ICCAVR V6.30编译*****************************//
0002 ;
0002 ; #include <io8535v.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]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
0002 ; uchar Data[4]={0,0,0,0}; //显示初始值:0 0 0 0
0002 ; uint CNT=0; //初始计数值:0
0002 ; uchar Key_Up; //加计数按键标志
0002 ; uchar Key_Down; //减计数按键标志
0002 ;
0002 ; void DelayMs(uchar i) //Ms级延时,参数i为延时时间
0002 ; {uint j;
0002 .dbline 18
0002 ; for(;i!=0;i--)
0002 0AC0 rjmp L5
0004 L2:
0004 .dbline 19
0004 .dbline 19
0004 4427 clr R20
0006 5527 clr R21
0008 02C0 rjmp L9
000A L6:
000A .dbline 19
000A L7:
000A .dbline 19
000A 4F5F subi R20,255 ; offset = 1
000C 5F4F sbci R21,255
000E L9:
000E .dbline 19
000E 4A3F cpi R20,250
0010 E0E0 ldi R30,0
0012 5E07 cpc R21,R30
0014 D0F3 brlo L6
0016 .dbline 19
0016 L3:
0016 .dbline 18
0016 0A95 dec R16
0018 L5:
0018 .dbline 18
0018 0023 tst R16
001A A1F7 brne L2
001C .dbline -2
001C .dbline 20
001C ; {for(j=0;j<250;j++);}
001C ; }
001C L1:
001C 00D0 rcall pop_gset1
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r j 20 i
0020 .dbsym r i 16 c
0020 .dbend
0020 .dbfunc e Display _Display fV
0020 ; sel -> R20
0020 ; i -> R22
0020 ; p -> R10,R11
.even
0020 _Display::
0020 00D0 rcall push_gset3
0022 A02E mov R10,R16
0024 B12E mov R11,R17
0026 .dbline -1
0026 .dbline 23
0026 ;
0026 ; void Display(uchar *p) //动态显示函数,参数p为待显示的数组名
0026 ; {uchar i,sel=0x01;
0026 .dbline 23
0026 41E0 ldi R20,1
0028 .dbline 24
0028 ; for(i=0;i<4;i++)
0028 6627 clr R22
002A 11C0 rjmp L14
002C L11:
002C .dbline 25
002C .dbline 25
002C 45BB out 0x15,R20
002E .dbline 26
002E E62F mov R30,R22
0030 FF27 clr R31
0032 EA0D add R30,R10
0034 FB1D adc R31,R11
0036 E081 ldd R30,z+0
0038 FF27 clr R31
003A 80E0 ldi R24,<_Table
003C 90E0 ldi R25,>_Table
003E E80F add R30,R24
0040 F91F adc R31,R25
0042 2080 ldd R2,z+0
0044 2BBA out 0x1b,R2
0046 .dbline 27
0046 02E0 ldi R16,2
0048 DBDF rcall _DelayMs
004A .dbline 28
004A 440F lsl R20
004C .dbline 29
004C L12:
004C .dbline 24
004C 6395 inc R22
004E L14:
004E .dbline 24
004E 6430 cpi R22,4
0050 68F3 brlo L11
0052 .dbline -2
0052 .dbline 30
0052 ; {PORTC=sel; //选通最右边的数码管
0052 ; PORTA=Table[p[i]]; //送字型码
0052 ; DelayMs(2); //显示延时
0052 ; sel=sel<<1; //移位以显示前一位
0052 ; }
0052 ; }
0052 L10:
0052 00D0 rcall pop_gset3
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym r sel 20 c
0056 .dbsym r i 22 c
0056 .dbsym r p 10 pc
0056 .dbend
0056 .dbfunc e Process _Process fV
0056 ; p -> R20,R21
0056 ; i -> R22,R23
.even
0056 _Process::
0056 00D0 rcall push_gset2
0058 422F mov R20,R18
005A 532F mov R21,R19
005C 602F mov R22,R16
005E 712F mov R23,R17
0060 .dbline -1
0060 .dbline 36
0060 ;
0060 ; //******************************计数值处理函数******************************//
0060 ; //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
0060 ; //参数说明:参数i:计数值;参数p:处理数据存放的数组名//
0060 ; void Process(uint i,uchar *p)
0060 ; {p[0]=i/1000;
0060 .dbline 36
0060 28EE ldi R18,1000
0062 33E0 ldi R19,3
0064 062F mov R16,R22
0066 172F mov R17,R23
0068 00D0 rcall div16u
006A E42F mov R30,R20
006C F52F mov R31,R21
006E 0083 std z+0,R16
0070 .dbline 37
0070 ; i=i%1000;
0070 .dbline 38
0070 ; p[1]=i/100;
0070 28EE ldi R18,1000
0072 33E0 ldi R19,3
0074 062F mov R16,R22
0076 172F mov R17,R23
0078 00D0 rcall mod16u
007A 602F mov R22,R16
007C 712F mov R23,R17
007E 24E6 ldi R18,100
0080 30E0 ldi R19,0
0082 00D0 rcall div16u
0084 E42F mov R30,R20
0086 F52F mov R31,R21
0088 0183 std z+1,R16
008A .dbline 39
008A ; i=i%100;
008A .dbline 40
008A ; p[2]=i/10;
008A 24E6 ldi R18,100
008C 30E0 ldi R19,0
008E 062F mov R16,R22
0090 172F mov R17,R23
0092 00D0 rcall mod16u
0094 602F mov R22,R16
0096 712F mov R23,R17
0098 2AE0 ldi R18,10
009A 30E0 ldi R19,0
009C 00D0 rcall div16u
009E E42F mov R30,R20
00A0 F52F mov R31,R21
00A2 0283 std z+2,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -